EhCache + Hibernate Cache is not alive

17,474

I don't know the actual reason why this is happening, but I have a suggestion for tracking it down.

Looking at the source code for net.sf.ehcache.Cache, one can see that the 'alive' check just checks an in-memory flag, Cache.cacheStatus. It should be straightforward to run your code under the debugger, and set a breakpoint either in Cache.dispose() (where status is set to Status.STATUS_SHUTDOWN) or even in Cache.CacheStatus.changeState() (to catch any status transition).

You may find that there is in fact a bug with Hibernate, or it may be your usage. Either way, you should be able to find exactly who's changing the state of your cache to 'not alive'.

Good luck.

Share:
17,474

Related videos on Youtube

Saffar
Author by

Saffar

I am a graduate student of computer software engineering with a passion of making web applications

Updated on June 04, 2022

Comments

  • Saffar
    Saffar almost 2 years

    After configuring EhCache v2.4.5 as the second level cache for hibernate v3.6.7 I get the following error while trying to load all objects of a particular entity using hibernate session. (There is no error for loading the objects for the first time)

    java.lang.IllegalStateException: The country Cache is not alive.
    at net.sf.ehcache.Cache.checkStatus(Cache.java:2438)
    at net.sf.ehcache.Cache.get(Cache.java:1541)
    at net.sf.ehcache.hibernate.regions.EhcacheTransactionalDataRegion.get(EhcacheTransactionalDataRegion.java:105)
    at net.sf.ehcache.hibernate.strategy.AbstractReadWriteEhcacheAccessStrategy.putFromLoad(AbstractReadWriteEhcacheAccessStrategy.java:90)
    at net.sf.ehcache.hibernate.nonstop.NonstopAwareEntityRegionAccessStrategy.putFromLoad(NonstopAwareEntityRegionAccessStrategy.java:180)
    at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:195)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:982)
    at org.hibernate.loader.Loader.doQuery(Loader.java:857)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
    at org.hibernate.loader.Loader.doList(Loader.java:2533)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
    at org.hibernate.loader.Loader.list(Loader.java:2271)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
    at dataAccess.CountryDAO.loadAll(CountryDAO.java:80)
    

    My hibernate configuration is:

    <property name="hibernate.cache.region.factory_class">
            net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
    </property>
    <property name="hibernate.cache.provider_configuration">
        /ehcache.xml
    </property>
    <property name="hibernate.cache.use_second_level_cache">
        true
    </property>
    <property name="hibernate.cache.use_query_cache">
        true
    </property>
    

    My EhCache configuration is:

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
    monitoring="autodetect" dynamicConfig="true">
    
    <diskStore path="java.io.tmpdir" />
    
    <transactionManagerLookup
        class="net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup"
        properties="jndiName=java:/TransactionManager" propertySeparator=";" />
    
    <cacheManagerEventListenerFactory
        class="" properties="" />
    
    <defaultCache maxElementsInMemory="0" eternal="false"
        overflowToDisk="true" timeToIdleSeconds="1200" timeToLiveSeconds="1200">
    </defaultCache>
    <cache name="country"
        maxElementsInMemory="300" eternal="false" overflowToDisk="false"
        timeToIdleSeconds="12000" timeToLiveSeconds="12000" diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />
    <cache name="city"
        maxElementsInMemory="300" eternal="false" overflowToDisk="false"
        timeToIdleSeconds="12000" timeToLiveSeconds="12000" diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />
    </ehcache>
    

    I have no clue what is going wrong. any ideas?

    • JordyOnrust
      JordyOnrust almost 12 years
      I got the same problem here. But no solution found in the web yet. Anyone?