Disabilitazione della cache di secondo livello dell'unità di persistenza

OpenJPA disabilita la cache di secondo livello per impostazione predefinita, mentre EclipseLink per impostazione predefinita l'abilità. Se si sta eseguendo la migrazione di un'applicazione che non utilizza la cache, è possibile disabilitare la cache in EclipseLink impostando il seguente elemento nel file persistence.xml della versione 2.0 o 2.1:

   <shared-cache-mode>NESSUNA</shared-cache-mode>

In un file persistence.xml della versione 1.0, è possibile disabilitare la cache di EclipseLink aggiungendo la seguente proprietà:

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

Questa regola rileva le configurazioni <persistence-unit> nel file META-INF/persistence.xml in cui la configurazione attuale della cache risulta un diverso comportamento predefinito della cache in EclipseLink. Aiuta anche a ripulire le proprietà di openjpa.DataCache, che vengono ignorate da EclipseLink.

Per determinare se è necessaria una modifica alla configurazione, la regola esamina le combinazioni delle seguenti impostazioni:

Se la proprietà openjpa.DataCache non è specificata o se è impostata su false e la configurazione della modalità di cache condivisa è stata omesse o impostata con UNSPECIFIED, sarà necessario cambiare la configurazione in EclipseLink per disabilitare la cache. Poiché EclipseLink abilita per impostazione predefinita la memorizzazione nella cache, una proprietà openjpa.DataCache impostata su true in OpenJPA, equivale a non avere l'impostazione della modalità di cache condivisa in EclipseLink o ad impostare shared-cache-mode su ALL. Se si rimuove manualmente la configurazione openjpa.DataCache, non continuare ad eseguire questa regola perché, come un cambiamento del comportamento, non rileverà alcuna configurazione.

La correzione automatica per questa regola imposta un valore esplicito per la modalità di cache condivisa, in modo che la regola non continui a segnalare l'unità di persistenza in modo che la regola non continui a segnalare l' unità di persistenza. La correzione automatica valuta l'impostazione openjpa.DataCache e modifica la configurazione esistente o ne crea una nuova o crea nuove proprietà per la configurazione di shared-cache-mode o javax.persistence.sharedCache.mode in modo che le applicazioni abbiano lo stesso comportamento della modalità cache in EclipseLink come in OpenJPA. In OpenJPA, quando si imposta sia il valore della cache condivisa definito dalla specifica condivisa che la proprietà openjpa.DataCache, viene utilizzato il valore definito dalla specifica a meno che non sia UNSPECIFIED. Se il valore è UNSPECIFIED, si utilizza la proprietà openjpa.DataCache per determinare il valore corretto della modalità di cache condivisa.

Ad esempio, nel seguente file persistence.xml, la regola contrassegna tutti gli elementi <persistence-unit>, perché perché richiedono modifiche alla configurazione della cache per mantenere lo stesso comportamento della cache in EclipseLink come in OpenJPA.

File persistence.xml di origine per OpenJPA Modifiche automatiche al file persistence.xml per EclipseLink
<persistence> <Unità di persistenza name=" example1 ">...
    <shared-cache-mode>NON SPECIFICATO</shared-cache-mode>... </persistence-unit> <unità di persistenza name=" example2 ">... <properties> <property name="openjpa.DataCache" value="true"/> </properties>... </persistence-unit> <unità di persistenza name=" example3 ">... <properties><-- nessuna proprietà della cache impostata --></properties>... </persistence-unit> <unità di persistenza 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>NESSUNO</shared-cache-mode>... </persistence-unit> <persistence-unit name="example2"> ...
     <shared-cache-mode>TUTTI</shared-cache-mode> <properties></properties>... </persistence-unit> <persistence-unit name="example3"> ...
     <shared-cache-mode>NESSUNO</shared-cache-mode> <properties><-- nessuna proprietà della cache impostata --></properties>... </persistence-unit> <persistence-unit name="example4">... <properties> <property name="javax.persistence.sharedCache.mode" 
                  value="ALL"/> </properties>...</persistence-unit> </persistence>

La correzione automatica elimina la proprietà openjpa.DataCache se ha un semplice valore valore vero o falso. Se la configurazione openjpa.DataCache ha parametri aggiuntivi, come nell'esempio seguente come nell'esempio seguente, la correzione automatica lascia la proprietà in modo che sia possibile determinare se sono necessarie ulteriori modifiche manuali. Valutare se è necessaria un'ulteriore migrazione nella proprietà openjpa.DataCache, e quindi rimuoverla perché non viene utilizzata da EclipseLink.

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

Se sia shared-cache-mode che javax.persistence.sharedCache.mode sono definiti nella stessa persistence-unit, la correzione automatica aggiorna il valore shared-cache-mode se necessario ed elimina la proprietà javax.persistence.sharedCache.mode.

Per i file JPA 1.0 persistence.xml, l'elemento <shared-cache-mode> non è valido. La correzione automatica valuta i valori delle proprietà di persistenza openjpa.DataCache e delle proprietà di persistenza javax.persistence.sharedCache.mode e aggiunge una proprietà di persistenza eclipselink.cache.shared.default quando necessario.

Copiare la configurazione personalizzata (custom configuration) nel file di build dell'applicazione per abilitare l'automazione delle correzioni.

Per ulteriori informazioni sulla migrazione delle proprietà di configurazione JPA specifiche del fornitore, consultare le seguenti risorse: