use_second_level_cache true example cache hibernate caching ehcache second-level-cache

true - EhCache+Hibernate Cache no está vivo



hibernate cache use_second_level_cache (3)

No sé la razón real por la que esto está sucediendo, pero tengo una sugerencia para rastrearlo.

Al net.sf.ehcache.Cache el código fuente de net.sf.ehcache.Cache , se puede ver que la verificación ''viva'' solo comprueba una Cache.cacheStatus en memoria, Cache.cacheStatus . Debería ser sencillo ejecutar su código en el depurador y establecer un punto de interrupción en Cache.dispose() (donde el estado se establece en Status.STATUS_SHUTDOWN ) o incluso en Cache.CacheStatus.changeState() (para detectar cualquier transición de estado) .

Puede encontrar que de hecho hay un error con Hibernate, o puede ser su uso. De cualquier manera, deberías poder encontrar exactamente quién está cambiando el estado de tu caché a "no vivo".

Buena suerte.

Después de configurar EhCache v2.4.5 como caché de segundo nivel para hibernar v3.6.7, obtengo el siguiente error al intentar cargar todos los objetos de una entidad en particular usando la sesión de hibernación. (No hay error al cargar los objetos por primera vez)

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)

Mi configuración de hibernación es:

<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>

Mi configuración de EhCache es:

<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>

No tengo ni idea de lo que va mal. ¿algunas ideas?


No sé si la implementación de hibernate ehcache tiene esta propiedad, pero cuando utilicé una solución externa de ehcache tuve el mismo problema y resolví la configuración de la propiedad compartida en falso en los EhCacheManagerFactoryBean o EhCacheCacheManager


Yo tampoco sé la razón real. Pero supongo que puede suceder debido a varias versiones incompatibles de EhCache en la ruta de clase de la aplicación. Verifique esto inspeccionando el árbol de dependencias con el siguiente comando maven:

mvn dependency:tree ''-Dincludes=*:*cache*''

(Sintaxis de PowerShell)