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>NONE</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, dans lequel la configuration de la mise en mémoire cache actuelle entraîne un autre comportement de mise en mémoire cache par défaut dans EclipseLink. Elle vous aide également à nettoyer les propriétés 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.

Le correctif rapide pour cette règle définit une valeur explicite pour le mode de mise en mémoire cache partagé afin que la règle ne continue pas à marquer persistence-unit. Le correctif rapide évalue le paramètre openjpa.DataCache et modifie la configuration shared-cache-mode ou les propriétés javax.persistence.sharedCache.mode ou en crée d'autres afin que vos applications possèdent le même comportement de mode de mise en mémoire cache partagé 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 ci-dessous, la règle marque tous les éléments <persistence-unit>, car ils nécessitent des modifications de la configuration de la mise en mémoire cache pour préserver le même comportement de mise en mémoire cache dans EclipseLink que dans OpenJPA.

Fichier persistence.xml source pour OpenJPA Le correctif rapide modifier le fichier persistence.xml pour 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>

Le correctif rapide supprime la propriété openjpa.DataCache si elle possède une valeur true ou false simple. Si la configuration de la propriété openjpa.DataCache comporte d'autres paramètres, comme dans l'exemple ci-dessous, le correctif rapide laisse la propriété de sorte que vous puissiez déterminer si des modifications manuelles supplémentaires 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 les valeurs shared-cache-mode et javax.persistence.sharedCache.mode sont définies dans la même valeur persistence-unit, le correctif rapide met à jour la valeur shared-cache-mode si besoin, et supprime la propriété javax.persistence.sharedCache.mode.

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

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