J'utilise Play 2.6.3 et j'ai récemment effectué une mise à niveau depuis Play 2.5.x. J'ai des problèmes avec session
et HTTPExecutionContext
pour manipuler le cache comme le nouveau Play 2.6.x utilise EhCache
.Play Framework 2.6 Session Async Java et HTTPExecutionContext
En jeu 2.5, il est assez simple à mettre en cache getOrUpdate la manière suivante:
User currentUser = cache.getOrElse(session("email"),() -> {
User user = User.find.byId(session("email"));
cache.set(user.email, user, Constants.CACHE_TIMEOUT);
return user;
});
Cela ne fonctionne en jeu comme ils l'ont désapprouvés la méthode getOrElse et ont plutôt créer getOrElseUpdate qui utilise l'API de cache & est défini par les interfaces AsyncCacheApi et SyncCacheApi. Donc, en bref le nouveau cache de retour CompletionStage au lieu de retourner directement T.
le nouveau code jeu 2.6:
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());
}
La fonction lookUpUser renvoie une erreur de: java.lang.RuntimeException: There is no HTTP Context available from here.
Toute aide serait apprécié.
Désolé de ne pas poster mon code de contrôleur complet. Mais j'ai déjà injecté et initialisé le contexte HTTPExecution et Cache dans le contrôleur – illusionx
Et comme j'utilise la session dans ma fonction 'lookUpUser', il ne fait que lancer" No HTTP Execution Context Available " – illusionx