Désactiver le cache de second niveau de l'unité de persistance

OpenJPA désactive par défaut le cache de second niveau tandis qu'EclipseLink l'active par défaut. Si vous migrez une application qui ne l'utilise pas, vous pouvez désactiver ce cache dans EclipseLink en définissant l'élément suivant dans le fichier persistence.xml (version 2.0 ou 2.1) :

   <shared-cache-mode>AUCUN</shared-cache-mode>

Pour un fichier persistence.xml version 1.0, vous pouvez désactiver ce cache dans EclipseLink en ajoutant la propriété suivante :

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

Cette règle détecte les configurations <persistence-unit> dans le fichier META-INF/persistence.xml où la configuration actuelle de la mise en cache entraîne dans un comportement de mise en cache par défaut différent dans EclipseLink. Il vous aide également à nettoyer les propriétés de openjpa.DataCache, qui sont ignorées par EclipseLink.

Pour déterminer une configuration doit être modifiée, la règle examine les combinaisons des paramètres suivants :

Si la propriété openjpa.DataCache n'est pas spécifiée ou si elle est définie sur false et que la configuration du mode de mise en mémoire cache partagé est omise ou définie sur UNSPECIFIED, vous devez modifier la configuration dans EclipseLink pour désactiver la mémoire cache. Comme EclipseLink active la mise en mémoire cache par défaut, la propriété openjpa.DataCache définie sur true dans OpenJPA est équivalente à l'absence de paramètre de mode de mise en mémoire cache dans EclipseLink ou à la définition du paramètre shared-cache-mode sur ALL. Si vous supprimez manuellement la configuration openjpa.DataCache, ne continuez pas à exécuter cette règle, car elle ne détectera aucune configuration comme changement de comportement.

La correction automatisée de cette règle définit une valeur explicite pour le mode de cache partagé de manière à ce que l'unité de persistance ne continue pas à être signalée que la règle ne continue pas à marquer l' unité de persistance. Le correctif automatisé évalue le paramètre openjpa.DataCache et modifie la configuration du mode de cache partagé existante ou crée de nouvelles propriétés javax.persistence.sharedCache.mode afin que vos applications aient le même comportement de mode de cache dans EclipseLink que dans OpenJPA. Dans OpenJPA, lorsqu'une valeur de mémoire cache partagée définie par une spécification et la propriété openjpa.DataCache sont définies, la valeur définie par la spécification est utilisée sauf si elle est définie sur UNSPECIFIED. Si la valeur est UNSPECIFIED, la propriété openjpa.DataCache est utilisée pour déterminer la valeur correcte du mode de mémoire cache partagée.

Par exemple, dans le fichier persistence.xml suivant, la règle signale tous les éléments <persistence-unit> parce que parce qu'ils requièrent des modifications de la configuration de la mise en cache le même comportement de mise en cache dans EclipseLink que dans OpenJPA.

Fichier persistence.xml source pour OpenJPA Changements automatisés dans le fichier persistence.xml pour EclipseLink
<persistence> <persistence-unit name=" example1 ">...
    <shared-cache-mode>NON SUGGÉRÉ</shared-cache-mode>... </persistence-unit> <persistence-unit name=" example2 ">... <properties> <property name="openjpa.DataCache" value="true"/> </properties>... </persistence-unit> <persistence-unit name=" example3 ">... <properties><-- pas de propriétés de cache définies --></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>AUCUN</shared-cache-mode>... </persistence-unit> <persistence-unit name="example2"> ...
     <shared-cache-mode>TOUS</shared-cache-mode> <properties></properties>... </persistence-unit> <persistence-unit name="example3"> ...
     <shared-cache-mode>AUCUN</shared-cache-mode> <properties><-- aucune propriété de cache définie --></properties>... </persistence-unit> <persistence-unit name="example4">... <properties> <property name="javax.persistence.sharedCache.mode" 
                  value="ALL"/> </properties>...</persistence-unit> </persistence>

Le correctif automatisé supprime la propriété openjpa.DataCache si elle a une simple valeur true ou false. Si la configuration du openjpa.DataCache a des paramètres supplémentaires, comme dans l'exemple suivant comme dans l'exemple suivant, le correctif automatisé laisse le bien en l'état afin que vous puissiez déterminer si d'autres modifications manuelles sont nécessaires. Evaluez la propriété openjpa.DataCache pour la migration supplémentaire, puis supprimez la propriété, car elle n'est pas utilisée par EclipseLink.

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

Si shared-cache-mode et javax.persistence.sharedCache.mode sont définis dans la même persistence-unit, le correctif automatisé met à jour la valeur shared-cache-mode si nécessaire et supprime la propriété javax.persistence.sharedCache.mode.

Pour les fichiers JPA 1.0 persistence.xml, l'élément <shared-cache-mode> n'est pas valide. Le correctif automatisé évalue les valeurs des propriétés de persistance openjpa.DataCache et javax.persistence.sharedCache.mode propriétés de persistance et ajoute une propriété de persistance eclipselink.cache.shared.default si nécessaire.

Copiez la configuration personnalisée vers votre fichier de génération d'application pour activer l'automatisation des correctifs.

Pour plus d'informations sur la migration des propriétés de configuration de fournisseur JPA spécifique, reportez-vous aux ressources suivantes :