パーシスタンス・ユニットの第 2 レベル・キャッシュは無効にしなければならない

OpenJPA ではデフォルトで第 2 レベル・キャッシュは無効になりますが、EclipseLink ではデフォルトで第 2 レベル・キャッシュは有効になります。キャッシュを使用していないアプリケーションをマイグレーションする場合は、バージョン 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"/>

この規則は、現在のキャッシュ構成のままだと EclipseLink では異なるデフォルト・キャッシュ動作になってしまう、META-INF/persistence.xml ファイル内の <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 プロパティーを変更するか、それらを新しく作成することによって、 アプリケーションが OpenJPA で行っていたのと同じキャッシュ・モード動作が EclipseLink でも行われるようにします。 OpenJPA では、仕様で定義された共有キャッシュ値と openjpa.DataCache プロパティーの両方が設定されている場合、仕様で定義された値が、UNSPECIFIED でない限り使用されます。 値が UNSPECIFIED の場合、共有キャッシュ・モードの正しい値を判別するために openjpa.DataCache プロパティーが使用されます。

例えば、以下の persistence.xml ファイルでは、この規則はすべての <persistence-unit> エレメントにフラグを立てます。 これらのエレメントでは、OpenJPA でのときと同じキャッシュ動作を EclipseLink で維持するためにはキャッシュ構成の変更が必要であるためです。

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.DataCache パーシスタンス・プロパティーおよび javax.persistence.sharedCache.mode パーシスタンス・プロパティーの値を評価し、必要に応じて eclipselink.cache.shared.default パーシスタンス・プロパティーを追加します。

ベンダー固有の JPA 構成プロパティーのマイグレーションについて詳しくは、以下のリソースを参照してください。