Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configuring EHCache for Spring3.1.1 and Hibernate

I am attempting to enable object caching in an existing Spring 3.1.1 application with Hibernate 3.5.5. I am using ehcache 2.2.0. In my applicationContext I have added the configuration to switch on caching with EHCache.

<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
    p:cache-manager="ehcache" />
<bean id="ehcache"
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
    p:config-location="ehcache.xml" />

I then created the ehcache.xml file:

<diskStore path="java.io.tmpdir" />

<defaultCache 
    eternal="false" 
    maxElementsInMemory="1000"
    overflowToDisk="false" 
    diskPersistent="false" 
    timeToIdleSeconds="0"
    timeToLiveSeconds="0" 
    memoryStoreEvictionPolicy="LRU"/>

<cache name="studentCache" 
    eternal="false"
    maxElementsInMemory="10000" 
    overflowToDisk="false" 
    diskPersistent="false"
    timeToIdleSeconds="0" 
    timeToLiveSeconds="0"
    memoryStoreEvictionPolicy="LRU" /> 

I added the necessary dependencies in the pom.xml file for ehcache. But now I am getting this error:

Initialization of bean failed; 
nested exception is org.springframework.beans.ConversionNotSupportedException: 
Failed to convert property value of type 'java.lang.String' to required type
'net.sf.ehcache.CacheManager' for property 'cacheManager'; 
nested exception is java.lang.IllegalStateException: 
Cannot convert value of type [java.lang.String] to required type
[net.sf.ehcache.CacheManager] for property 'cacheManager': 
no matching editors or conversion strategy found

Does anyone have any idea what is causing this?

like image 295
Vincent Ramdhanie Avatar asked Mar 09 '12 15:03

Vincent Ramdhanie


People also ask

Does hibernate use Ehcache?

Hibernate Second Level cache providers include EHCache and Infinispan, but EHCache is more popular and we will use it for our example project.

How do I set up Ehcache?

Ehcache can be configured in two ways: The first way is through Java POJO where all configuration parameters are configured through Ehcache API. The second way is configuration through XML file where we can configure Ehcache according to provided schema definition.

How does spring boot integrate with Ehcache?

In order to integrate Ehcache to our spring boot application, we have to include Ehcache to the classpath by adding maven dependency. Of course! We also should add spring-boot-starter-cache to the dependency list.


3 Answers

@aweigold 's answer is perfect but a clearer solution can be achieved if you pass the reference of "ehcache" bean using "p:cacheManager-ref".

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
    p:cacheManager-ref="ehcache" />
like image 150
emrahkocaman Avatar answered Sep 22 '22 06:09

emrahkocaman


The same as in last post only without mistake in attribute name:

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehcache" />
like image 30
Bogdan Nechyporenko Avatar answered Sep 23 '22 06:09

Bogdan Nechyporenko


You need to reference your cacheManager property differently. This is how I have it working:

<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
 <property name="cacheManager"><ref local="ehcache"/></property>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml"/>
like image 26
aweigold Avatar answered Sep 21 '22 06:09

aweigold