Dezactivaţi cache-ul nivel doi al unităţii de persistentă

OpenJPA dezactivează cache-ul implicit nivel doi, întrucât EclipseLink activează cache-ul nivel doi în mod implicit. Dacă migraţi o aplicaţie care nu utilizează cache-ul , puteţi dezactiva cache-ul în EclipseLink setând următorul element într-un fişier versiunea 2.0 sau 2.1 persistence.xml:

   <shared-cache-mode>Fără</shared-cache-mode>

Pentru un fişier versiunea 1.0 persistence.xml, puteţi dezactiva cache-ul în EclipseLink adăugând următoarea proprietate:

   <property name="eclipselink.cache.shared.default" value="false"/>

Această regulă detectează configurațiile <persistence-unit> din fișierul META-INF/persistence.xml în care configurația curentă a memorării în cache are ca rezultat la un comportament diferit al memorării implicite în cache în EclipseLink. De asemenea, vă ajută să curățați proprietățile openjpa.DataCache, care sunt ignorate de EclipseLink.

Pentru a determina dacă este necesară o modificare de configurare, regula examinează combinaţiile următoarelor setări:

Dacă proprietatea openjpa.DataCache nu este specificată sau este setată la false şi modul de configurarea al cache-ului partajat este omis sau setat la UNSPECIFIED, în EclipseLink trebuie să modificaţi configuraţia pentru a dezactiva cache-ul. Deoarece EclipseLink activează memorare în cache implicit, o proprietate openjpa.DataCache setată la true în OpenJPA este echivalent cu a nu avea setarea modului cache partajat în EclipseLink sau setarea shared-cache-mode la ALL. Dacă înlăturaţi manual configuraţia openjpa.DataCache, nu mai rulaţi această regulă, deoarece nu va detecta nicio configuraţie ca o modificare de comportament.

Soluția automată pentru această regulă stabilește o valoare explicită pentru modul cache partajat, astfel încât astfel încât regula să nu continue să marcheze unitatea de persistență. Soluția automată evaluează openjpa.DataCache și modifică setările existente sau creează noi configurație shared-cache-mode sau proprietăți javax.persistence.sharedCache.mode astfel încât aplicațiile dvs. să aibă același comportament al modului cache în EclipseLink ca și în OpenJPA. În OpenJPA, când ambele o valoare de cache partajat definită de specificaţie şi proprietatea openjpa.DataCache sunt setate, valoarea definită de specificaţie este utilizată doar dacă este UNSPECIFIED. Dacă valoarea este UNSPECIFIED, proprietatea openjpa.DataCache este folosită pentru a determina valoarea corectă a modului cache partajat.

De exemplu, în următorul fișier persistence.xml, regula marchează toate elementele <persistence-unit> deoarece acestea necesită modificări ale configurației de caching pentru a menține același comportament de caching în EclipseLink ca și în OpenJPA.

Fişier sursă persistence.xml pentru OpenJPA Modificări automate la fișierul persistence.xml pentru EclipseLink
<persistence> <persistence-unit name=" example1 ">...
    <shared-cache-mode>NESPECIFICAT</shared-cache-mode>... </persistence-unit> <persistence-unit name=" example2 ">... <properties> <property name="openjpa.DataCache" value="true"/> </properties>... </persistence-unit> <persistence-unit name=" example3 ">... <properties><-- nicio proprietate cache setată --></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>NICIUNA</shared-cache-mode>... </persistence-unit> <persistence-unit name="example2"> ...
     <shared-cache-mode>TOATE</shared-cache-mode> <properties></properties>... </persistence-unit> <persistence-unit name="example3"> ...
     <shared-cache-mode>NONE</shared-cache-mode> <properties><-- nicio proprietate cache setată --></properties>... </persistence-unit> <persistence-unit name="example4">... <properties> <property name="javax.persistence.sharedCache.mode" 
                  value="ALL"/> </properties>...</persistence-unit> </persistence>

Soluția automată șterge proprietatea openjpa.DataCache dacă aceasta are o valoare simplă valoare adevărată sau falsă. Dacă openjpa.DataCache configurația proprietății are parametri suplimentari cum ar fi în exemplul următor, remedierea automată lasă proprietatea astfel încât să puteți determina dacă sunt necesare modificări manuale suplimentare. Evaluaţi proprietatea openjpa.DataCache pentru migrare suplimentară şi apoi înlăturaţi proprietatea deoarece nu este folosită de către EclipseLink.

    <property name="openjpa.DataCache" value="true(Types=com.test.Person;com.test.Employee)"/>

Dacă atât shared-cache-mode, cât și javax.persistence.sharedCache.mode sunt definite în aceeași persistence-unit, soluția automată actualizează valoarea shared-cache-mode dacă este necesar și elimină proprietatea javax.persistence.sharedCache.mode.

Pentru fișierele JPA 1.0 persistence.xml, elementul <shared-cache-mode> nu este valid. Soluția automată evaluează valorile proprietăților openjpa.DataCache și javax.persistence.sharedCache.mode proprietăților de persistență și adaugă o proprietate de persistență eclipselink.cache.shared.default atunci când este necesar.

Copiați configurația personalizată pe fișierul de build al aplicației pentru a activa automatizarea corectării.

Pentru informaţii suplimentare despre migrarea proprietăţilor de configurare JPA specifice furnizorului, vedeţi următoarele resurse: