지속성 단위 L2(second-level) 캐시 사용 안함 설정

OpenJPA에서는 기본적으로 L2(second-level) 캐시를 사용 안함으로 설정하는 반면 EclipseLink에서는 기본적으로 L2(second-level) 캐시를 사용으로 설정합니다. 이 캐시를 사용하지 않는 애플리케이션을 마이그레이션하는 경우, 버전 2.0 또는 2.1 persistence.xml 파일에서 다음 요소를 설정하여 EclipseLink에서 캐시를 사용 안함으로 설정할 수 있습니다.

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

버전 1.0 persistence.xml 파일의 경우, 다음 특성을 추가하여 EclipseLink에서 캐시를 사용 안함으로 설정할 수 있습니다.

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

이 규칙은 META-INF/persistence.xml 파일에서 현재 캐싱 구성이 EclipseLink에서 다른 기본 캐싱 동작을 초래하는 <persistence-unit> 구성을 발견합니다. 또한 EclipseLink가 무시하는 openjpa.DataCache 특성을 정리하는 데에도 도움이 됩니다.

구성 변경이 필요한지 여부를 판별하기 위해 규칙은 다음 설정을 조합하여 검사합니다.

openjpa.DataCache 특성을 지정하지 않거나 false로 설정되었고 공유 캐시 모드 구성이 누락되었거나 UNSPECIFIED로 설정된 경우 EclipseLink에서 캐시를 사용하지 않도록 구성을 변경해야 합니다. EclipseLink는 기본적으로 캐싱을 사용하므로 OpenJPA에서 openjpa.DataCache 특성을 true로 설정하는 것은 EclipseLink에서 공유 캐시 모드 설정이 없거나 shared-cache-modeALL로 설정하는 것과 같습니다. 수동으로 openjpa.DataCache 구성을 제거하는 경우, 이 규칙은 구성 없음을 동작 변경으로 감지하므로 이 규칙을 실행하지 마십시오.

이 규칙에 대한 긴급 수정사항은 공유 캐시 모드에 대해 명시적 값을 설정하므로 규칙에서 계속하여 persistence-unit에 플래그를 지정하지는 않습니다. 긴급 수정사항은 openjpa.DataCache 설정을 평가하고 기존 구성을 수정하거나 shared-cache-mode 구성 또는 javax.persistence.sharedCache.mode 특성을 새로 작성하므로 애플리케이션은 EclipseLink에서 OpenJPA에서와 동일한 캐시 모드 동작을 갖습니다. OpenJPA에서 스펙 정의 공유 캐시 값과 openjpa.DataCache 특성이 모두 설정된 경우 스펙 정의 값이 UNSPECIFIED가 아니면 이 값이 사용됩니다. 값이 UNSPECIFIED이면, openjpa.DataCache 특성이 사용되어 공유 캐시 모드의 올바른 값을 판별합니다.

예를 들어, 다음 persistence.xml 파일에서, OpenJPA에서와 동일한 캐싱 동작을 EclipseLink에서도 유지보수하기 위해 캐싱 구성에 대한 변경이 필요하므로 규칙은 모든 <persistence-unit> 요소에 플래그를 지정합니다.

OpenJPA의 소스 persistence.xml 파일 EclipseLink의 persistence.xml 파일에 대한 긴급 수정사항
<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>

긴급 수정사항은 openjpa.DataCache 특성 값이 단순한 true 또는 false인 경우 이 특성을 삭제합니다. openjpa.DataCache 특성 구성에 다음 예제에서와 같이 추가 매개변수가 있는 경우 긴급 수정사항은 특성을 그대로 두므로 사용자가 추가적인 변경이 필요한지 여부를 판별할 수 있습니다. 추가 마이그레이션이 필요한지 openjpa.DataCache 특성을 평가한 다음 특성을 제거하십시오. EclipseLink에서는 이 특성을 사용하지 않습니다.

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

shared-cache-modejavax.persistence.sharedCache.mode가 모두 동일한 persistence-unit에 정의된 경우, 긴급 수정수항은 필요 시 shared-cache-mode 값을 업데이트하고 javax.persistence.sharedCache.mode 특성을 삭제합니다.

JPA 1.0 persistence.xml 파일의 경우 <shared-cache-mode> 요소는 올바르지 않습니다. 긴급 수정사항은 openjpa.DataCachejavax.persistence.sharedCache.mode 지속성 특성의 값을 평가하고 필요한 경우 eclipselink.cache.shared.default 지속성 특성을 추가합니다.

벤더 특정 JPA 구성 특성 마이그레이션에 대한 자세한 정보는 다음 자원을 참조하십시오.