Inhabilitar la memoria caché de segundo nivel de unidad de persistencia

OpenJPA inhabilita la memoria caché de segundo nivel de forma predeterminada, mientras que EclipseLink la habilita de forma predeterminada. Si está migrando una aplicación que no utiliza la memoria caché, puede inhabilitar la memoria caché en EclipseLink estableciendo el elemento siguiente en un archivo persistence.xml de la versión 2.0 o 2.1:

   <shared-cache-mode>none</shared-cache-mode>

Para un archivo persistence.xml de la versión 1.0 puede inhabilitar la memoria caché en EclipseLink añadiendo la propiedad siguiente:

   <property name="eclipselink.cache.shared.default" value="false"/>

Esta regla detecta configuraciones <persistence-unit> en el archivo META-INF/persistence.xml donde la configuración de caché actual resulta en un comportamiento de almacenamiento en caché predeterminado diferente en EclipseLink. También le ayuda a limpiar las propiedades de openjpa.DataCache, que EclipseLink ignora.

Para determinar si se requiere un cambio de configuración, la regla examina las combinaciones de los valores siguientes:

Si la propiedad openjpa.DataCache no se especifica o se establece en false y se omite la configuración de modalidad de memoria caché compartida o se establece en UNSPECIFIED, en EclipseLink debe cambiar la configuración para inhabilitar la memoria caché. Puesto que EclipseLink habilita la memoria caché de forma predeterminada, una propiedad openjpa.DataCache establecida en true en OpenJPA es equivalente a tener el valor de modalidad de memoria caché no compartida en EclipseLink o a establecer shared-cache-mode en ALL. Si elimina manualmente la configuración openjpa.DataCache, no continúe ejecutando esta regla ya que no detectará ninguna configuración como cambio de comportamiento.

La corrección automatizada para esta regla establece un valor explícito para el modo de caché compartida de modo que para que la regla no siga marcando la unidad de persistencia. La corrección automatizada evalúa el openjpa.DataCache configuración y modifica las propiedades configuración shared-cache-mode o las propiedades javax.persistence.sharedCache.mode para que sus aplicaciones tengan el mismo comportamiento de modo de caché en EclipseLink que en OpenJPA. En OpenJPA, cuando esté establecido tanto un valor de memoria caché compartida definida por especificación como la propiedad openjpa.DataCache, se utilizará el valor definido por la especificación, a menos que sea UNSPECIFIED. Si el valor es UNSPECIFIED, se utiliza la propiedad openjpa.DataCache para determinar el valor correcto de la modalidad de memoria caché compartida.

Por ejemplo, en el siguiente archivo persistence.xml, la regla marca todos los elementos <persistence-unit> porque requieren cambios en la configuración de la caché para mantener el mismo comportamiento de almacenamiento en caché en EclipseLink que en OpenJPA.

Archivo persistence.xml de origen para OpenJPA Cambios automáticos de corrección en el archivo persistence.xml para EclipseLink
<persistence> <persistence-unit name=" example1 ">...
    <shared-cache-mode>SIN ESPECIFICAR</shared-cache-mode>... </persistence-unit> <persistence-unit name=" example2 ">... <properties> <property name="openjpa.DataCache" value="true"/> </properties>... </persistence-unit> <persistence-unit name=" example3 ">... <properties><-- no hay propiedades de caché establecidas --></properties>... </persistence-unit> <persistence-unit name=" example4 ">... <properties> <property name="openjpa.DataCache" 
                  value="false"/> <property name="javax.persistence.sharedCache.mode" 
                  value="ALL"/> </properties>... </persistence-unit> </persistence>
<persistence>

  <persistence-unit name="example1">
    ...
    <shared-cache-mode>NINGUNO</shared-cache-mode>... </persistence-unit> <persistence-unit name="example2"> ...
     <shared-cache-mode>TODOS</shared-cache-mode> <properties></properties>... </persistence-unit> <persistence-unit name="example3"> ...
     <shared-cache-mode>NONE</shared-cache-mode> <properties><-- sin propiedades de caché --></properties>... </persistence-unit> <persistence-unit name="example4">... <properties> <property name="javax.persistence.sharedCache.mode" 
                  value="ALL"/> </properties>...</persistence-unit> </persistence>

La corrección automática elimina la propiedad openjpa.DataCache si tiene un valor simple verdadero o falso. Si la openjpa.DataCache configuración de la propiedad tiene parámetros adicionales como en el ejemplo siguiente, la corrección automatizada deja la propiedad para que pueda determinar si se necesitan cambios manuales adicionales. Evalúe la propiedad openjpa.DataCache para migración adicional y a continuación elimine la propiedad, ya que EclipseLink no la utiliza.

    <property name="openjpa.DataCache" value="true(Types=com.test.Person;com.test.Employee)"/>

Si tanto shared-cache-mode como javax.persistence.sharedCache.mode están definidos en la misma unidad de persistencia, la corrección automática actualiza el valor de shared-cache-mode y elimina la propiedad javax.persistence.sharedCache.mode.

Para los archivos JPA 1.0 persistence.xml, el elemento <shared-cache-mode> no es válido. La corrección automática evalúa los valores de openjpa.DataCache y javax.persistence.sharedCache.mode propiedades de persistencia y añade una propiedad de persistencia eclipselink.cache.shared.default cuando es necesario.

Copie la configuración personalizada en el archivo de compilación de la aplicación para habilitar la automatización de arreglos.

Para obtener más información sobre la migración de las propiedades de configuración JPA específicas del proveedor, consulte los recursos siguientes: