hibernate - true - spring boot jpa cache
¿Por qué está en desuso EhCacheProvider? (4)
Estoy configurando mi proyecto de hibernación para usar un proveedor de caché de segundo nivel, para poder aprovechar el caché de consultas.
Agregué una dependencia a ehcache:
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.2.0</version>
</dependency>
Creo que la clase de proveedor que quiero usar es:
net.sf.ehcache.hibernateEhCacheProvider
Cuando miro las bibliotecas a las que se hace referencia en eclipse, veo la anotación EhCacheProvider
en EhCacheProvider
, y también en SingletonEhCacheProvider
. ¿Lo que da? ¿Hay algún proveedor de reemplazo actualizado que pueda usar?
Estoy usando la versión 3.4.0.GA de hibernate, en caso de que importe.
¿Lo que da? ¿Hay algún proveedor de reemplazo actualizado que pueda usar?
Han sido desaprobados a favor de las clases que implementan el nuevo SPI Hibernate 3.3 / 3.5 con su CacheRegionFactory
. Estas implementaciones son respectivamente:
-
net.sf.ehcache.hibernate.EhCacheRegionFactory
-
net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
Los beneficios del nuevo SPI incluyen:
- El SPI eliminó la sincronización en la tubería de caché de Hibernate. Se deja a la implementación de almacenamiento en caché sobre cómo controlar el acceso concurrente. Ehcache, a partir de 1.6, eliminó la sincronización a favor de un enfoque CAS. Los resultados, para cargas de trabajo pesadas son impresionantes.
- El nuevo SPI proporciona un control más preciso sobre el almacenamiento de la región de caché y las estrategias de caché. Ehcache 2.0 aprovecha esto para reducir el uso de la memoria. Proporciona estrategias de solo lectura, de lectura no estricta de escritura y de lectura de escritura, todo en clúster seguro.
- Ehcache 2.0 es fácilmente distribuible con Terracotta Server Array. Esto le brinda una operación segura de clúster (coherencia), HA y escala más allá de los límites de un caché en proceso, que es la forma en que la mayoría de los usuarios de Hibernate usan Ehcache hoy. Existe el ehcache.jar y ehcache-terracotta.jar que proporciona la biblioteca del cliente. (...)
Por lo tanto, se le anima a utilizar las nuevas implementaciones. La configuración se realiza a través de la siguiente propiedad:
<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
</property>
Eso reemplaza la propiedad hibernate.cache.provider_class
.
Referencias
EhCache 2 ahora está en desuso y está descontinuado. Deberías usar EhCache 3 en su lugar. En las versiones de Hibernate posteriores a la 5.3, se recomienda usar JSR-107 (JCache). Para hacer eso se necesitan 2 dependencias:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jcache</artifactId>
<version>your_hibernate_version</version>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.6.3</version>
<scope>runtime</scope>
</dependency>
El primero proporciona la API JSR-107 compatible con Hibernate. El segundo es la implementación de caché real - EhCache 3.
También se debe utilizar RegionFactory
nuevo:
hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
Los documentos de EhCache dicen que desde Hibernate 3.3 en adelante debe usar:
<property name="hibernate.cache.region.factory_class">
net.sf.ehcache.hibernate.EhCacheRegionFactory
</property>
(o net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
)
Si desea utilizar Hibernate 4.0.0.Final. para el valor de uso de la propiedad hibernate.cache.region.factory_class:
-
org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
lugar denet.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
y -
org.hibernate.cache.ehcache.EhCacheRegionFactory
lugar denet.sf.ehcache.hibernate.EhCacheRegionFactory
De lo contrario, terminará con algunas excepciones internas de ClassNotFound