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>KEINE</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 META-INF/persistence.xml-Datei, bei denen die aktuelle Caching-Konfiguration zu einem zu einem anderen Standard-Caching-Verhalten in EclipseLink führt. Außerdem hilft es Ihnen, die openjpa.DataCache Eigenschaften zu bereinigen, die von EclipseLink ignoriert werden.
Um festzustellen, ob eine Konfigurationsänderung erforderlich ist, untersucht die Regel Kombinationen der folgenden Einstellungen:
<shared-cache-mode>-Konfigurationselementjavax.persistence.sharedCache.modeopenjpa.DataCache
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 automatische Korrektur für diese Regel setzt einen expliziten Wert für den gemeinsamen Cachemodus, so dass damit die Regel die Persistenz-Einheit nicht mehr kennzeichnet.
Die automatische Korrektur wertet die openjpa.DataCache einstellung aus und ändert die bestehende oder erstellt neue shared-cache-mode-Konfiguration oder javax.persistence.sharedCache.mode-Eigenschaften so dass Ihre Anwendungen unter EclipseLink das gleiche Cachemodus-Verhalten aufweisen wie unter OpenJPA.
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.
Zum Beispiel in der folgenden persistence.xml Datei, kennzeichnet die Regel alle <persistence-unit>-Elemente, weil sie Änderungen an der Caching-Konfiguration erfordern, um das gleiche caching-Verhalten in EclipseLink aufrechtzuerhalten, wie es in OpenJPA war.
| Quellendatei "persistence.xml" für OpenJPA | Automatisierte Korrekturen an der Datei persistence.xml für EclipseLink |
|---|---|
<persistence> <persistence-unit name=" example1 ">...
<shared-cache-mode>UNSPEZIFIZIERT</shared-cache-mode>... </persistence-unit> <persistence-unit name=" example2 ">... <properties> <property name="openjpa.DataCache" value="true"/> </properties>... </persistence-unit> <persistence-unit name=" example3 ">... <properties><-- keine Cache-Eigenschaften eingestellt --></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>KEINE</shared-cache-mode>... </persistence-unit> <persistence-unit name="example2"> ...
<shared-cache-mode>ALLE</shared-cache-mode> <properties></properties>... </persistence-unit> <persistence-unit name="example3"> ...
<shared-cache-mode>KEINE</shared-cache-mode> <properties><-- keine Cache-Eigenschaften eingestellt --></properties>... </persistence-unit> <persistence-unit name="example4">... <properties> <property name="javax.persistence.sharedCache.mode"
value="ALL"/> </properties>...</persistence-unit> </persistence>
|
Die automatische Korrektur löscht die openjpa.DataCache eigenschaft, wenn sie einen einfachen wert true oder false hat.
Wenn die openjpa.DataCache eigenschaftskonfiguration zusätzliche Parameter hat wie im folgenden Beispiel, belässt die automatische Korrektur die Eigenschaft, damit Sie feststellen können ob weitere 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 Persistenz-Einheit definiert sind, aktualisiert die automatische Korrektur den Wert für shared-cache-mode wert bei Bedarf und löscht die Eigenschaft javax.persistence.sharedCache.mode.
Für JPA 1.0 persistence.xml Dateien ist das <shared-cache-mode> element ist nicht gültig. Die automatische Korrektur wertet die Werte von openjpa.DataCache und javax.persistence.sharedCache.mode Persistenzeigenschaften und fügt bei Bedarf eine eclipselink.cache.shared.default Persistenzeigenschaft hinzu.
Kopieren Sie die angepasste Konfiguration in die Builddatei Ihrer Anwendung, um die Fixautomatisierung zu aktivieren.
Weitere Informationen zur Migration anbieterspezifischer JPA-Konfigurationseigenschaften finden Sie in den folgenden Quellen: