Wyłącz pamięć podręczną drugiego poziomu jednostki trwałości

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>BRAK</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 gdzie bieżąca konfiguracja buforowania skutkuje w innym domyślnym zachowaniu buforowania w EclipseLink. Pomaga również wyczyścić 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ń:

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.

Automatyczna poprawka dla tej reguły ustawia jawną wartość dla trybu współdzielonej pamięci podręcznej, dzięki czemu aby reguła nie oznaczała jednostki trwałości. Automatyczna poprawka ocenia ustawienie openjpa.DataCache i modyfikuje istniejące lub tworzy nowe konfigurację shared-cache-mode lub właściwości javax.persistence.sharedCache.mode aby aplikacje miały takie samo zachowanie trybu pamięci podręcznej w EclipseLink, jak w 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 flaguje wszystkie elementy <persistence-unit>, ponieważ wymagają zmian w konfiguracji buforowania, aby zachować takie samo zachowanie zachowanie buforowania w EclipseLink jak w OpenJPA.

Źródłowy plik persistence.xml na potrzeby interfejsu OpenJPA Zautomatyzowane zmiany w pliku persistence.xml dla EclipseLink
<persistence> <persistence-unit name=" example1 ">...
    <shared-cache-mode>NIEOKREŚLONY</shared-cache-mode>... </persistence-unit> <persistence-unit name=" example2 ">... <properties> <property name="openjpa.DataCache" value="true"/> </properties>... </persistence-unit> <persistence-unit name=" example3 ">... <properties><-- nie ustawiono właściwości pamięci podręcznej --></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>BRAK</shared-cache-mode>... </persistence-unit> <persistence-unit name="example2"> ...
     <shared-cache-mode>WSZYSTKO</shared-cache-mode> <properties></properties>... </persistence-unit> <persistence-unit name="example3"> ...
     <shared-cache-mode>BRAK</shared-cache-mode> <properties><-- nie ustawiono właściwości pamięci podręcznej --></properties>... </persistence-unit> <persistence-unit name="example4">... <properties> <property name="javax.persistence.sharedCache.mode" 
                  value="ALL"/> </properties>...</persistence-unit> </persistence>

Automatyczna poprawka usuwa właściwość openjpa.DataCache jeśli ma prostą wartość wartość true lub false. Jeśli openjpa.DataCache konfiguracja właściwości ma dodatkowe parametry jak w poniższym przykładzie, automatyczna poprawka pozostawia właściwość, dzięki czemu można określić czy potrzebne 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 tej samej jednostce trwałości, automatyczna poprawka aktualizuje wartość shared-cache-mode i usuwa właściwość javax.persistence.sharedCache. mode.

W przypadku plików JPA 1.0 persistence.xml element <shared-cache-mode> nie jest prawidłowy nie jest prawidłowy. Zautomatyzowana poprawka ocenia wartości właściwości openjpa.DataCache i javax.persistence.sharedCache.mode właściwości trwałości i w razie potrzeby dodaje właściwość trwałości eclipselink.cache.shared.default .

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: