Second-Level-Cache der Persistenzeinheit inaktivieren

OpenJPA inaktiviert standardmäßig den Second-Level-Cache, wohingegen EclipseLink den Second-Level-Cache standardmäßig aktiviert. Wenn Sie eine Anwendung migrieren, die den Cache nicht verwendet, können Sie den Cache in EclipseLink inaktivieren, indem Sie das folgende Element in einer Datei persistence.xml der Version 2.0 oder 2.1 definieren:

   <shared-cache-mode>NONE</shared-cache-mode>

In einer Datei persistence.xml der Version 1.0 können Sie den Cache in EclipseLink durch Hinzufügen der folgenden Eigenschaft inaktivieren:

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

Diese Regel erkennt <persistence-unit>-Konfigurationen in der Datei META-INF/persistence.xml, bei denen die aktuelle Caching-Konfiguration in EclipseLink zu einem anderen Standardcaching-Verhalten führt. Außerdem hilft sie beim Bereinigen der openjpa.DataCache-Eigenschaften, die von EclipseLink ignoriert werden.

Um festzustellen, ob eine Konfigurationsänderung erforderlich ist, untersucht die Regel Kombinationen der folgenden Einstellungen:

Wenn die Eigenschaft openjpa.DataCache nicht angegeben oder auf false gesetzt ist und die Konfiguration des Modus für den gemeinsam genutzten Cache fehlt oder auf UNSPECIFIED gesetzt ist, müssen Sie in EclipseLink die Konfiguration ändern, um den Cache zu inaktivieren. Da EclipseLink das Caching standardmäßig inaktiviert, entspricht eine openjpa.DataCache-Eigenschaft mit dem Wert true in OpenJPA einer nicht definierten Einstellung für den Modus für den gemeinsam genutzten Cache in EclipseLink bzw. der Konfiguration von shared-cache-mode mit ALL. Wenn Sie die openjpa.DataCache-Konfiguration manuell entfernen, führen Sie diese Regel nicht weiter aus, da sie keine Konfiguration als Verhaltensänderung erkennt.

Die Schnellkorrektur für diese Regel legt einen expliziten Wert für den Modus für den gemeinsam genutzten Cache fest, sodass die Regel das Element persistence-unit nicht mehr markiert. Die Schnellkorrektur wertet die openjpa.DataCache-Einstellung aus und ändert vorhandene shared-cache-mode-Konfigurationen oder javax.persistence.sharedCache.mode-Eigenschaften bzw. erstellt neue, sodass Ihre Anwendungen in EclipseLink dasselbe Cachemodusverhalten wie in OpenJPA haben. Wenn in OpenJPA sowohl ein spezifikationsdefinierter Wert für den gemeinsam genutzten Cache als auch die openjpa.DataCache-Eigenschaft angegeben ist, wird der spezifikationsdefinierte Wert verwendet, sofern dieser nicht UNSPECIFIED lautet. Wenn der Wert UNSPECIFIED lautet, wird die openjpa.DataCache-Eigenschaft verwendet, um den richtigen Wert für den Modus für den gemeinsam genutzten Cache zu bestimmen.

In der folgenden Beispieldatei persistence.xml markiert die Regel alle <persistence-unit>-Elemente, da sie Änderungen der Cachekonfiguration erfordern, um in EclipseLink dasselbe Cacheverhalten wie in OpenJPA zu erreichen

Quellendatei "persistence.xml" für OpenJPA Von der Schnellkorrektur vorgenommene Änderungen an der Datei "persistence.xml" für 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>

Die Schnellkorrektur löscht die Eigenschaft openjpa.DataCache, wenn sie den einfachen Wert true oder false hat. Wenn die Konfiguration der Eigenschaft openjpa.DataCache wie im folgenden Beispiel zusätzliche Parameter enthält, setzt die Schnellkorrektur aus, damit Sie entscheiden können, ob zusätzliche manuelle Änderungen erforderlich sind. Werten Sie die Eigenschaft openjpa.DataCache für die zusätzliche Migration aus und entfernen Sie die Eigenschaft, da sie in EclipseLink nicht verwendet wird.

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

Wenn sowohl shared-cache-mode als auch javax.persistence.sharedCache.mode in derselben persistence-unit definiert sind, aktualisiert die Schnellkorrektur falls erforderlich den Wert shared-cache-mode und löscht die Eigenschaft javax.persistence.sharedCache.mode.

Das Element <shared-cache-mode> ist für JPA 1.0-Dateien persistence.xml nicht gültig. Die Schnellkorrektur wertet die Werte der Persistenzeigenschaften openjpa.DataCache und javax.persistence.sharedCache.mode aus und fügt falls erforderlich eine Persistenzeigenschaft eclipselink.cache.shared.default hinzu.

Weitere Informationen zur Migration anbieterspezifischer JPA-Konfigurationseigenschaften finden Sie in den folgenden Quellen: