@Retention(value=RUNTIME) @Target(value=TYPE) public @interface Listener
Listenable.addListener(Object) and related APIs. Note that even if a class is annotated with this
annotation, it still needs method-level annotation (such as CacheStarted)
to actually receive notifications. Objects annotated with this annotation - listeners - can be attached to a
running Cache so users can be notified of Cache events. There can
be multiple methods that are annotated to receive the same event, and a method may receive multiple events by using a
super type. TransactionalEvent.getGlobalTransaction()
can be used, along with TransactionCompletedEvent.isTransactionSuccessful()
to record events and later process them once the transaction has been successfully committed. Example 4 demonstrates
this. GlobalConfiguration.setAsyncListenerExecutorProperties(java.util.Properties)
and GlobalConfiguration.setAsyncListenerExecutorFactoryClass(String).
Summary of Notification Annotations | Annotation | Event | Description |
|---|---|---|
CacheStarted | CacheStartedEvent | A cache was started |
CacheStopped |
CacheStoppedEvent | A cache was stopped |
CacheEntryModified |
CacheEntryModifiedEvent | A cache entry was modified |
CacheEntryCreated | CacheEntryCreatedEvent | A cache entry was created |
CacheEntryRemoved |
CacheEntryRemovedEvent | A cache entry was removed |
CacheEntryVisited |
CacheEntryVisitedEvent | A cache entry was visited |
CacheEntryLoaded |
CacheEntryLoadedEvent | A cache entry was loaded |
CacheEntriesEvicted |
CacheEntriesEvictedEvent | A cache entries were evicted |
CacheEntryActivated |
CacheEntryActivatedEvent | A cache entry was activated |
CacheEntryPassivated | CacheEntryPassivatedEvent | One or more cache entries were passivated |
ViewChanged |
ViewChangedEvent | A view change event was detected |
TransactionRegistered | TransactionRegisteredEvent | The cache has started to participate in a transaction |
TransactionCompleted |
TransactionCompletedEvent | The cache has completed its participation in a transaction |
CacheEntryInvalidated | CacheEntryInvalidatedEvent | A cache entry was invalidated by a remote cache. Only if cache mode is INVALIDATION_SYNC or INVALIDATION_ASYNC. |
@Listener
public class SingleEventListener
{
@CacheStarted
public void doSomething(Event event)
{
System.out.println("Cache started. Details = " + event);
}
}
@Listener
public class MultipleEventListener
{
@CacheStarted
@CacheStopped
public void doSomething(Event event)
{
if (event.getType() == Event.Type.CACHE_STARTED)
System.out.println("Cache started. Details = " + event);
else if (event.getType() == Event.Type.CACHE_STOPPED)
System.out.println("Cache stopped. Details = " + event);
}
}
@Listener
public class SingleEventListener
{
@CacheStarted
public void handleStart(Event event)
{
System.out.println("Cache started");
}
@CacheStarted
@CacheStopped
@CacheBlocked
@CacheUnblocked
@ViewChanged
public void logEvent(Event event)
{
logSystem.logEvent(event.getType());
}
}
Example 4 - Processing only events with a committed transaction.
@Listener
public class EventHandler
{
private ConcurrentMap<GlobalTransaction, Queue<Event>> map = new ConcurrentHashMap<GlobalTransaction, Queue<Event>>();
@TransactionRegistered
public void startTransaction(TransactionRegisteredEvent event)
{
map.put(event.getGlobalTransaction(), new ConcurrentLinkedQueue<Event>());
}
@CacheEntryCreated
@CacheEntryModified
@CacheEntryRemoved
public void addEvent(TransactionalEvent event)
{
map.get(event.getGlobalTransaction()).add(event);
}
@TransactionCompleted
public void endTransaction(TransactionCompletedEvent event)
{
Queue<Event> events = map.get(event.getGlobalTransaction());
map.remove(event.getGlobalTransaction());
System.out.println("Ended transaction " + event.getGlobalTransaction().getId());
if(event.isTransactionSuccessful())
{
for(Event e : events)
{
System.out.println("Event " + e);
}
}
}
}
CacheStarted,
CacheStopped,
CacheEntryModified,
CacheEntryCreated,
CacheEntryRemoved,
CacheEntryVisited,
CacheEntryLoaded,
CacheEntriesEvicted,
CacheEntryActivated,
CacheEntryPassivated,
ViewChanged,
TransactionCompleted,
TransactionRegistered,
CacheEntryInvalidated,
DataRehashed,
TopologyChanged| Modifier and Type | Optional Element and Description |
|---|---|
boolean |
sync
Specifies whether callbacks on any class annotated with this annotation happens synchronously (in the caller's
thread) or asynchronously (using a separate thread).
|
public abstract boolean sync
Copyright © 2012 JBoss by Red Hat. All Rights Reserved.