[
https://issues.jboss.org/browse/CDI-499?page=com.atlassian.jira.plugin.sy...
]
Antoine Sabot-Durand edited comment on CDI-499 at 1/21/15 5:32 AM:
-------------------------------------------------------------------
This ticket comes after a lot of discussion around async events in CDI-31, in the event
workshop document (
http://bit.ly/cdi2wsevt) or IRC meeting. In these discussions there
were a lot of more complicated scenario but we wanted to keep CDI event as simple as
possible. For advanced asynchronous scenario, JDK8 will provide its new API
{{CompletableFuture}} or we could add the support of asynchronous operation in CDI if
necessary.
was (Author: antoinesabot-durand):
This ticket comes after a lot of discussion around async events in CDI-31 or in the event
workshop document. In these discussions there were a lot of more complicated scenario but
we wanted to keep CDI event as simple as possible. For advanced asynchronous scenario,
JDK8 will provide its new API {{CompletableFuture}} or we could add the support of
asynchronous operation in CDI if necessary.
Firing events asynchronously
-----------------------------
Key: CDI-499
URL:
https://issues.jboss.org/browse/CDI-499
Project: CDI Specification Issues
Issue Type: Feature Request
Components: Events
Affects Versions: 1.2.Final
Reporter: Antoine Sabot-Durand
We should allow a way to fire event asynchronously. This mechanism should leverage new
async API in JDK8 especially the {{CompletionStage}} interface.
Our proposal is:
h2. 1. Add {{fireAsync()}} method to {{Event}} and {{BeanManager}}
Signature of the method on {{Event<T>}} would be
{code:java}
<U extends T> CompletionStage<U> fireAsync(U event);
{code}
Signature on {{BeanManager}} would be
{code:java}
<T> CompletionStage<T> fireAsyncEvent(T event, Annotation... qualifiers)
{code}
h2. 2. Add an {{asyncSupported()}} member to {{@Observes}}
For backward compatibility reason the possibility to invoke an observer asynchronously
should be let to the observer (legacy observers should be called synchronously). We
propose to add the boolean {{asyncSupported()}} member with the {{false}} default value to
support this backward compatibility aspect.
h2. 3. Observer bound to a transaction phase
these observer will be invoked in the right transaction phase but asynchronously
h2. 4. Event Ordering
Should we decide to add events ordering in CDI 2.0, the order will be keep in
asynchronous observer notification. If there are amix of synchronous and asynchronous
observer, asynchronous will be called first in order, then synchronous in their order
(async has priority on sync).
h2. 5. Event state (payload mutability)
We'll keep payload mutability with async events (but should explicitly specify it).
That means that we should guarantee the event state consistency between observers and in
case of ordered observers the fact that observer N+1 get the event state at the end of
observer N.
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)