EhCache + Hibernate Cache is not alive
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.
Related videos on Youtube
Saffar
I am a graduate student of computer software engineering with a passion of making web applications
Updated on June 04, 2022Comments
-
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 almost 12 yearsI got the same problem here. But no solution found in the web yet. Anyone?
-