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 la memoria caché actual da como resultado un comportamiento de memoria caché predeterminado diferente en EclipseLink. También le ayuda a limpiar las propiedades openjpa.DataCache, que EclipseLink ignora.
Para determinar si se requiere un cambio de configuración, la regla examina las combinaciones de los valores siguientes:
<shared-cache-mode>javax.persistence.sharedCache.modeopenjpa.DataCache
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.
El arreglo automatizado para esta regla establece un valor explícito para la modalidad de memoria caché compartida para que la regla no continúe marcando la unidad-persistencia.
El arreglo automatizado evalúa el valor de openjpa.DataCache y modifica el valor existente o crea uno nuevo
shared-cache-mode o las propiedades javax.persistence.sharedCache.mode para que las aplicaciones tengan el mismo comportamiento de modalidad de memoria 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 memoria caché para mantener el mismo comportamiento de memoria caché en EclipseLink que el que tenían en OpenJPA.
| Archivo persistence.xml de origen para OpenJPA | Cambios de arreglos automatizados en el archivo persistence.xml para EclipseLink |
|---|---|
<persistence>
<persistence-unit name="example1">
...
<shared-cache-mode>UNSPECIFIED</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 cache properties set -->
</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>NONE</shared-cache-mode>
...
</persistence-unit>
<persistence-unit name="example2">
...
<shared-cache-mode>ALL</shared-cache-mode>
<properties>
</properties>
...
</persistence-unit>
<persistence-unit name="example3">
...
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<-- no cache properties set -->
</properties>
...
</persistence-unit>
<persistence-unit name="example4">
...
<properties>
<property name="javax.persistence.sharedCache.mode"
value="ALL"/>
</properties>
...
</persistence-unit>
</persistence>
|
El arreglo automatizado suprime la propiedad openjpa.DataCache si tiene un
Valor true o false .
Si la configuración de la propiedad openjpa.DataCache tiene parámetros adicionales como, por ejemplo, en el ejemplo siguiente, el arreglo automatizado 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 persistence-unit, el arreglo automatizado actualiza el valor shared-cache-mode si es necesario y suprime la propiedad javax.persistence.sharedCache.mode .
Para archivos JPA 1.0 < span class= "FilePath">persistence.xml< /span>, el elemento < code> < shared-cache-mode> < /code> no es válido. El arreglo automatizado evalúa los valores de las propiedades de persistencia < code>openjpa.DataCache< /code> y < code>javax.persistence.sharedCache.mode< /code> y añade una propiedad de persistencia < code>eclipselink.cache.shared.default< /code> cuando sea 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: