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

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: