2016-09-11 10 views
0

私のコードはサーバーを呼び出し、old-responseを取得します。私はどのようにオブジェクトを待ってコールバックに保存することができます

次に、私はサーバーから別の応答(別名new-response)が得られるまでポーリングします。

私はwhileループを使用して、new-responseを保持し、ポーリング後に使用することができます。

私はawaitilityをどうすれば簡単にnew-responseを得ることができますか?ここで

は私のコードです:

public Version waitForNewConfig() throws Exception { 
    Version oldVersion = deploymentClient.getCurrentConfigVersion(appName); 
    await().atMost(1, MINUTES).pollInterval(5, SECONDS).until(newVersionIsReady(oldVersion)); 
    Version newVersion = deploymentClient.getCurrentConfigVersion(appName); 


} 

private Callable<Boolean> newVersionIsReady(Version oldVersion) { 
    return new Callable<Boolean>() { 
     public Boolean call() throws Exception { 
      Version newVersion = deploymentClient.getCurrentConfigVersion(appName); 

      return !oldVersion.equals(newVersion); 
     } 
    }; 
} 

答えて

0

一つの方法は、それを覚えて、特殊な呼び出し可能な実装を作ることです。

public Version waitForNewConfig() throws Exception { 
    NewVersionIsReady newVersionIsReady = new NewVersionIsReady(deploymentClient.getCurrentConfigVersion(appName)); 
    await().atMost(1, MINUTES).pollInterval(5, SECONDS).until(newVersionIsReady); 

    return newVersionIsReady.getNewVersion(); 
} 

private final class NewVersionIsReady implements Callable<Boolean> { 
    private final Version oldVersion; 
    private Version newVersion; 

    private NewVersionIsReady(Version oldVersion) { 
     this.oldVersion = oldVersion; 
    } 

    public Boolean call() throws Exception { 
     Version newVersion = deploymentClient.getCurrentConfigVersion(appName); 

     return !oldVersion.equals(newVersion); 
    } 

    public Version getNewVersion() { 
     return newVersion; 
    } 
} 

もう一つは、私が使用例として、(コンテナに保管することです配列)

public Version waitForNewConfig() throws Exception { 
    Version[] currentVersionHolder = new Version[1]; 
    Version oldVersion = deploymentClient.getCurrentConfigVersion(appName); 
    await().atMost(1, MINUTES).pollInterval(5, SECONDS).until(() -> { 
     Version newVersion = deploymentClient.getCurrentConfigVersion(appName); 
     currentVersionHolder[0] = newVersion; 
     return !oldVersion.equals(newVersion); 
    }); 

    return currentVersionHolder[0]; 
} 

まだJava 8を使用していない場合は、匿名の内部クラスaうーん。

関連する問題