[jboss-user] [JBoss Cache: Core Edition] - Failure to configure a cache with a TimeToLive expiration

mortenhattesen do-not-reply at jboss.com
Wed Apr 1 09:42:20 EDT 2009


Using JBoss Cache 3.0.3-GA, I have not been able to configure a simple cache with a "TimeToLive" expiration.

Firstly, whenever the eviction thread wakes up, a warning is logged:
anonymous wrote : WARN  org.jboss.cache.eviction.ExpirationAlgorithm - No expiration key 'expiration' for Node: /

Secondly, no eviction is being performed.

The configuration is reproduced in this unit-test code (the production code has the cache wired up using a Spring IOC context configuration):


  | import static org.junit.Assert.assertEquals;
  | 
  | import org.apache.log4j.Logger;
  | import org.jboss.cache.Cache;
  | import org.jboss.cache.DefaultCacheFactory;
  | import org.jboss.cache.Node;
  | import org.jboss.cache.config.Configuration;
  | import org.jboss.cache.config.EvictionConfig;
  | import org.jboss.cache.config.EvictionRegionConfig;
  | import org.jboss.cache.eviction.ExpirationAlgorithmConfig;
  | import org.junit.Test;
  | 
  | 
  | public class TestJbossCacheConfig {
  |     private static final Logger logger = Logger.getLogger(TestJbossCacheConfig.class);
  |     final Cache<String, String> cache;
  |     private final long TIME_TO_LIVE = 1000;
  |     private Node<String, String> root;
  | 
  |     public TestJbossCacheConfig() {
  |         ExpirationAlgorithmConfig eac = new ExpirationAlgorithmConfig();
  |         eac.setTimeToLive(TIME_TO_LIVE);
  |         
  |         EvictionRegionConfig erc = new EvictionRegionConfig();
  |         erc.setRegionName("/");
  |         erc.setEvictionAlgorithmConfig(eac);
  |         
  |         EvictionConfig ec = new EvictionConfig();
  |         ec.setWakeupInterval(TIME_TO_LIVE / 2); //msec
  |         ec.setDefaultEvictionRegionConfig(erc);
  |         
  |         Configuration config = new Configuration();
  |         config.setEvictionConfig(ec);
  |         
  |         cache = new DefaultCacheFactory<String, String>().createCache(config);
  |         root = cache.getRoot();
  |     }
  |     
  |     
  |     @Test
  |     //@Ignore
  |     public void testEviction() throws InterruptedException {
  |         
  |         root.put("1", "one");
  |         root.put("2", "two");
  |         
  |         assertEquals("one", root.get("1"));
  |         
  |         assertEquals(2, root.dataSize());
  |         
  |         logger.info("Sleeps while eviction kicks in");
  |         Thread.sleep(TIME_TO_LIVE * 2);        
  |         /*
  |          * During sleep:
  |          * "WARN  org.jboss.cache.eviction.ExpirationAlgorithm - No expiration key 'expiration' for Node: /"
  |          */
  |         
  |         /* 
  |          * java.lang.AssertionError: expected:<0> but was:<2>
  |          */
  |         assertEquals(0, root.dataSize());
  |     }
  | }

What am I doing wrong here?

Another point: Although I know that JBoss cache is typically configured using an XML, or an IOC framework, it seems a little excessive to require four levels of nested configuration objects to configure a simple cache:

  | configuration = new Configuration(new EvictionConfig(new EvictionRegionConfig(new ExpirationAlgorithmConfig())))


View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4222631#4222631

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4222631



More information about the jboss-user mailing list