1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.commons.jcs.jcache;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertFalse;
24
25 import java.io.Serializable;
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.concurrent.TimeUnit;
29
30 import javax.cache.Cache;
31 import javax.cache.CacheManager;
32 import javax.cache.Caching;
33 import javax.cache.configuration.FactoryBuilder;
34 import javax.cache.configuration.MutableCacheEntryListenerConfiguration;
35 import javax.cache.configuration.MutableConfiguration;
36 import javax.cache.event.CacheEntryEvent;
37 import javax.cache.event.CacheEntryExpiredListener;
38 import javax.cache.event.CacheEntryListenerException;
39 import javax.cache.expiry.CreatedExpiryPolicy;
40 import javax.cache.expiry.Duration;
41 import javax.cache.expiry.ExpiryPolicy;
42 import javax.cache.spi.CachingProvider;
43
44 import org.junit.Test;
45
46 public class ExpiryListenerTest {
47
48 @Test
49 public void listener() throws InterruptedException {
50 final CachingProvider cachingProvider = Caching.getCachingProvider();
51 final CacheManager cacheManager = cachingProvider.getCacheManager();
52 final CacheEntryExpiredListenerImpl listener = new CacheEntryExpiredListenerImpl();
53 cacheManager.createCache("default", new MutableConfiguration<String, String>()
54 .setExpiryPolicyFactory(new FactoryBuilder.SingletonFactory<ExpiryPolicy>(
55 new CreatedExpiryPolicy(new Duration(TimeUnit.MILLISECONDS, 1))))
56 .addCacheEntryListenerConfiguration(new MutableCacheEntryListenerConfiguration<String, String>(
57 FactoryBuilder.factoryOf(listener),
58 null, false, false
59 )));
60 final Cache<String, String> cache = cacheManager.getCache("default");
61 assertFalse(cache.containsKey("foo"));
62 cache.put("foo", "bar");
63 Thread.sleep(10);
64 assertFalse(cache.containsKey("foo"));
65 cachingProvider.close();
66 assertEquals(1, listener.events.size());
67 }
68
69 private static class CacheEntryExpiredListenerImpl implements CacheEntryExpiredListener<String, String>, Serializable {
70 private final Collection<CacheEntryEvent<? extends String, ? extends String>> events =
71 new ArrayList<CacheEntryEvent<? extends String, ? extends String>>();
72
73 @Override
74 public void onExpired(final Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents)
75 throws CacheEntryListenerException {
76 for (final CacheEntryEvent<? extends String, ? extends String> cacheEntryEvent : cacheEntryEvents) {
77 events.add(cacheEntryEvent);
78 }
79 }
80 }
81 }