Proveedor de memoria caché dinámica para la memoria caché de segundo nivel de JPA 2.0

Sepa como utilizar el servicio de memoria caché dinámica de WebSphere Application Server como un proveedor de memoria caché de segundo nivel (L2) JPA (Java Persistence API). JPA 2.0 ha estandarizado la interfaz de la memoria caché de segundo nivel. WebSphere Application Server da soporte al estándar JPA. El servicio de memoria caché dinámica conecta con la JPA como proveedor de memoria caché de segundo nivel. La memoria caché de segundo nivel mejora el rendimiento de la aplicación JPA y se puede configurar y supervisar el servicio de memoria caché dinámica para su aplicación JPS en el entorno de WebSphere Application Server.

Un proveedor de memoria caché dinámica de segundo nivel (L2) para JPA 2.0 comparte estados de entidades a lo largo de varios contextos persistentes, transacciones y usuarios. Cuando se habilita la memoria caché, las entidades que no se encuentran en el contexto de persistencia se cargan desde la memoria caché de segundo nivel. La memoria caché de segundo nivel evita el acceso a las bases de datos en el caso de entidades que estén cargadas en ese momento. Para obtener más detalles sobre el funcionamiento de la memoria caché de segundo nivel, consulte las especificaciones de JPA 2.0.

Atención: La memoria caché de segundo nivel aumenta el consumo de memoria de la aplicación, y por lo tanto, es importante limitar el tamaño de esta memoria. En entornos de clústeres, también existe la posibilidad de dejar datos de objetos actualizados en punto muerto. Configure la memoria caché de segundo nivel para preferencia de lectura de entidades modificadas con poca frecuencia. No se recomienda el uso de memoria caché de segundo nivel para entidades que se actualicen con frecuencia y al mismo tiempo.

JPA utiliza varias memorias caché de segundo nivel para maximizar el rendimiento. La memoria caché de datos de JPA es una memoria caché de datos de objetos persistentes que funciona a nivel de EntityManagerFactory. Cuando esta memoria se habilita, se comprueba la memoria caché de datos antes de realizar un viaje al almacén de datos. Los datos se guardan en la memoria caché cuando los objetos están comprometidos y cuando los objetos persistentes se cargan desde el almacén de datos. Además de la memoria caché de datos, JPA define las interfaces del proveedor de servicios para la memoria caché de consulta.

La caché de consulta almacena las ID de los objetos que se devuelven como resultado de la ejecución de consultas. Cuando se ejecuta una consulta, JPA crea una clave que se basa en las propiedades de la consulta y en los parámetros que se utilizan en el momento de la inicialización y busca los resultados de una consulta a la memoria caché. Si encuentra alguno, las ID de los objetos que se encuentran en los resultados que se han guardado en la memoria caché se revisan y se devuelven solo los objetos que demuestren capacidad de persistencia. En caso contrario, no no se encuentra ningún objeto, se pasa la consulta a la base de datos y las ID de los objetos que sean recogidas por la consultan se colocan en la memoria caché. La lista de ID de los objetos no pasa a la caché hasta que el resultado devuelto en el momento de lanzar la consulta se haya revisado totalmente.

El proveedor de caché de memoria caché dinámica de WebSphere proporciona una excelente alternativa a los datos concurrentes y los proveedores de caché de consulta predeterminados en WebSphere Application Server, debido a las características de valor añadido que el servicio de memoria caché dinámica incorpora como, por ejemplo, su propio conjunto de características y las capacidades que se heredan de WebSphere Application Server. La memoria caché dinámica ofrece las siguientes ventajas:
  • Sincronización y réplica de memoria caché distribuida de clúster a través del servicio de réplica de datos (DRS) de WebSphere Application Server y de los servicios de alta disponibilidad (HA).
  • Supervisión, regulación y administración compleja y avanzada de DataCache y QueryCache (caché de datos y de consultas). La memoria caché de segundo nivel heredará todo el ecosistema de las herramientas de la memoria caché dinámica disponible.
  • Soporte nativo de z/OS de región de sirviente.
  • Funciona igual, si no mejor que el proveedor de memoria caché predeterminado.

El estándar JPA proporciona alias como mecanismo para configurar fácilmente los plugins de JPA. El proveedor de memoria caché dinámica de segundo nivel de JPA 2.0 normalmente recibe el alias dynacache. Se puede utilizar el alias dynacache para configurar las propiedades de DataCache y de QueryCache de JPA. Si la propiedad de QueryCache se establece para utilizar dynacache, entonces, la propiedad DataCache también utilizará el alias dynacache. Se pueden configurar las propiedades de QueryCache y DataCache para que utilicen diferentes tipos de proveedores de memoria caché. Se puede configurar la propiedad QueryCache con los valores predeterminados y la propiedad DataCache para que utilice la memoria caché dinámica, o viceversa. Lo ideal sería utilizar el servicio de memoria caché dinámica de WebSphere Application Server para DataCache, QueryCache y DataCacheManager. Si se establece DataCache como dynacache, entonces, RemoteCommitProvider no hace nada, ya que DRS y HAM se ven reforzadas para realizar la sincronización de la memoria caché. No se puede habilitar la propiedad QueryCache por separado, de DataCache. La propiedad QueryCache se beneficia de la disponibilidad de la propiedad DataCache, donde se colocan los datos de la entidad.

