JPA 2.0 第 2 レベル・キャッシュ用の動的キャッシュ・プロバイダー
Java Persistence API (JPA) 第 2 レベル (L2) キャッシュ・プロバイダーとしての WebSphere® Application Server 動的 キャッシュ・サービスの使用について説明します。JPA 2.0 では L2 キャッシュ・インターフェースが標準化されました。WebSphere Application Server は JPA 標準をサポートしています。レベル 2 キャッシュ・プロバイダーとして動的キャッシュ・サービスが JPA にプラグインされます。L2 キャッシュは、JPA アプリケーションのパフォーマンスを向上させ、WebSphere Application Server 環境での JPA アプリケーション用の動的キャッシュ・サービスを構成およびモニターすることができます。
JPA 2.0 の動的キャッシュ JPA 第 2 レベル (L2) キャッシュ・プロバイダーは、さまざまなパーシスタンス・コンテキスト、トランザクション、およびユーザー間でエンティティー状態を共有します。キャッシングが 有効になっている場合、パーシスタンス・コンテキスト内で見つからないエンティティーは L2 キャッシュからロードされます。 L2 キャッシングによって、現在ロードされているエンティティーのためのデータベース・アクセスを回避することができます。L2 キャッシングについて詳しくは、JPA 2.0 仕様を参照してください。
パフォーマンスを最大化するため、JPA は構成可能ないくつかの L2 キャッシュを使用します。JPA データ・キャッシュは、EntityManagerFactory のレベルで作動するパーシスタント・オブジェクト・データのキャッシュです。データ・キャッシュが有効になっている場合、 データ・ストアの前にデータ・キャッシュがチェックされます。オブジェクトが コミットされたとき、およびパーシスタント・オブジェクトがデータ・ストアからロードされたときに、データはキャッシュに保管されます。 JPA では、データ・キャッシュに加えて、照会キャッシュのサービス・プロバイダー・インターフェースが定義されています。
照会キャッシュは、照会の実行で戻されたオブジェクト ID を 保管します。照会を実行すると、JPA は、開始時に使用される照会のプロパティーおよびパラメーターに基づいてキーを組み立て、キャッシュされている照会結果がないかチェックします。見つかった場合、キャッシュされている結果の中のオブジェクト ID が 検索されて、その結果である永続可能オブジェクトが戻されます。 それ以外の場合、照会はデータベースに対して開始され、 照会によってロードされたオブジェクト ID がキャッシュに入れられます。オブジェクト ID リスト は、照会開始時に戻されたリストが全探索されるまではキャッシュに入れられません。
- WebSphere Application Server データ複製サービス (DRS) および高可用性 (HA) サービスによる、クラスター分散キャッシュの同期化および複製。
- DataCache および QueryCache キャッシュに対する、洗練された高度なモニター、調整、 および管理。L2 キャッシュは、動的キャッシュに関する使用可能なツールの体系を全面的に 受け継ぎます。
- ネイティブなサーバント領域 z/OS® サポート。
- デフォルトのキャッシュ・プロバイダー以上とは言わないまでも同程度の機能性。
JPA 標準は、JPA プラグインの構成を簡単にするための手段として別名を提供しています。JPA 2.0 の動的キャッシュのレベル 2 キャッシュ・プロバイダーは、通常は dynacache 別名を使用して構成されます。JPA の DataCache および QueryCache プロパティーの設定に dynacache 別名を使用できます。dynacache を使用するように QueryCache プロパティー が設定されている場合、DataCache プロパティー も dynacache 別名を使用します。QueryCache プロパティー および DataCache プロパティーを、異なるタイプのキャッシュ・プロバイダーを使用するように構成できます。QueryCache プロパティー をデフォルトに設定し、DataCache を動的キャッシュを使用するように 設定することができ、逆の設定にすることもできます。WebSphere Application Server 動的 キャッシュ・サービスを DataCache、QueryCache、および DataCacheManager に使用するのが理想的です。DataCache が dynacache に設定されている場合、DRS と HAM の活用によってキャッシュ同期が行われる ため、RemoteCommitProvider は何もしません。 QueryCache プロパティーは DataCache と分離して使用可能にすることはできません。QueryCache プロパティー は、エンティティー・データがキャッシュされる DataCache プロパティーが使用可能であることから 恩恵を受けます。
JPA 動的キャッシュ L2 プロバイダーの構成 (基本的な方法)
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<property name="openjpa.QueryCache" value="dynacache"/>
<property name="openjpa.DataCacheManager" value="dynacache"/>
動的キャッシュ名 | プロパティー名 | 別名 |
---|---|---|
DataCache キャッシュ・プロバイダー | com.ibm.ws.cache.openjpa. DynacacheDataCache | dynacache |
QueryCache キャッシュ・プロバイダー | com.ibm.ws.cache.openjpa. DynacacheQueryCache | dynacache |
RemoteCommitProvider | com.ibm.ws.cache.openjpa. NoOpRemoteCommitProvider | none |
DataCacheManager | com.ibm.ws.cache.openjpa. DynacacheDataCacheManager | dynacache |
JPA 動的キャッシュ L2 プロバイダーの構成 (上級の方法)
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache",
CacheSize=1000,
EnableDiskOffload=true,
DiskCacheSizeInGB=4,
DiskOffloadLocation=c:¥temp,
EnableCacheReplication=true)"/>
動的キャッシュのカスタム・プロパティー | デフォルト値 |
---|---|
CacheName | デフォルト |
CacheSize | 2000 |
EnableDiskOffload | false |
EnableCacheReplication | false |
DiskCacheSizeInGB | 該当なし |
DiskOffloadLocation | 該当なし |
ReplicationType | 1、2、または 4 (1 は NOT_SHARED、2 は PUSH、4 は PUSH_PULL を意味する) |
wsadmin>set mbean [$AdminControl queryNames type=DynaCache,*]
wsadmin> $AdminControl invoke $mbean getCacheIDsInMemory {default \S}
667110
A5614-67
wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=5
TOTAL_READ_COUNT=5
WRITE_COUNT=4
TOTAL_WRITE_COUNT=4
wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default openbook.domain.Customer}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=0
TOTAL_READ_COUNT=0
WRITE_COUNT=1
TOTAL_WRITE_COUNT=1
また、Extended Cache Monitor を使用して、JPA ランタイムによりキャッシュに入れられたキー値とキャッシュ ID の内容を表示できます。クラスター環境での動的キャッシュ L2 キャッシュ・プロバイダーの使用
カスタマーは通常の方法を使用して WebSphere Application Server でキャッシュ・インスタンスを定義した後、その名前を JPA DataCache プロパティー値の CacheName プロパティー内で参照することができます。オブジェクト・キャッシュ・インスタンスの定義は、cacheinstances.properties ファイル、 DistributedMapFactory、または管理コンソールを使用して行うことができます。
すべてのプロパティー はオプションであり、指定されていない場合はデフォルトのプロパティーが想定されます。 キャッシュ・インスタンスが存在しない場合、動的キャッシュ・サービス がキャッシュ・インスタンスを作成します。上級の QueryCache Dynacache インスタンス構成も 同様に実行できます。
JPA データ・キャッシュは、単一 JVM 環境とマルチ JVM 環境の両方で機能します。マルチ JVM キャッシング は、クラスター WebSphere Application Server Network Deployment 環境でデータ複製サービス (DRS) の使用を通して実行されます。
WebSphere Application Server Network Deployment 環境のサーバー間でデータ複製サービスを使用して複製される 動的キャッシュ DataCache および QueryCache インスタンス内のエンティティーおよび照会用に、複製ドメインを 構成し、その複製ドメインをキャッシュ・インスタンスと 関連付けます。パーシスタント・ユニットでも openjpa.RemoteCommitProvider openJPA プロパティーを none に設定する必要があります。
- 管理コンソールで複製ドメインを作成し、分散キャッシュを共有する必要のあるすべての アプリケーション・サーバーに関する動的キャッシュ・サービス・パネルを使用して、 その複製ドメインを baseCache キャッシュ・インスタンスに 関連付けます。動的キャッシュ・サービスは、この複製ドメインを 使用して、複製ドメイン内のサーバー間でデータを複製します。
- キャッシュ・インスタンスの構成を定義するときに enableCacheReplication プロパティー を true に設定して、キャッシュ・インスタンスを構成します。replicationType プロパティー を指定しないと、キャッシュ・インスタンスは、 デフォルトで NOT_SHARED 共有モードで構成され、このモードでは無効化のみが伝搬されます。 キャッシュ・インスタンスは NOT_SHARED、PUSH、および PUSH_PULL 共有タイプ で構成できます。このトピックについて詳しくは、キャッシュ複製のトピックを 参照してください。
- 複製ドメイン内のすべてのアプリケーション・サーバーで com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup JVM カスタム・プロパティー を true に設定します。このカスタム・プロパティーは、サーバー上の JPA キャッシュ・インスタンスが早期に高速でブートストラップするのを支援します。
- 共有ライブラリーを定義してサーバー・クラス・ローダーと 関連付けることによって共有ライブラリーを作成し、アプリケーション・サーバーのクラスパスでエンティティー・クラスを 使用できるようにします。このステップは、複製されたエンティティー・オブジェクトを 動的キャッシュ・サービスおよび DRS がデシリアライズするために必要です。共有ライブラリーについて 詳しくは、共有ライブラリー・コレクション、共有ライブラリーの管理、および共有ライブラリーとサーバーの関連付けに 関する各トピックを参照してください。
- openjpa.RemoteCommitProvider を none に設定します。
- org.apache.openjpa.event.SingleJVMRemoteCommitProvider (別名「sjvm」で構成される)
- org.apache.openjpa.event.TCPRemoteCommitProvider
- org.apache.openjpa.event.JMSRemoteCommitProvider
JPA L2 キャッシュのトラブルシューティング
# Significant dynamic cache OpenJPA messages in the SystemOut.log file
DYNA1081I: OpenJPA L2 DataCache Dynacache instance \"{0}\" created or retrieved successfully for persistent unit \"{1}\".
# Applicable only if QueryCache is enabled
DYNA1080I: OpenJPA L2 QueryCache Dynacache instance ¥"{0}¥" created or retrieved successfully for persistent unit ¥"{1}¥".