Zakázat mezipaměť druhé úrovně jednotky perzistence

OpenJPA standardně zakáže mezipaměť druhé úrovně, zatímco EclipseLink standardně povoluje mezipaměť druhé úrovně. Pokud migrujete aplikaci, která mezipaměť nepoužívá, můžete zakázat mezipaměť v EclipseLink nastavením následujícího prvku v souboru persistence.xml verze 2.0 nebo 2.1:

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

V případě souboru persistence.xml verze 1.0 můžete zakázat mezipaměť v EclipseLink přidáním následující vlastnosti:

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

Toto pravidlo zjistí konfigurace <persistence-unit> v souboru META-INF/persistence.xml, kde aktuální konfigurace ukládání do mezipaměti vede k jinému výchozímu chování ukládání do mezipaměti EclipseLink. Pomůže vám také vyčistit vlastnosti openjpa.DataCache, které jsou ignorovány EclipseLink.

Chcete-li určit, zda je vyžadována změna konfigurace, bude pravidlo kontrolovat kombinace následujících nastavení:

Není-li vlastnost openjpa.DataCache zadána nebo nastavena na hodnotu false a je-li konfigurace režimu sdílené mezipaměti vynechána nebo nastavena na hodnotu UNSPECIFIED, je třeba v EclipseLink změnit konfiguraci tak, aby byla mezipaměť zakázána. Protože EclipseLink standardně povoluje ukládání do mezipaměti, je vlastnost openjpa.DataCache nastavená na hodnotu true v OpenJPA ekvivalentní nastavení režimu sdílení mezipaměti v EclipseLink nebo nastavení shared-cache-mode na ALL. Pokud ručně odeberete konfiguraci openjpa.DataCache, nepokračujte ve spouštění tohoto pravidla, protože nebude zjišťovat žádnou konfiguraci jako změnu chování.

Rychlá oprava pro toto pravidlo nastavuje explicitní hodnotu pro režim sdílené mezipaměti, takže pravidlo nebude pokračovat s příznakem persistence-unit. Rychlá oprava vyhodnotí nastavení openjpa.DataCache a upraví existující nebo vytvoří novou konfiguraci shared-cache-mode nebo javax.persistence.sharedCache.mode tak, aby vaše aplikace měly stejné chování režimu mezipaměti v EclipseLink, jak tomu bylo v OpenJPA. Když jsou v rozhraní OpenJPA současně nastaveny hodnota sdílené mezipaměti definovaná specifikací i vlastnost openjpa.DataCache, použije se hodnota definovaná specifikací, pokud to není hodnota UNSPECIFIED. Je-li hodnota UNSPECIFIED, použije se k určení správné hodnoty režimu sdílené mezipaměti vlastnost openjpa.DataCache.

Například v následujícím souboru persistence.xml pravidlo označí všechny prvky <persistence-unit>, protože vyžadují změny v konfiguraci ukládání do mezipaměti, aby bylo zachováno stejné chování ukládání do mezipaměti v oboru EclipseLink, jak tomu bylo v rozhraní OpenJPA.

Zdrojový soubor persistence.xml pro OpenJPA Změny rychlé opravy na soubor persistence.xml pro 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>
        <-- nejsou nastaveny žádné vlastnosti mezipaměti -->
     </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>
        <-- nejsou nastaveny žádné vlastnosti mezipaměti -->
     </properties>
     ...
  </persistence-unit>

  <persistence-unit name="example4">
     ...
     <properties>
        <property name="javax.persistence.sharedCache.mode" 
                  value="ALL"/>
     </properties>
     ...
  </persistence-unit>

</persistence>

Rychlá oprava odstraní vlastnost openjpa.DataCache v případě, že má jednoduchou hodnotu true nebo false. Pokud má konfigurace vlastnosti openjpa.DataCache další parametry, jako např. v následujícím příkladu, rychlá oprava opustí tuto vlastnost, takže můžete určit, zda jsou potřeba nějaké další ruční změny. Vyhodnoťte vlastnost openjpa.DataCache pro další migraci a poté odeberte vlastnost, protože ji EclipseLink nepoužívá.

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

Pokud oba prvky shared-cache-mode i javax.persistence.sharedCache.mode jsou definovány ve stejném prvku persistence-unit, rychlá oprava aktualizuje hodnotu shared-cache-mode, pokud je zapotřebí, a odstraní vlastnost javax.persistence.sharedCache.mode.

Pro soubory JPA 1.0 persistence.xml není prvek <shared-cache-mode> platný. Rychlá oprava vyhodnotí hodnoty vlastností perzistence openjpa.DataCache a javax.persistence.sharedCache.mode a v případě potřeby přidá vlastnost perzistence eclipselink.cache.shared.default.

Další informace o migraci vlastností konfigurace rozhraní JPA specifických pro prodejce naleznete v následujících zdrojích: