2016-09-11 2 views
0

Mein Code ruft einen Server und erhalten eine old-response.Wie kann ich ein Objekt in der Zurückhaltung Rückruf speichern

Dann möchte ich abfragen, bis ich eine andere Antwort vom Server bekomme (aka new-response).

Ich benutze while-Schleife Ich kann die new-response halten und nach dem Abruf verwenden. Wenn ich awaitility verwende, wie kann ich die new-response einfach erhalten?

Hier ist mein Code:

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); 
     } 
    }; 
} 

Antwort

0

Eine Möglichkeit ist eine spezialisierte Callable Umsetzung zu machen, die sie erinnert sich:

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; 
    } 
} 

Ein weiterer zu speichern ist es in einem Behälter (als Beispiel verwende ich ein Array)

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]; 
} 

Wenn Sie Java 8 noch nicht verwenden, können Sie es mit einer anonymen inneren Klasse a tun anschwellen.

Verwandte Themen