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 automatisé de cette règle définit une valeur explicite pour le mode de cache partagé afin que la règle ne continue pas à marquer l' unité de persistance. Le correctif automatisé évalue le paramètre openjpa.DataCache et modifie les paramètres existants ou crée de nouveaux Configuration shared-cache-mode ou 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 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 Correction automatisée des modifications apportées au 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 automatisé supprime la propriété openjpa.DataCache s'il est simple true ou false . Si la configuration de la propriété openjpa.DataCache comporte des paramètres supplémentaires, comme dans l'exemple suivant, le correctif automatisé laisse la propriété afin 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 shared-cache-mode et javax.persistence.sharedCache.mode sont définis dans la même unité de persistance, 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 < span class= "FilePath">persistence.xml< /span>, l'élément < code> < shared-cache-mode> < /code> n'est pas valide. Le correctif automatisé évalue les valeurs des propriétés de persistance < code>openjpa.DataCache< /code> et < code>javax.persistence.sharedCache.mode< /code> et ajoute une propriété de persistance < code>eclipselink.cache.shared.default< /code> 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 :