Class ObserverNotifier


  • public class ObserverNotifier
    extends Object
    Provides event-related operations such as observer method resolution and event delivery. An ObserverNotifier may be created with strict checks enabled. In such case event type checks are performed. Otherwise, the ObserverNotifier is called lenient. The lenient version should be used for internal dispatching of events only.
    Author:
    Jozef Hartinger, David Allen
    • Constructor Detail

      • ObserverNotifier

        protected ObserverNotifier​(String contextId,
                                   TypeSafeObserverResolver resolver,
                                   org.jboss.weld.bootstrap.api.ServiceRegistry services,
                                   boolean strict)
    • Method Detail

      • resolveObserverMethods

        public <T> ResolvedObservers<T> resolveObserverMethods​(Type eventType,
                                                               Annotation... qualifiers)
        Resolves observer methods based on the given event type and qualifiers. If strict checks are enabled the given type is verified.
        Parameters:
        event - the event object
        qualifiers - given event qualifiers
        Returns:
        resolved observer methods
      • resolveObserverMethods

        public <T> ResolvedObservers<T> resolveObserverMethods​(Type eventType,
                                                               Set<Annotation> qualifiers)
        Resolves observer methods based on the given event type and qualifiers. If strict checks are enabled the given type is verified.
        Parameters:
        event - the event object
        qualifiers - given event qualifiers
        Returns:
        resolved observer methods
      • resolveObserverMethods

        public <T> ResolvedObservers<T> resolveObserverMethods​(Resolvable resolvable)
        Resolves observer methods using the given resolvable.
        Parameters:
        resolvable - the given resolvable
        Returns:
        resolved observer methods
      • fireEvent

        public void fireEvent​(Object event,
                              jakarta.enterprise.inject.spi.EventMetadata metadata,
                              Annotation... qualifiers)
        Delivers the given event object to observer methods resolved based on the runtime type of the event object and given event qualifiers. If strict checks are enabled the event object type is verified.
        Parameters:
        event - the event object
        metadata - event metadata
        qualifiers - event qualifiers
      • fireEvent

        public void fireEvent​(Type eventType,
                              Object event,
                              Annotation... qualifiers)
        Delivers the given event object to observer methods resolved based on the given event type and qualifiers. If strict checks are enabled the given type is verified.
        Parameters:
        eventType - the given event type
        event - the given event object
        qualifiers - event qualifiers
      • fireEvent

        public void fireEvent​(Type eventType,
                              Object event,
                              jakarta.enterprise.inject.spi.EventMetadata metadata,
                              Annotation... qualifiers)
      • fireEvent

        public void fireEvent​(Object event,
                              Resolvable resolvable)
        Delivers the given event object to observer methods resolved based on the given resolvable. If strict checks are enabled the event object type is verified.
        Parameters:
        event - the given event object
        resolvable -
      • clear

        public void clear()
        Clears cached observer method resolutions and event type checks.
      • checkEventObjectType

        protected void checkEventObjectType​(Object event)
      • checkEventObjectType

        public void checkEventObjectType​(Type eventType)
        If strict checks are enabled this method performs event type checks on the given type. More specifically it verifies that no type variables nor wildcards are present within the event type. In addition, this method verifies, that the event type is not assignable to a container lifecycle event type. If strict checks are not enabled then this method does not perform any action.
        Parameters:
        eventType - the given event type
        Throws:
        IllegalArgumentException - if the strict mode is enabled and the event type contains a type variable, wildcard or is assignable to a container lifecycle event type
      • notify

        public <T> void notify​(ResolvedObservers<T> observers,
                               T event,
                               jakarta.enterprise.inject.spi.EventMetadata metadata)
        Delivers the given synchronous event object to synchronous and transactional observer methods. Event metadata is made available for injection into observer methods, if needed. Asynchronous observer methods are ignored.
        Parameters:
        observers - the given observer methods
        event - the given event object
        metadata - event metadata
      • notifySyncObservers

        protected <T> void notifySyncObservers​(List<jakarta.enterprise.inject.spi.ObserverMethod<? super T>> observers,
                                               T event,
                                               jakarta.enterprise.inject.spi.EventMetadata metadata,
                                               ObserverNotifier.ObserverExceptionHandler handler)
      • notifyTransactionObservers

        protected <T> void notifyTransactionObservers​(List<jakarta.enterprise.inject.spi.ObserverMethod<? super T>> observers,
                                                      T event,
                                                      jakarta.enterprise.inject.spi.EventMetadata metadata,
                                                      ObserverNotifier.ObserverExceptionHandler handler)
      • notifyAsync

        public <T,​U extends T> CompletionStage<U> notifyAsync​(ResolvedObservers<T> observers,
                                                                    U event,
                                                                    jakarta.enterprise.inject.spi.EventMetadata metadata,
                                                                    jakarta.enterprise.event.NotificationOptions options)
        Delivers the given asynchronous event object to given observer asynchronous observer methods. Asynchronous observer methods are scheduled to be notified in a separate thread. Note that this method exits just after event delivery to asynchronous observer methods is scheduled. EventMetadata is made available for injection into observer methods, if needed. Note that if any of the observer methods throws an exception, it is never thrown out of this method. Instead, all the exceptions are grouped together using CompletionException and the returned CompletionStage fails with this compound exception. If an executor is provided then observer methods are notified using this executor. Otherwise, Weld's task executor is used.
        Parameters:
        observers - the given observer methods
        event - the given event object
        metadata - event metadata
        options -
      • notifyAsyncObservers

        protected <T,​U extends T> CompletionStage<U> notifyAsyncObservers​(List<jakarta.enterprise.inject.spi.ObserverMethod<? super T>> observers,
                                                                                U event,
                                                                                jakarta.enterprise.inject.spi.EventMetadata metadata,
                                                                                Executor executor,
                                                                                jakarta.enterprise.event.NotificationOptions options)