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>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ń:

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.

Szybka poprawka tej reguły ustawia jawną wartość trybu współużytkowanej pamięci podręcznej, co powoduje, że reguła przestanie oznaczać element persistence-unit. Szybka poprawka bada ustawienie openjpa.DataCache i modyfikuje istniejącą lub tworzy nową konfigurację shared-cache-mode albo właściwość javax.persistence.sharedCache.mode, dzięki czemu aplikacje będą miały takie samo działanie trybu pamięci podręcznej w interfejsie EclipseLink, jakie miały 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 Szybka poprawka zmienia plik persistence.xml na potrzeby interfejsu 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>

Szybka poprawka usuwa właściwość openjpa.DataCache, jeśli ma ona prostą wartość true lub false. Jeśli konfiguracja właściwości openjpa.DataCache ma dodatkowe parametry, takie jak w poniższym przykładzie, szybka poprawka pozostawia tę właściwość, aby można było określić, czy wymagane są dodatkowe zmiany ręczne. 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 w tym samym elemencie persistence-unit zdefiniowane są obie właściwości shared-cache-mode i javax.persistence.sharedCache.mode, szybka poprawka aktualizuje w razie potrzeby wartość właściwości shared-cache-mode i usuwa właściwość javax.persistence.sharedCache.mode.

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

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: