On this article, im trying to create a simple java app that will hold a value that have an expiration time. I usually use this for handling request session or to hold a value that have a time limitation. Btw, i’m using EhCache for handling expiration time.
First is a simple pom.xml,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.edw</groupId>
<artifactId>ExpirableToken</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ExpirableToken</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.7.4</version>
</dependency>
</dependencies>
</project>
And a simple xml file to hold ehcache configurations,
<ehcache updateCheck="false" monitoring="off" dynamicConfig="false">
<diskStore path="java.io.tmpdir" />
<defaultCache maxEntriesLocalHeap="0" eternal="false"
timeToIdleSeconds="1200" timeToLiveSeconds="1200">
</defaultCache>
<!-- a 3 seconds -->
<cache name="token" maxElementsInMemory="1000" eternal="false"
overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="3"
timeToLiveSeconds="3" memoryStoreEvictionPolicy="LFU" statistics="false" transactionalMode="off">
</cache>
<!-- a 10 seconds -->
<cache name="action" maxElementsInMemory="1000" eternal="false"
overflowToDisk="true" diskPersistent="false" timeToIdleSeconds="10"
timeToLiveSeconds="10" memoryStoreEvictionPolicy="LFU" statistics="false" transactionalMode="off">
</cache>
</ehcache>
And this is my java class that i use for testing,
package com.edw.expirabletoken;
import java.util.Date;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
public class App {
private CacheManager cacheManager= CacheManager.create();
private Cache tokenCache = cacheManager.getCache("token"); // a 3 seconds cache
private Cache actionCache = cacheManager.getCache("action"); // a 10 seconds cache
public App() {
}
private void action() throws Exception {
// add into a 3 seconds cache
Element regElement = new Element("name", "edwin 3 seconds");
tokenCache.put(regElement);
// add into a 10 seconds cache
Element regElement2 = new Element("name", "edwin 10 seconds");
actionCache.put(regElement2);
// 2 seconds sleep
Thread.sleep(2000);
getCacheContent();
// 5 seconds sleep
Thread.sleep(5000);
getCacheContent();
// 10 seconds sleep
Thread.sleep(10000);
getCacheContent();
}
private void getCacheContent() {
Element element3 = tokenCache.get("name"); // get value from a 3 seconds cache
if (element3 != null) {
String value = (String) element3.getObjectValue();
System.out.println(new Date()+" -- "+value);
} else {
System.out.println(new Date()+" -- Empty Cache");
}
Element element10 = actionCache.get("name"); // get value from a 10 seconds cache
if (element10 != null) {
String value = (String) element10.getObjectValue();
System.out.println(new Date()+" -- "+value);
} else {
System.out.println(new Date()+" -- Empty Cache");
}
}
public static void main(String[] args) throws Exception {
App app = new App();
app.action();
}
}
This is what the result on my Netbeans’ console,

This is my Netbeans’ project structure,

Well i hope this helped others, have fun using ehcache.
Google+