Estrategias de concurrencia de caché por entidad en Hibernate

LIBP-0323 (Libro de pautas)

Definir una estrategia de concurrencia de caché por entidad

Hibernate ofrece una caché de primer nivel de entidades llamadas a través de un contexto de persistencia. Esta caché es contextual en la ejecución. Sin embargo, algunas entidades son compartidas en muchos casos. Estas entidades se pueden almacenar en la caché de segundo nivel. Para ello es necesario definir la estrategia de caché a nivel de entidad en lugar de realizarlo a nivel global. Las estrategias son las siguientes:

Pautas

TítuloCarácter
Estrategia de sólo lecturaObligatoria
Estrategia de lectura-escrituraObligatoria
Estrategia de lectura-escritura no estrictaObligatoria
Estrategia transaccionalObligatoria

Estrategia de sólo lectura

Utilizar estrategias de sólo lectura cuando necesite leer pero nunca modificar la instancia de una clase persistente

Si su aplicación necesita leer pero nunca modificar las instancias de una clase persistente, se puede usar un caché de sólo lectura (read-only). Esta es la estrategia más simple y la de mejor rendimiento. También se puede utilizar en un cluster ya que es muy segura.

Estrategia de lectura-escritura

Utilizar esta estrategia cuando la aplicación necesite actualizar datos

Si la aplicación necesita actualizar datos, puede ser apropiado usar una caché de lectura-escritura (read-write). Esta estrategia de almacenamiento nunca debería ser usada si se requiere aislamiento de transacciones serializables. Si el caché se usa en un entorno JTA, se debe especificar la propiedad hibernate.transaction.manager_lookup_class, especificando una estrategia para obtener la propiedad TransactionManager de JTA. En otros entornos hay que asegurarse de que la transacción se haya completado cuando ocurran Session.close() o Session.disconnect(). Si se quiere usar esta estrategia en un cluster, hay que asegurarse de que la implementación subyacente de caché soporta "locking". Los proveedores de caché que vienen ya incorporados no lo soportan.

Estrategia de lectura-escritura no estricta

Utilizar esta estrategia cuando la aplicación necesite actualizar datos de manera ocasional

Si la aplicación necesita actualizar datos, pero sólo ocasionalmente, es decir, si es improbable que dos transacciones traten de actualizar el mismo ítem simultáneamente, y no se requiere un aislamiento de transacciones estricto, puede ser apropiado un caché de "lectura-escritura no estricta" (nonstrict-read-write). Si el caché se usa en un entorno JTA, se debe especificar hibernate.transaction.manager_lookup_class. En otros entornos hay que asegurarse de que la transacción se haya completado cuando ocurran Session.close() o Session.disconnect().

Estrategia transaccional

Utilizar esta estrategia en aplicaciones con caché totalmente transaccionales

La estrategia transaccional (transactional) proporciona soporte para proveedores de caché enteramente transaccionales, como JBoss TreeCache. Tales caches sólo pueden ser usados en un entorno JTA, y se debe especificar hibernate.transaction.manager_lookup_class.

Contenidos relacionados