Class AbstractListenerImpl<T,L extends ListenerInvocation<T>>
- java.lang.Object
-
- org.infinispan.notifications.impl.AbstractListenerImpl<T,L>
-
- Type Parameters:
T- Defines the type of event that will be used by the subclassL- Defines the type of ListenerInvocations that the subclasses use
- Direct Known Subclasses:
CacheManagerNotifierImpl,CacheNotifierImpl
public abstract class AbstractListenerImpl<T,L extends ListenerInvocation<T>> extends Object
Functionality common to bothCacheManagerNotifierImplandCacheNotifierImpl- Author:
- Manik Surtani, William Burns
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classAbstractListenerImpl.AbstractInvocationBuilderprotected classAbstractListenerImpl.ListenerInvocationImpl<A>Class that encapsulates a valid invocation for a given registered listener - containing a reference to the method to be invoked as well as the target object.
-
Field Summary
Fields Modifier and Type Field Description protected ExecutorasyncProcessorprotected Map<Class<? extends Annotation>,List<L>>listenersMap
-
Constructor Summary
Constructors Constructor Description AbstractListenerImpl()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleancanApply(Set<Class<? extends Annotation>> filterAnnotations, Class<? extends Annotation> annotationClass)protected static AggregateCompletionStage<Void>composeStageIfNeeded(AggregateCompletionStage<Void> aggregateCompletionStage, CompletionStage<Void> stage)If the given stage is null or normally completed returns the provided aggregateCompletionStage as is.protected Set<Class<? extends Annotation>>findListenerCallbacks(Object listener)protected abstract Map<Class<? extends Annotation>,Class<?>>getAllowedMethodAnnotations(Listener l)protected List<L>getListenerCollectionForAnnotation(Class<? extends Annotation> annotation)Set<Object>getListeners()protected abstract LoggetLog()booleanhasListener(Class<? extends Annotation> annotationClass)abstract CompletionStage<Void>removeListenerAsync(Object listener)protected voidremoveListenerFromMaps(Object listener)protected Set<L>removeListenerInvocation(Class<? extends Annotation> annotation, Object listener)protected abstract voidresumeIfNeeded(Transaction transaction)protected CompletionStage<Void>resumeOnCPU(CompletionStage<Void> stage, Object traceId)voidstop()Removes all listeners from the notifierprotected abstract TransactionsuspendIfNeeded()protected static ListenertestListenerClassValidity(Class<?> listenerClass)Tests if a class is properly annotated as a CacheListener and returns the Listener annotation.protected static voidtestListenerMethodValidity(Method m, Class<?> allowedParameter, String annotationName)Tests that a method is a valid listener method, that is that it has a single argument that is assignable to allowedParameter.protected booleanvalidateAndAddFilterListenerInvocations(Object listener, AbstractListenerImpl.AbstractInvocationBuilder builder, Set<Class<? extends Annotation>> filterAnnotations)protected booleanvalidateAndAddListenerInvocations(Object listener, AbstractListenerImpl.AbstractInvocationBuilder builder)Loops through all valid methods on the object passed in, and caches the relevant methods asListenerInvocationfor invocation by reflection.
-
-
-
Field Detail
-
asyncProcessor
protected Executor asyncProcessor
-
listenersMap
protected final Map<Class<? extends Annotation>,List<L extends ListenerInvocation<T>>> listenersMap
-
-
Method Detail
-
stop
public void stop()
Removes all listeners from the notifier
-
resumeOnCPU
protected CompletionStage<Void> resumeOnCPU(CompletionStage<Void> stage, Object traceId)
-
getLog
protected abstract Log getLog()
-
getAllowedMethodAnnotations
protected abstract Map<Class<? extends Annotation>,Class<?>> getAllowedMethodAnnotations(Listener l)
-
hasListener
public boolean hasListener(Class<? extends Annotation> annotationClass)
-
getListenerCollectionForAnnotation
protected List<L> getListenerCollectionForAnnotation(Class<? extends Annotation> annotation)
-
removeListenerAsync
public abstract CompletionStage<Void> removeListenerAsync(Object listener)
-
composeStageIfNeeded
protected static AggregateCompletionStage<Void> composeStageIfNeeded(AggregateCompletionStage<Void> aggregateCompletionStage, CompletionStage<Void> stage)
If the given stage is null or normally completed returns the provided aggregateCompletionStage as is. Otherwise the stage is used as a dependant for the provided aggregateCompletionStage if provided or a new one is created that depends upon the provided stage. The existing or new aggregateCompletionStage is then returned to the caller.- Parameters:
aggregateCompletionStage- the existing composed stage or nullstage- the stage to rely upon- Returns:
- null or a composed stage that relies upon the provided stage
-
removeListenerFromMaps
protected void removeListenerFromMaps(Object listener)
-
removeListenerInvocation
protected Set<L> removeListenerInvocation(Class<? extends Annotation> annotation, Object listener)
-
validateAndAddListenerInvocations
protected boolean validateAndAddListenerInvocations(Object listener, AbstractListenerImpl.AbstractInvocationBuilder builder)
Loops through all valid methods on the object passed in, and caches the relevant methods asListenerInvocationfor invocation by reflection. The builder provided will be used to create the listener invocations. This method will set the target, subject sync, and methods as needed. If other values are needed to be set they should be invoked before passing to this method.- Parameters:
listener- object to be considered as a listener.builder- The builder to use to build the invocation- Returns:
trueif annotated listener methods were found orfalseotherwise
-
validateAndAddFilterListenerInvocations
protected boolean validateAndAddFilterListenerInvocations(Object listener, AbstractListenerImpl.AbstractInvocationBuilder builder, Set<Class<? extends Annotation>> filterAnnotations)
-
canApply
public boolean canApply(Set<Class<? extends Annotation>> filterAnnotations, Class<? extends Annotation> annotationClass)
-
findListenerCallbacks
protected Set<Class<? extends Annotation>> findListenerCallbacks(Object listener)
-
testListenerClassValidity
protected static Listener testListenerClassValidity(Class<?> listenerClass)
Tests if a class is properly annotated as a CacheListener and returns the Listener annotation.- Parameters:
listenerClass- class to inspect- Returns:
- the Listener annotation
-
testListenerMethodValidity
protected static void testListenerMethodValidity(Method m, Class<?> allowedParameter, String annotationName)
Tests that a method is a valid listener method, that is that it has a single argument that is assignable to allowedParameter. The method must also return either void or a CompletionStage, meaning the method promises not block.- Parameters:
m- method to testallowedParameter- what parameter is allowed for the method argumentannotationName- name of the annotation- Throws:
IncorrectListenerException- if the listener is not a valid target
-
suspendIfNeeded
protected abstract Transaction suspendIfNeeded()
-
resumeIfNeeded
protected abstract void resumeIfNeeded(Transaction transaction)
-
-