Configurar el proveedor de memoria caché dinámica de segundo nivel de JPA (método básico)

Habilite el servicio de proveedor de memoria caché dinámica de nivel 2 para JPA 2.0 estableciendo el valor de todas o algunas de las propiedades siguientes de OpenJPA en dynacache: OpenJPA openjpa.QueryCache, openjpa.DataCache, y openjpa.DataCacheManager. Esta configuración predeterminadas es adecuada para la mayoría de los entornos.
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<nombre de la propiedad="openjpa.QueryCache" valor="dynacache"/>
<nombre de la propiedad="openjpa.DataCacheManager" valor="dynacache"/>
Tabla 1. Nombres y alias de la propiedad. . Nombres y alias completos de las propiedades de la memoria caché dinámica.
Nombre de la memoria caché dinámica Nombre de propiedad Alias
Proveedor de memoria caché DataCache com.ibm.ws.cache.openjpa. DynacacheDataCache dynacache
proveedor de memoria caché QueryCache com.ibm.ws.cache.openjpa. DynacacheQueryCache dynacache
RemoteCommitProvider com.ibm.ws.cache.openjpa. NoOpRemoteCommitProvider ninguno
DataCacheManager com.ibm.ws.cache.openjpa. DynacacheDataCacheManager dynacache

Configuración del proveedor de memoria caché dinámica de segundo nivel de JPA (método avanzado)

Configure la instancia de memoria caché dinámica de segundo nivel de JPA 2.0 tanto de datos como de consulta con propiedades adicionales o de configuración avanzada en la unidad persistente (método avanzado) Habilite el servicio de proveedor de memoria caché dinámica de nivel 2 para JPA 2.0 mediante el establecimiento de algunas o todas las propiedades siguientes de dynacache: OpenJPA openjpa.QueryCache, openjpa.DataCache, y openjpa.DataCacheManager .
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache", 
                                                    CacheSize=1000, 
                                                    EnableDiskOffload=true, 
                                                    DiskCacheSizeInGB=4, 
                                                    DiskOffloadLocation=c:\temp, 
                                                    EnableCacheReplication=true)"/> 
Tabla 2. Nombres y valores de las propiedades de la memoria caché dinámica. Propiedades de la instancia de memoria caché dinámica que se pueden configurar en la unidad persistente.
Propiedades personalizadas de la memoria caché dinámica Valores predeterminados
CacheName predeterminado
CacheSize 2000
EnableDiskOffload false
EnableCacheReplication false
DiskCacheSizeInGB no se aplica
DiskOffloadLocation no se aplica
ReplicationType 1 , 2 ó 4. 1 indican NOT_SHARED, 2 es PUSH y 4 es PUSH_PULL
Importante: Las propiedades de la tabla no son obligatorias. Si no se especifica otra cosa, el servicio de memoria caché dinámica toma los valores predeterminados, que son adecuados para la mayoría de los usuarios.
El ejemplo siguiente muestra las operaciones de mbean de la memoria caché dinámica en la introspección de la memoria caché de segundo nivel:
wsadmin>establecer mbean [$AdminControl queryNames tipo=DynaCache,*]

wsadmin> $AdminControl invoke $mbean getCacheIDsInMemory {default \S}
66
71
10
A5614-67

wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=5
TOTAL_READ_COUNT=5
WRITE_COUNT=4
TOTAL_WRITE_COUNT=4

wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default openbook.domain.Customer}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=0
TOTAL_READ_COUNT=0
WRITE_COUNT=1
TOTAL_WRITE_COUNT=1
También se puede utilizar Extended Cache Monitor para visualizar los contenidos de la memoria caché, su ID y valores clave, que están colocados en la memoria caché por la ejecución de JPA.

Utilización del proveedor de memoria caché dinámica de segundo nivel en un entorno de clústeres

Los clientes pueden definir una instancia de memoria caché de la forma habitual en WebSphere Application Server y, a continuación, hacer referencia al nombre en el valor la propiedad CacheName, de la propiedad DataCache JPA. Se puede definir una instancia de memoria caché de objetos utilizando el archivo cacheinstances.properties, DistributedMapFactory o la consola administrativa.

Todas las propiedades son opcionales, y si no se especifican valores diferentes, se toma el de las propiedades predeterminadas. Si la instancia de memoria caché no existe, el servicio de memoria caché dinámica la crea. La configuración avanzada de una instancia de QueryCache Dynacache se realiza de forma parecida.

