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 プロパティーをクリーンアップするためにも役立ちます。
構成変更が必要かどうかを判別するため、この規則は以下の設定の組み合わせを検査します。
<shared-cache-mode> 構成エレメントjavax.persistence.sharedCache.mode パーシスタンス・プロパティーopenjpa.DataCache パーシスタンス・プロパティー
openjpa.DataCache プロパティーが指定されていないか false に設定されていて、
かつ、共有キャッシュ・モード構成が省略されているか UNSPECIFIED に設定されている場合、EclipseLink では構成を変更してキャッシュを無効にする必要があります。
EclipseLink ではデフォルトでキャッシュが有効にされるため、OpenJPA で openjpa.DataCache プロパティーを true に設定することは、
EclipseLink で共有キャッシュ・モード設定を省略するか shared-cache-mode を ALL に設定することと等価です。
手動で 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-mode と javax.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 構成プロパティーのマイグレーションについて詳しくは、以下のリソースを参照してください。