Uploaded image for project: 'CDI Specification Issues'
  1. CDI Specification Issues
  2. CDI-499

Firing events asynchronously

XMLWordPrintable

    • Icon: Feature Request Feature Request
    • Resolution: Done
    • Icon: Major Major
    • 2.0-EDR1
    • 1.2.Final
    • Events
    • None

      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:

      1. Add fireAsync() method to Event and BeanManager

      Signature of the method on Event<T> would be

      <U extends T> CompletionStage<U> fireAsync(U event);
      

      Signature on BeanManager would be

      <T> CompletionStage<T> fireAsyncEvent(T event, Annotation... qualifiers)
      

      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.
      So to be notified asynchronously an observer should have asyncSupported member to true. otherwise it will be called synchronously.

      3. Observer bound to a transaction phase

      these observer will be invoked in the right transaction phase but asynchronously

      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 a mix of synchronous and asynchronous observer, asynchronous will be called first in order, then synchronous in their order (async has priority on sync).

      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.

              asabotdu@redhat.com Antoine Sabot-Durand (Inactive)
              asabotdu@redhat.com Antoine Sabot-Durand (Inactive)
              Votes:
              6 Vote for this issue
              Watchers:
              11 Start watching this issue

                Created:
                Updated:
                Resolved: