Tiltsa le a perzisztencia egység második szintű gyorsítótárat

Az OpenJPA alapértelmezés szerint letiltja a második szintű gyorsítótárat, míg az EclipseLink alapértelmezés szerint engedélyezi azt. Ha egy gyorsítótárat nem használó alkalmazást állít át, akkor az EclipseLink megvalósításban a következő elem beállításával tilthatja le a gyorsítótárat a 2.0 vagy 2.1 változatú persistence.xml fájlban:

   <shared-cache-mode>NONE</shared-cache-mode>

Az 1.0 változatú persistence.xml fájl esetén a gyorsítótárat az EclipseLink megvalósításban a következő tulajdonság hozzáadásával tilthatja le:

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

Ez a szabály észleli a <persistence-unit> konfigurációt a META-INF/persistence.xml fájlban, ahol a jelenlegi gyorsítótár konfiguráció egy eltérő alapértelmezett gyorsítótárazási viselkedést eredményez az EclipseLink megvalósításban. Segítséget nyújt az openjpa.DataCache tulajdonságok takarításához is, amelyeket az EclipseLink figyelmen kívül hagy.

Annak megállapításához, hogy szükséges-e a konfiguráció módosítása, a szabály a következő beállítások kombinációit vizsgálja meg:

Ha az openjpa.DataCache tulajdonság nincs megadva vagy false értékre van beállítva, és a megosztott gyorsítótárazási mód ki van hagyva vagy UNSPECIFIED értékre van beállítva, akkor az EclipseLink megvalósításban módosítani kell a konfigurációt, hogy letiltsa a gyorsítótárazást. Mivel az EclipseLink alapértelmezés szerint engedélyezi a gyorsítótárazást, az OpenJPA megvalósításban egy true értékre beállított openjpa.DataCache tulajdonság egyenértékű azzal, hogy az EclipseLink megvalósításban nincs megosztott gyorsítótárazási mód beállítás, vagy a shared-cache-mode tulajdonság ALLértékre van beállítva. Ha kézzel eltávolítja az openjpa.DataCache konfigurációt, akkor ne futtassa tovább ezt a szabályt, mert egyetlen konfigurációt sem fog viselkedésváltozásként észlelni.

A szabályhoz tartozó gyorsjavítás beállít egy kifejezett értéket a megosztott gyorsítótárazási módhoz, hogy a szabály a továbbiakban ne jelölje meg a persistence-unit elemet. A gyorsjavítás kiértékeli az openjpa.DataCache beállítást, és módosítja a meglévő shared-cache-mode konfigurációt vagy javax.persistence.sharedCache.mode tulajdonságot, vagy létrehoz egy újat, hogy az alkalmazásoknak ugyanaz legyen a gyorsítótár mód viselkedésük az EclipseLink megvalósításban, mint korábban az OpenJPA megvalósításban volt. Az OpenJPA megvalósításban, amikor egy specifikáció által meghatározott megosztott gyorsítótár érték és az openjpa.DataCache tulajdonság egyaránt be van állítva, akkor a specifikáció által megadott érték kerül felhasználásra, kivéve, ha az UNSPECIFIED. Ha az érték UNSPECIFIED, akkor az openjpa.DataCache tulajdonság kerül felhasználásra a megosztott gyorsítótárazási mód helyes értékének megállapításához.

Például a következő persistence.xml fájlban a szabály megjelöli az összes <persistence-unit> elemet, mert ezek gyorsítótárazási konfigurációját módosítani kell, hogy megmaradjon ugyanaz a gyorsítótárazási viselkedés az EclipseLink megvalósításban, mint ami korábban volt az OpenJPA megvalósításban.

Forrás persistence.xml fájl OpenJPA esetén A gyorsjavítás módosítja a persistence.xml fájlt az EclipseLink megvalósításhoz
<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>

A gyorsjavítás törli az openjpa.DataCache tulajdonságot, ha az egy egyszerű true vagy false értéket tartalmaz. Ha az openjpa.DataCache tulajdonság konfigurációja tartalmaz további paramétereket, mint például a következő példában, akkor a gyorsjavítás meghagyja a tulajdonságot, hogy eldönthesse, szükségesek-e további kézi módosítások. Értékelje ki az openjpa.DataCache tulajdonságot, hogy szükséges-e további átállítás, majd távolítsa el a tulajdonságot, mert az EclipseLink nem használja.

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

Ha a shared-cache-mode és a javax.persistence.sharedCache.mode egyaránt meg van adva ugyanabban a persistence-unit elemben, akkor a gyorsjavítás szükség esetén frissíti a shared-cache-mode értékét, és törli a javax.persistence.sharedCache.mode tulajdonságot.

JPA 1.0 persistence.xml fájlok esetén a <shared-cache-mode> elem nem érvényes. A gyorsjavítás kiértékeli az openjpa.DataCache és javax.persistence.sharedCache.mode perzisztenciatulajdonságokat, és ha szükséges, hozzáad egy eclipselink.cache.shared.default perzisztenciatulajdonságot.

A szállítóra jellemző JPA konfigurációs tulajdonságok átállításával kapcsolatos további információkért tekintse meg a következőket: