View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements. See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership. The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License. You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied. See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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  }