Но в любом случае входящий HTTP-запрос приводит к тому, что действие помещается в очередь, за выполнение которой отвечает отдельный поток (через ExecutorService). Затем вызывается обратный вызов, уведомляющий толкатель о завершении операции.
Я переработал часть этого поведения в служебный метод:
Код: Выделить всё
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
}
Код: Выделить всё
POINT BКод: Выделить всё
POINT AУвидит ли Spring, что возвращаемый DeferredResult уже имеет значение, и обработает его, или он начнет «наблюдать» за тем, чтобы установщик был вызван после предоставления экземпляра?
Подробнее здесь: https://stackoverflow.com/questions/320 ... -already-s
Мобильная версия