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 bothCacheManagerNotifierImpl
andCacheNotifierImpl
- Author:
- Manik Surtani, William Burns
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
AbstractListenerImpl.AbstractInvocationBuilder
protected class
AbstractListenerImpl.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 Executor
asyncProcessor
protected 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 boolean
canApply(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 org.infinispan.util.logging.Log
getLog()
protected void
handleException(Throwable t)
boolean
hasListener(Class<? extends Annotation> annotationClass)
protected CompletionStage<Void>
invokeListeners(T event, Collection<L> listeners)
abstract CompletionStage<Void>
removeListenerAsync(Object listener)
protected void
removeListenerFromMaps(Object listener)
protected Set<L>
removeListenerInvocation(Class<? extends Annotation> annotation, Object listener)
protected abstract void
resumeIfNeeded(javax.transaction.Transaction transaction)
protected CompletionStage<Void>
resumeOnCPU(CompletionStage<Void> stage, Object traceId)
void
stop()
Removes all listeners from the notifierprotected abstract javax.transaction.Transaction
suspendIfNeeded()
protected static Listener
testListenerClassValidity(Class<?> listenerClass)
Tests if a class is properly annotated as a CacheListener and returns the Listener annotation.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.protected boolean
validateAndAddFilterListenerInvocations(Object listener, AbstractListenerImpl.AbstractInvocationBuilder builder, Set<Class<? extends Annotation>> filterAnnotations)
protected boolean
validateAndAddListenerInvocations(Object listener, AbstractListenerImpl.AbstractInvocationBuilder builder)
Loops through all valid methods on the object passed in, and caches the relevant methods asListenerInvocation
for 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 org.infinispan.util.logging.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 asListenerInvocation
for 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:
true
if annotated listener methods were found orfalse
otherwise
-
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
-
invokeListeners
protected CompletionStage<Void> invokeListeners(T event, Collection<L> listeners)
-
handleException
protected void handleException(Throwable t)
-
suspendIfNeeded
protected abstract javax.transaction.Transaction suspendIfNeeded()
-
resumeIfNeeded
protected abstract void resumeIfNeeded(javax.transaction.Transaction transaction)
-
-