Четох някъде, че класът CompletableFuture и неговите конструктури и методи и т.н. трябва да бъдат изпълнени през някакъв task. Техният Supplier ползва специфичен домейн service MessageService, който е session scope-нат. Service-a е инжектиран от Guice.
public class MessageProcessingPage {
private MessageService messageService;
@Inject
public MessagProcessingPage (MessageService messageService) {
this.messageService = messageService;
}
// Called by request scoped thread.
public void onProcessMessagesButton () {
ExecutorService executorService = Executors.newFixedThreadPool(3);
CompletableFuture.supplyAsync(
// Called from a thread from the threadpool.
() -> {return messageService.retrieveMessageMetadataSet(x, y);}
, executorService);
...
}
...
}
MessageService-а има session scope-нат MessageRestClient ,който е инжектиран
@SessionScoped
public class MessageService {
private MessageRestClient messageRestClient;
@Inject
public MessageRestClient (MessageRestClient messageRestClient) {
this.messageRestClient = messageRestClient;
}
public MessageMetaDataSet retrieveMessageMetadataSet(x, y) {
List<MessageMetaData> listOfMetaData = messageRestClient.retrieve(x, y, z);
...
}
...
}
@SessionScoped
public class MessageRestClient {
...
}
Но Guice се затруднява да инжектира MessageRestClient-а.
java.util.concurrent.CompletionException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error in custom provider, com.google.inject.OutOfScopeException: Cannot access scoped [MessageRestClient]. Either we are not currently inside an HTTP Servlet request, or you may have forgotten to apply com.google.inject.servlet.GuiceFilter as a servlet filter for this request.
Четох за един метод ServletScopes : public static <T> Callable<T> transferRequest(Callable<T> callable)
https://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/servlet/ServletScopes.html#transferRequest-java.util.concurrent.Callable-
Но не виждам начин да го използвам, понеже никакви Callables не влизат в програмата. Някой да помогне?