package org.infinispan.jcache.embedded;
import org.infinispan.jcache.AbstractJCache;
import org.infinispan.jcache.AbstractJCacheListenerAdapter;
import org.infinispan.jcache.AbstractJCacheNotifier;
import org.infinispan.notifications.Listener;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryExpired;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryModified;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryRemoved;
import org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryExpiredEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryModifiedEvent;
import org.infinispan.notifications.cachelistener.event.CacheEntryRemovedEvent;
/**
* Adapts Infinispan notification mechanism to JSR 107 requirements.
*
* @author Vladimir Blagojevic
* @author Galder ZamarreƱo
* @since 5.3
*/
@Listener
public class JCacheListenerAdapter<K, V> extends AbstractJCacheListenerAdapter<K, V> {
public JCacheListenerAdapter(AbstractJCache<K, V> jcache, AbstractJCacheNotifier<K, V> notifier) {
super(jcache, notifier);
}
@CacheEntryCreated
public void handleCacheEntryCreatedEvent(CacheEntryCreatedEvent<K, V> e) {
// JCache listeners notified only once, so do it after the event
if (!e.isPre())
notifier.notifyEntryCreated(jcache, e.getKey(), e.getValue());
}
@CacheEntryModified
public void handleCacheEntryModifiedEvent(CacheEntryModifiedEvent<K, V> e) {
// JCache listeners notified only once, so do it after the event
if (!e.isPre() && !e.isCreated())
notifier.notifyEntryUpdated(jcache, e.getKey(), e.getValue());
}
@CacheEntryRemoved
public void handleCacheEntryRemovedEvent(CacheEntryRemovedEvent<K, V> e) {
// JCache listeners notified only once, so do it after the event
if (!e.isPre())
notifier.notifyEntryRemoved(jcache, e.getKey(), e.getOldValue());
}
@CacheEntryExpired
public void handleCacheEntryExpiredEvent(CacheEntryExpiredEvent<K, V> e) {
if (!e.isPre())
notifier.notifyEntryExpired(jcache, e.getKey(), e.getValue());
}
}