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>NONE</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 unde configuraţia de cache curentă are ca rezultat
un comportament de cache diferit în EclipseLink. Vă ajută, de asemenea, 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:
<shared-cache-mode>javax.persistence.sharedCache.modeopenjpa.DataCache
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.
Corecţia rapidă pentru această regulă setează o valoare explicită pentru modul cache partajat, astfel că
regula nu continuă să semnaleze persistence-unit.
Corecţia rapidă evaluează setarea openjpa.DataCache şi modifică configuraţia existentă sau creează una nouă
shared-cache-mode sau proprietăţile javax.persistence.sharedCache.mode
pentru ca aplicaţia dumneavoastră să aibă acelaşi comportament de mod cache în EclipseLink ca î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 semnalează toate elementele <persistence-unit>, deoarece
acestea necesită modificări ale configuraţiei cache pentru a menţine acelaşi comportament de cache
în EclipseLink ca în OpenJPA.
| Fişier sursă persistence.xml pentru OpenJPA | Modificările corecţiei rapide în fişierul persistence.xml pentru 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>
|
Corecţia rapidă şterge proprietatea openjpa.DataCache dacă are o valoare simplă
true sau false.
Dacă configuraţia proprietăţii openjpa.DataCache are parametri suplimentari
precum în următorul exemplu, corecţia rapidă 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, corecţia rapidă actualizează valoarea shared-cache-mode
dacă este necesar şi şterge proprietatea javax.persistence.sharedCache.mode.
Pentru fişierele JPA 1.0 persistence.xml, elementul <shared-cache-mode>
nu este valid. Corecţia rapidă evaluează valorile proprietăţilor de persistenţă
openjpa.DataCache şi javax.persistence.sharedCache.mode
şi adaugă o proprietate persistenţă eclipselink.cache.shared.default unde este necesar.
Pentru informaţii suplimentare despre migrarea proprietăţilor de configurare JPA specifice furnizorului, vedeţi următoarele resurse: