I am using ehcache-spring-annotations-1.2.0.jar . This is my cache.xml file
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
<ehcache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
</beans>
This is my ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<cache name="messageCache" eternal="false"
maxElementsInMemory="5" overflowToDisk="false" diskPersistent="false"
timeToIdleSeconds="1000" timeToLiveSeconds="3000"
memoryStoreEvictionPolicy="LRU" />
This is my main code
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.googlecode.ehcache.annotations.Cacheable;
public class EcacheSpringtest {
private static ApplicationContext cachecontext = new ClassPathXmlApplicationContext("cache.xml");
@Cacheable(cacheName = "messageCache")
String getName(String name) {
System.out.println(name+ " "+"has not been found in the cache so called getName()");
return "testObject";
}
public static void main(String[] args) {
long starttime;
long endtime;
long calldifferencesecs;
EcacheSpringtest test = new EcacheSpringtest();
test.getName("test");
try {
starttime = System.currentTimeMillis();
Thread.sleep(150);
endtime = System.currentTimeMillis();
calldifferencesecs = starttime - endtime ;
System.out.println("preparing to call getName with test as paramter after" +" "+ (~calldifferencesecs)+1 +"milliseconds");
} catch (InterruptedException e) {
}
test.getName("test"); // In this case testObject should be returned from cache but it is again calling getName().The method getName() is again called when same "test" String object is passed to method after 1491 milliseconds.
}
}
I have taken reference from
http://ehcache.org/documentation/recipes/spring-annotations
https://code.google.com/p/ehcache-spring-annotations/wiki/UsingCacheable
EditFirst Implementing the solution given below by kabochkov I have tested it .But also i am unable to cache.
I could not figure out where i have done mistake.Any help please?