La memoria caché de datos de JPA funciona tanto en entornos de una sola JVM como de varias JVM. La colocación en memoria caché de varias JVM se consigue mediante el uso del servicio de réplica de datos (DRS) en un entorno de WebSphere Application Server, Network Deployment en clúster.

Para las entidades y consultas de las instancias de memoria caché de DataCache y QueryCache de memoria caché dinámica que se repliquen entre los servidores de un entorno de WebSphere Application Server, Network Deployment utilizando el servicio de réplica de datos (DRS), configure un dominio de réplica y asócielo a la instancia de memoria caché. El valor de la propiedad openjpa.RemoteCommitProvider openJPA en una unidad persistente debe establecerse en ninguno.

Para replicar una instancia de memoria caché dinámica de segundo nivel OpenJPA, haga lo siguiente:
  1. Utilizando la consola administrativa, cree un dominio de réplica y asocie el dominio de réplica a la instancia de memoria caché baseCache en el panel del servicio de memoria caché dinámica de todos los servidores de la aplicación que deban compartir la memoria caché distribuida. El servicio de memoria caché dinámica utiliza este dominio replicado para replicar los datos en todos los servidores del dominio de replicado.
  2. Configure la instancia de memoria caché estableciendo el valor de la propiedad enableCacheReplication como "true" al definir la configuración de la instancia de memoria caché. Si no especificara el valor de la propiedad replicationType, la instancia de la memoria caché tomará el valor predeterminado en el modo compartir NOT_SHARED, en el que solamente se propagan las invalidaciones. Se puede configurar la instancia de la memoria caché en los tipos de compartimiento NOT_SHARED, PUSH y PUSH_PULL. Consulte el tema sobre réplica de la memoria caché para obtener más información.
  3. Establezca la propiedad personalizada com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup de la JVM como true en todos los servidores de aplicaciones del dominio de réplica. Esta propiedad personalizada ayuda a las instancias de memoria caché en las rutinas de carga de los servidores antes y más rápido.
  4. Cree una biblioteca compartida para que las clases de entidades estén disponibles en la variable classpath del servidor de la aplicación. Para ello, defina una biblioteca compartida y asóciela con el cargador de clases del servidor. Este paso es necesario para que el servicio de memoria caché dinámica y DRS puedan deserializar los objetos de entidades replicadas. Para obtener más información sobre las bibliotecas compartidas, consulte los temas sobre Recopilación de bibliotecas compartidas, Gestión de bibliotecas compartidas y Asociación de bibliotecas compartidas.
  5. Establezca el valor de openjpa.RemoteCommitProvider como ninguno.
También podría utilizar otras implementaciones de RemoteCommitProvider que están incluidas en JPA 2.0 con memoria caché dinámica. Concretamente, las implementaciones siguientes:
  • org.apache.openjpa.event.SingleJVMRemoteCommitProvider (configurada con el alias "sjvm")
  • org.apache.openjpa.event.TCPRemoteCommitProvider
  • org.apache.openjpa.event.JMSRemoteCommitProvider
Consulte la documentación de JPA sobre funcionamiento remoto y off line.
Atención: Configure la memoria caché dinámica con DRS para la replicación de datos de JPA y de objetos de QueryCache y utilización de la propiedad NoOp RemoteCommitProvider en un entorno distribuido o agrupado en clústeres.

Resolución de problemas con la memoria caché de segundo nivel de JPA

Cuando utilice el servicio de memoria caché dinámica como proveedor de memoria caché de JPA, busque los mensajes siguientes en el archivo del registro:
# Mensajes significativos de OpenJPA relacionados con la memoria caché dinámica en el archivo SystemOut.log
DYNA1081I: Instancia de OpenJPA L2 DataCache Dynacache \"{0}\" creada o recuperada correctamente para la unidad persistente \"{1}\".

# Solo se aplica si QueryCache está habilitada
DYNA1080I: Instancia de OpenJPA L2 QueryCache Dynacache \"{0}\" creada o recuperada correctamente para la unidad persistente \"{1}\".
Nota: En este tema se hace referencia a uno o más de los archivos de registro del servidor de aplicaciones. Como alternativa recomendada, puede configurar el servidor para utilizar la infraestructura de registro y rastreo HPEL en lugar de utilizar los archivos SystemOut.log , SystemErr.log, trace.log y activity.log en sistemas distribuidos y de IBM® i. Puede también utilizar HPEL junto con sus recursos de registro nativos de z/OS. Si utiliza HPEL, puede acceder a toda la información de registro y rastreo utilizando la herramienta de línea de mandatos LogViewer desde el directorio bin de perfil de servidor. Consulte la información sobre la utilización de HPEL para resolver problemas de aplicaciones para obtener más información sobre la utilización de HPEL.

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_openjpa
File name: rdyn_openjpa.html