Aber in beiden Fällen führt die eingehende HTTP-Anfrage dazu, dass eine Aktion in eine Warteschlange verschoben wird, für deren Verarbeitung ein separater Thread (über einen ExecutorService) verantwortlich ist. Anschließend wird ein Rückruf aufgerufen, der den Pusher darüber informiert, dass der Vorgang abgeschlossen ist.
Ich habe einige dieser Verhaltensweisen in eine Dienstprogrammmethode umgestaltet:
Code: Select all
public static DeferredResult toResponse(GameManager gameManager, final Player player, Action action) {
DeferredResult deferredResult = new DeferredResult();
gameManager.execute(action, new Handler() {
@Override
public void handle(Result result) {
JSONObject obj;
try {
obj = gameManager.getGameJSON(player);
obj.put("success", result.getResult());
obj.put("message", result.getMessage());
deferredResult.setResult(obj.toString()); // POINT B
} catch (JSONException e) {
deferredResult.setErrorResult(e);
}
}
});
return deferredResult; // POINT A
}
Code: Select all
POINT BCode: Select all
POINT AWird Spring sehen, dass das zurückgegebene DeferredResult bereits einen Wert hat und ihn verarbeiten, oder beginnt es erst mit der „Überwachung“, bis der Setter aufgerufen wird, nachdem die Instanz bereitgestellt wurde?
Mobile version