Interfejs OpenJPA powoduje domyślnie wyłączenie pamięci podręcznej drugiego poziomu, a interfejs EclipseLink powoduje domyślnie włączenie pamięci podręcznej drugiego poziomu. W przypadku migrowania aplikacji, która nie korzysta z pamięci podręcznej, można wyłączyć pamięć podręczną w interfejsie EclipseLink, ustawiając następujący element w pliku persistence.xml w wersji 2.0 lub 2.1:
<shared-cache-mode>NONE</shared-cache-mode>
W przypadku pliku persistence.xml w wersji 1.0 można wyłączyć pamięć podręczną w interfejsie EclipseLink, dodając następującą właściwość:
<property name="eclipselink.cache.shared.default" value="false"/>
Ta reguła wykrywa konfiguracje <persistence-unit> w pliku META-INF/persistence.xml, w których wynikiem bieżącej konfiguracji pamięci podręcznej jest domyślne działanie buforowania inne niż w EclipseLink. Ułatwia także czyszczenie właściwości openjpa.DataCache, które są ignorowane przez EclipseLink.
Aby określić, czy wymagana jest zmiana konfiguracji, reguła sprawdza kombinacje następujących ustawień:
<shared-cache-mode>javax.persistence.sharedCache.modeopenjpa.DataCache
Jeśli właściwość openjpa.DataCache nie została określona lub jest ustawiona na wartość false, a konfiguracja trybu współużytkowanej pamięci podręcznej została pominięta lub jest ustawiona na wartość UNSPECIFIED, w interfejsie EclipseLink należy zmienić konfigurację, wyłączając pamięć podręczną.
Ponieważ interfejs EclipseLink domyślnie włącza buforowanie, właściwość openjpa.DataCache ustawiona na wartość true w interfejsie OpenJPA jest równoważna ustawieniu braku trybu współużytkowanej pamięci podręcznej w interfejsie EclipseLink lub ustawieniu elementu shared-cache-mode na wartość ALL.
W przypadku ręcznego usunięcia konfiguracji openjpa.DataCache nie należy kontynuować uruchamiania tej reguły, ponieważ wykryje ona brak konfiguracji jako zmianę działania.
Zautomatyzowana poprawka dla tej reguły ustawia jawną wartość dla trybu współużytkowanej pamięci podręcznej, aby reguła nie oznaczająca persistence-unit(jednostka trwałości).
Zautomatyzowana poprawka ocenia ustawienie openjpa.DataCache i modyfikuje istniejące lub tworzy nowe
Konfiguracja shared-cache-mode lub właściwości javax.persistence.sharedCache.mode , tak aby aplikacje miały takie samo zachowanie trybu pamięci podręcznej w interfejsie EclipseLink , jak w interfejsie OpenJPA.
Gdy w interfejsie OpenJPA ustawione są zarówno zdefiniowana przez specyfikację wartość współużytkowania pamięci podręcznej, jak i wartość właściwości openjpa.DataCache, używana jest wartość zdefiniowana przez specyfikację, o ile nie jest ona równa UNSPECIFIED.
Jeśli wartością jest UNSPECIFIED, do określania poprawnej wartości trybu współużytkowanej pamięci podręcznej jest używana właściwość openjpa.DataCache.
Na przykład w następującym pliku persistence.xml reguła oznacza wszystkie elementy <persistence-unit>, ponieważ wymagają one zmian w konfiguracji buforowania w celu zachowania takiego samego działania buforowania w interfejsie EclipseLink, jakie było w interfejsie OpenJPA.
| Źródłowy plik persistence.xml na potrzeby interfejsu OpenJPA | Zautomatyzowane zmiany poprawek w pliku persistence.xml dla platformy 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>
|
Zautomatyzowana poprawka usuwa właściwość openjpa.DataCache , jeśli ma ona prostą
true lub false .
Jeśli konfiguracja właściwości openjpa.DataCache zawiera dodatkowe parametry, takie jak w poniższym przykładzie, zautomatyzowana poprawka pozostawia tę właściwość, dzięki czemu można określić, czy wymagane są dodatkowe ręczne zmiany.
Należy sprawdzić właściwość openjpa.DataCache pod kątem konieczności dodatkowej migracji, a następnie ją usunąć, ponieważ nie jest używana w interfejsie EclipseLink.
<property name="openjpa.DataCache" value="true(Types=com.test.Person;com.test.Employee)"/>
Jeśli zarówno shared-cache-mode , jak i javax.persistence.sharedCache.mode są zdefiniowane w tym samym persistence-unit, automatyczna poprawka w razie potrzeby aktualizuje wartość shared-cache-mode i usuwa właściwość javax.persistence.sharedCache.mode .
Dla plików JPA 1.0 < span class= "FilePath">persistence.xml< /span> element < code> < shared-cache-mode> < /code> jest niepoprawny. Automatyczna poprawka sprawdza wartości właściwości trwałości < code>openjpa.DataCache< /code> i < code>javax.persistence.sharedCache.mode< /code> i dodaje w razie potrzeby właściwość trwałości < code>eclipselink.cache.shared.default< /code>.
Skopiuj konfigurację niestandardową do pliku budowania aplikacji, aby włączyć automatyzację poprawek.
Więcej informacji na temat migrowania właściwości konfiguracyjnych interfejsu JPA specyficznych dla dostawców można znaleźć w następujących zasobach: