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:
<shared-cache-mode>javax.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 legt einen expliziten Wert für den gemeinsam genutzten Cachemodus fest, sodass die Regel die Persistenzeinheit ( persistence-unit) nicht weiterhin markiert.
Der automatisierte Fix wertet die Einstellung openjpa.DataCache aus und ändert vorhandene Einstellungen oder erstellt neue
Konfiguration shared-cache-mode oder Eigenschaften javax.persistence.sharedCache.mode , damit Ihre Anwendungen in EclipseLink dasselbe Cachemodus wie in OpenJPAverwenden.
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 | Automatisierte Fixä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>
|
Der automatisierte Fix löscht die Eigenschaft openjpa.DataCache , wenn sie eine einfache
Wert true oder false .
Wenn die Konfiguration der Eigenschaft openjpa.DataCache zusätzliche Parameter wie im folgenden Beispiel enthält, verlässt die automatische Korrektur die Eigenschaft, sodass Sie ermitteln 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 shared-cache-mode und javax.persistence.sharedCache.mode in derselben Persistenzeinheitdefiniert sind, aktualisiert die automatisierte Korrektur bei Bedarf den Wert shared-cache-mode und löscht die Eigenschaft javax.persistence.sharedCache.mode .
Für JPA 1.0 < span class= "FilePath">persistence.xml< /span> -Dateien ist das Element < code> < shared-cache-mode> < /code> nicht gültig. Der automatisierte Fix wertet die Werte der Persistenzeigenschaften < code>openjpa.DataCache< /code> und < code>javax.persistence.sharedCache.mode< /code> aus und fügt bei Bedarf die Persistenzeigenschaft < code>eclipselink.cache.shared.default< /code> 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: