use of io.micronaut.coherence.annotation.CoherenceEventListener in project micronaut-coherence by micronaut-projects.
the class CoherenceEventListenerProcessor method registerMapListeners.
/**
* Listen for {@link com.tangosol.net.events.partition.cache.CacheLifecycleEvent.Type#CREATED Created}
* {@link com.tangosol.net.events.partition.cache.CacheLifecycleEvent CacheLifecycleEvents}
* and register relevant map listeners when caches are created.
*
* @param event the {@link com.tangosol.net.events.partition.cache.CacheLifecycleEvent}
*/
@CoherenceEventListener
@SuppressWarnings({ "rawtypes", "unchecked" })
void registerMapListeners(@Created CacheLifecycleEvent event) {
String cacheName = event.getCacheName();
String eventScope = event.getScopeName();
String eventSession = event.getSessionName();
String eventService = event.getServiceName();
Set<AnnotatedMapListener<?, ?>> setListeners = getMapListeners(removeScope(eventService), cacheName);
Session session = Coherence.findSession(eventSession).orElseThrow(() -> new IllegalStateException("Cannot find a Session with name " + eventSession));
NamedCache cache = session.getCache(cacheName);
for (AnnotatedMapListener<?, ?> listener : setListeners) {
if (listener.hasFilterAnnotation()) {
// ensure that the listener's filter has been resolved as this
// was not possible as discovery time.
listener.resolveFilter(filterProducer);
}
if (listener.hasTransformerAnnotation()) {
// ensure that the listener's transformer has been resolved as this
// was not possible as discovery time.
listener.resolveTransformer(transformerProducer);
}
String sScope = listener.getScopeName();
boolean fScopeOK = sScope == null || sScope.equals(eventScope);
String sSession = listener.getSessionName();
boolean fSessionOK = sSession == null || sSession.equals(eventSession);
if (fScopeOK && fSessionOK) {
Filter filter = listener.getFilter();
if (filter != null && !(filter instanceof MapEventFilter)) {
filter = new MapEventFilter(MapEventFilter.E_ALL, filter);
}
MapEventTransformer transformer = listener.getTransformer();
if (transformer != null) {
filter = new MapEventTransformerFilter(filter, transformer);
}
try {
boolean fLite = listener.isLite();
if (listener.isSynchronous()) {
cache.addMapListener(listener.synchronous(), filter, fLite);
} else {
cache.addMapListener(listener, filter, fLite);
}
} catch (Exception e) {
throw Exceptions.ensureRuntimeException(e);
}
}
}
}
Aggregations