[
https://issues.jboss.org/browse/CDI-729?page=com.atlassian.jira.plugin.sy...
]
Romain Manni-Bucau commented on CDI-729:
----------------------------------------
If the observer execute some reactive code returning a CompletionStage there is no way in
current spec to chain the CompletionStage of the processing to the event firing to ensure
it is executed before returning. This makes the whole API quite useless and requires to
define another way to fire event and compose them.
{code}
public CompletionStage<Entity> save(Entity e);
{code}
{code}
fireAsync(new Persist(entity))
{code}
How do you compose both?
What you want is:
{code}
CompletionStage<?> onPersist(@ObserveAsync CompletionStage<Persist> persist)
{
return persist.thenCompose(event -> repo.save(event.getEntity());
}
{code}
This way the fireAsync ensures the persistence is done:
{code}
event.fireAsync(new Persist(entity))
.thenApply(event -> log.info("{} persisted", event.getEntity()));
{code}
Async event not CompletionStage friendly
----------------------------------------
Key: CDI-729
URL:
https://issues.jboss.org/browse/CDI-729
Project: CDI Specification Issues
Issue Type: Feature Request
Reporter: Romain Manni-Bucau
The goal of this ticket is to enable user to get injected the completion future instead
of the raw event and return another completion stage (generic type ignored) to enable the
"chain" to be synched.
Here is a sample:
1. fireAsync(persistEvent)
2. observer implementation does: return future.thenCompose(db::doAsyncPersist)
3. when the user gets back the result of the fireAsync the doAsyncPersist is completed.
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)