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.
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.
- 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)
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<nombre de la propiedad="openjpa.QueryCache" valor="dynacache"/>
<nombre de la propiedad="openjpa.DataCacheManager" valor="dynacache"/>
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)
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache",
CacheSize=1000,
EnableDiskOffload=true,
DiskCacheSizeInGB=4,
DiskOffloadLocation=c:\temp,
EnableCacheReplication=true)"/>
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 |
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.
- 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.
- 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.
- 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.
- 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.
- Establezca el valor de openjpa.RemoteCommitProvider como ninguno.
- org.apache.openjpa.event.SingleJVMRemoteCommitProvider (configurada con el alias "sjvm")
- org.apache.openjpa.event.TCPRemoteCommitProvider
- org.apache.openjpa.event.JMSRemoteCommitProvider
Resolución de problemas con la memoria caché de segundo nivel de JPA
# 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}\".