私はPlay 2.6.3を使用していますが、最近Play 2.5.xからアップグレードしました。 新しいPlay 2.6.xがEhCache
を使用するため、キャッシュを操作するためにsession
とHTTPExecutionContext
の問題が発生しています。プレイ2.5でPlay Framework 2.6 Java Async SessionおよびHTTPExecutionContext
それは次のようgetOrUpdateキャッシュにはかなり簡単だった:これは、彼らがgetOrElseメソッドを非推奨となり、代わりにしているとして劇中の作品はキャッシュAPI &を使用するgetOrElseUpdateを作成していないん
User currentUser = cache.getOrElse(session("email"),() -> {
User user = User.find.byId(session("email"));
cache.set(user.email, user, Constants.CACHE_TIMEOUT);
return user;
});
されますAsyncCacheApiインターフェースとSyncCacheApiインターフェースで定義されています。 ので、短い新しいキャッシュに直接T.
を返す代わりにCompletionStageを返す新しい演劇2.6コード:lookUpUser関数はのエラースロー
CompletionStage<User> maybeCached = cache.getOrElseUpdate(session("email"),() -> lookUpUser());
return maybeCached.thenApplyAsync(op -> {
return ok(views.html.dashboard.render("Dashboard", op, op.organization));
}, httpExecutionContext.current());
public CompletionStage<User> lookUpUser() {
return CompletableFuture.supplyAsync(() -> User.find.byId(session("email")),httpExecutionContext.current());
}
:java.lang.RuntimeException: There is no HTTP Context available from here.
をすべてのヘルプは次のようになります感謝。
私の完全なコントローラコードを投稿していただきありがとうございます。しかし、私はすでにHTTPExecutionコンテキストとキャッシュをコントローラに注入し初期化しています – illusionx
そして、私の 'lookUpUser'関数でセッションを使用しているので、' HTTP実行コンテキストがありません ' – illusionx