Package org.jboss.weld.event
Class ObserverNotifier
- java.lang.Object
-
- org.jboss.weld.event.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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
ObserverNotifier.ObserverExceptionHandler
There are two different strategies of exception handling for observer methods.
-
Field Summary
Fields Modifier and Type Field Description protected CurrentEventMetadata
currentEventMetadata
-
Constructor Summary
Constructors Modifier Constructor Description protected
ObserverNotifier(String contextId, TypeSafeObserverResolver resolver, org.jboss.weld.bootstrap.api.ServiceRegistry services, boolean strict)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Resolvable
buildEventResolvable(Type eventType, Annotation... qualifiers)
protected Resolvable
buildEventResolvable(Type eventType, Set<Annotation> qualifiers)
protected void
checkEventObjectType(Object event)
void
checkEventObjectType(Type eventType)
If strict checks are enabled this method performs event type checks on the given type.void
clear()
Clears cached observer method resolutions and event type checks.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.void
fireEvent(Object event, Resolvable resolvable)
Delivers the given event object to observer methods resolved based on the given resolvable.void
fireEvent(Type eventType, Object event, jakarta.enterprise.inject.spi.EventMetadata metadata, Annotation... qualifiers)
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.<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.<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.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)
protected <T> void
notifySyncObservers(List<jakarta.enterprise.inject.spi.ObserverMethod<? super T>> observers, T event, jakarta.enterprise.inject.spi.EventMetadata metadata, ObserverNotifier.ObserverExceptionHandler handler)
protected <T> void
notifyTransactionObservers(List<jakarta.enterprise.inject.spi.ObserverMethod<? super T>> observers, T event, jakarta.enterprise.inject.spi.EventMetadata metadata, ObserverNotifier.ObserverExceptionHandler handler)
<T> ResolvedObservers<T>
resolveObserverMethods(Type eventType, Annotation... qualifiers)
Resolves observer methods based on the given event type and qualifiers.<T> ResolvedObservers<T>
resolveObserverMethods(Type eventType, Set<Annotation> qualifiers)
Resolves observer methods based on the given event type and qualifiers.<T> ResolvedObservers<T>
resolveObserverMethods(Resolvable resolvable)
Resolves observer methods using the given resolvable.
-
-
-
Field Detail
-
currentEventMetadata
protected final CurrentEventMetadata currentEventMetadata
-
-
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 objectqualifiers
- 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 objectqualifiers
- 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 objectmetadata
- event metadataqualifiers
- 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 typeevent
- the given event objectqualifiers
- 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 objectresolvable
-
-
buildEventResolvable
protected Resolvable buildEventResolvable(Type eventType, Set<Annotation> qualifiers)
-
buildEventResolvable
protected Resolvable buildEventResolvable(Type eventType, Annotation... qualifiers)
-
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 methodsevent
- the given event objectmetadata
- 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 usingCompletionException
and the returnedCompletionStage
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 methodsevent
- the given event objectmetadata
- event metadataoptions
-
-
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)
-
-