Estrategias de concurrencia de caché por entidad en Hibernate
- Área: Arquitectura Tecnológica
- Tipo de pauta: Directriz
- Carácter de la pauta: Obligatoria
- Tecnologías: Hibernate
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ítulo | Carácter |
---|---|
Estrategia de sólo lectura | Obligatoria |
Estrategia de lectura-escritura | Obligatoria |
Estrategia de lectura-escritura no estricta | Obligatoria |
Estrategia transaccional | Obligatoria |
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
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0661 | Definición de la estrategia de concurrencia de caché por entidad en Hibernate | Ejemplo | Obligatorio |