Desativar o cache de segundo nível da unidade de persistência

O OpenJPA desativa o cache de segundo nível por padrão, enquanto o EclipseLink ativa o cache de segundo nível por padrão. Se você estiver migrando um aplicativo que não usa o cache, será possível desativar o cache no EclipseLink configurando o elemento a seguir em um arquivo persistence.xml versão 2.0 ou 2.1:

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

Para um arquivo persistence.xml versão 1.0, é possível desativar o cache no EclipseLink incluindo a propriedade a seguir:

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

Essa regra detecta configurações <persistence-unit> no arquivo META-INF/persistence.xml no qual a configuração de cache atual resulta em um comportamento de armazenamento em cache padrão diferente no EclipseLink. Ela também ajuda a limpar propriedades openjpa.DataCache, que são ignoradas pelo EclipseLink.

Para determinar se uma mudança na configuração é necessária, a regra examina combinações das configurações a seguir:

Se a propriedade openjpa.DataCache não for especificada ou for configurada como false e a configuração do modo de cache compartilhado for omitida ou configurada como UNSPECIFIED, no EclipseLink, deve-se mudar a configuração para desativar o cache. Como o EclipseLink ativa o armazenamento em cache por padrão, uma propriedade openjpa.DataCache configurada como true no OpenJPA é equivalente a ter nenhuma configuração de modo de cache compartilhado no EclipseLink ou a configurar shared-cache-mode como ALL. Se você remover manualmente a configuração openjpa.DataCache, não continue a executar essa regra porque ela irá detectar nenhuma configuração como uma mudança de comportamento.

A correção automatizada para essa regra configura um valor explícito para o modo de cache compartilhado para que a regra não continue a sinalizar a unidade de persistência. A correção automatizada avalia a configuração do openjpa.DataCache e modifica a existente ou cria novas A configuração do shared-cache-mode ou as propriedades javax.persistence.sharedCache.mode para que seus aplicativos tenham o mesmo comportamento do modo de cache no EclipseLink que eles tinham no OpenJPA No OpenJPA, quando um valor de armazenamento em cache compartilhado definido por especificação e a propriedade openjpa.DataCache estão configurados, o valor definido por especificação é utilizado, a menos que ele seja UNSPECIFIED. Se o valor for UNSPECIFIED, a propriedade openjpa.DataCache será usada para determinar o valor correto do modo de cache compartilhado.

Por exemplo, no arquivo persistence.xml a seguir, a regra sinaliza todos os <persistence-unit> elementos porque eles requerem mudanças na configuração de armazenamento em cache para manter o mesmo comportamento de armazenamento em cache no EclipseLink que ele mantinha no OpenJPA.

Arquivo persistence.xml de origem para OpenJPA Mudanças de correção automatizadas no arquivo persistence.xml para 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>

A correção automatizada exclui a propriedade openjpa.DataCache se ela tiver uma propriedade simples Valor true ou false . Se a configuração da propriedade openjpa.DataCache tiver parâmetros adicionais, como no exemplo a seguir, a correção automatizada deixará a propriedade para que seja possível determinar se alguma mudança manual adicional é necessária Avalie a propriedade openjpa.DataCache para migração adicional e, em seguida, remova a propriedade porque ela não é usada pelo EclipseLink.

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

Se ambos shared-cache-mode e javax.persistence.sharedCache.mode forem definidos na mesma persistence-unit, a correção automatizada atualizará o valor shared-cache-mode se necessário e excluirá a propriedade javax.persistence.sharedCache.mode .

Para arquivos JPA 1.0 < span class= "FilePath">persistence.xml< /span>, o elemento < code> < shared-cache-mode> < /code> não é válido. A correção automatizada avalia os valores das propriedades de persistência < code>openjpa.DataCache< /code> e < code>javax.persistence.sharedCache.mode< /code> e inclui uma propriedade de persistência < code>eclipselink.cache.shared.default< /code> quando necessário.

Copie a configuração customizada para seu arquivo de construção do aplicativo para ativar a automação de correção.

Para obter informações adicionais sobre a migração de propriedades de configuração da JPA específicas do fornecedor, veja os recursos a seguir: