'Another CacheManager with same name 'cacheManager' already exists in the same VM

I receive this error when starting tomcat with ehcache and Spring.

Another CacheManager with same name 'cacheManager' already exists in the same VM. Please 
provide unique names for each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same
   CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
  • Spring 3.1
  • ehcache 2.9.0
  • No test context using this.
  • This is a web JSF app.

ehcache.xml

         <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="ehcache.xsd"
            updateCheck="true"
            monitoring="autodetect"
            dynamicConfig="true"
            name="ehcacheManager"
            >
        ....

    </ehcache>

cache-context.xml

        <bean id="cacheManager" 

        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" scope="singleton">
                <property name="shared" value="true"/>
                <property name="configLocation">
                    <value>classpath:ehcache.xml</value>
                </property>
            </bean>

I do have and old dependency to hibernate-ehcache, that unfortunately I can not delete. Could this be the issue?

  <dependency>
                   <groupId>org.hibernate</groupId>
                   <artifactId>hibernate-ehcache</artifactId>
                   <version>3.5.0-Final</version>
               </dependency>

Any suggestions? Thank you!



Solution 1:[1]

Some solutions are discussed here here

and you might need to provide a ehcache.xml or set the cache name otherwise as you can see here

Edit : ApplicationContext loaded twice

If you hit the breakpoint, go up the stacktrace and you may discover why spring is loading the context twice.

Solution 2:[2]

There are two possiblites.

  1. someother application installed on the semesever with same cache name
  2. Application may deployed twice when you start the server due to ContextLoaderListener. So remove ContextLoaderListener from your web.xml.

Solution 3:[3]

Following will solve the problem:

hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

hibernate.cache.provider_class = net.sf.ehcache.hibernate.SingletonEhCacheProvider

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Community
Solution 2 Thom
Solution 3 ParisaN