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 プロパティー。これにより、アプリケーションの EclipseLink でのキャッシュ・モードの動作は、 OpenJPAの場合と同じになります。
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 < span class= "FilePath">persistence.xml< /span> ファイルの場合、< code> < shared-cache-mode> < /code> エレメントは無効です。 自動化フィックスは、< code>openjpa.DataCache< /code> および < code>javax.persistence.sharedCache.mode< /code> パーシスタンス・プロパティーの値を評価し、必要に応じて < code>eclipselink.cache.shared.default< /code> パーシスタンス・プロパティーを追加します。
カスタム構成をアプリケーション・ビルド・ファイルにコピーして、フィックスの自動化を有効にします。
ベンダー固有の JPA 構成プロパティーのマイグレーションについて詳しくは、以下のリソースを参照してください。