import javax.cache.event.*;
import javax.cache.Cache;
public class JCachePutTraceListener
implements CacheEntryCreatedListener\<Object, Object\>,
CacheEntryUpdatedListener\<Object, Object\> {
@Override
public void onCreated(Iterable<CacheEntryEvent<?, ?>> events) throws CacheEntryListenerException {
for (CacheEntryEvent\<?, ?\> e : events) {
System.out.println("\[JCache\] CREATED key=" + e.getKey());
new RuntimeException("JCache PUT caller trace").printStackTrace();
}
}
@Override
public void onUpdated(Iterable<CacheEntryEvent<?, ?>> events) throws CacheEntryListenerException {
for (CacheEntryEvent\<?, ?\> e : events) {
System.out.println("\[JCache\] UPDATED key=" + e.getKey());
new RuntimeException("JCache PUT caller trace").printStackTrace();
}
}
}
import javax.cache.Cache;
import javax.cache.configuration.MutableCacheEntryListenerConfiguration;
import javax.cache.configuration.FactoryBuilder;
Cache<Object,Object> cache = cacheManager.getCache("yourCache");
MutableCacheEntryListenerConfiguration<Object,Object> cfg =
new MutableCacheEntryListenerConfiguration<>(
FactoryBuilder.factoryOf(JCachePutTraceListener.class),
null, // no filter
false, // old value not required
true // **synchronous** => runs on the caller thread
);
cache.registerCacheEntryListener(cfg);