1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.jcs.jcache;
20
21 import java.util.Arrays;
22 import java.util.Map;
23
24 import javax.cache.Cache;
25 import javax.cache.configuration.CacheEntryListenerConfiguration;
26 import javax.cache.event.CacheEntryEvent;
27 import javax.cache.event.EventType;
28
29 import org.apache.commons.jcs.engine.behavior.ICacheElement;
30 import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
31 import org.apache.commons.jcs.engine.behavior.IElementAttributes;
32 import org.apache.commons.jcs.engine.control.CompositeCache;
33
34
35 public class ExpiryAwareCache<A, B> extends CompositeCache<A, B>
36 {
37 private Map<CacheEntryListenerConfiguration<A, B>, JCSListener<A, B>> listeners;
38 private Cache<A, B> cacheRef;
39
40 ExpiryAwareCache(final ICompositeCacheAttributes cattr, final IElementAttributes attr)
41 {
42 super(cattr, attr);
43 }
44
45 @Override
46 protected void doExpires(final ICacheElement<A, B> element)
47 {
48 super.doExpires(element);
49 for (final JCSListener<A, B> listener : listeners.values())
50 {
51 listener.onExpired(Arrays.<CacheEntryEvent<? extends A, ? extends B>> asList(new JCSCacheEntryEvent<A, B>(
52 cacheRef, EventType.REMOVED, null, element.getKey(), element.getVal())));
53 }
54 }
55
56 void init(final Cache<A, B> cache, final Map<CacheEntryListenerConfiguration<A, B>, JCSListener<A, B>> listeners)
57 {
58 this.cacheRef = cache;
59 this.listeners = listeners;
60 }
61 }