18.8. JPA キャッシュストア
JPA (Java Persistence API) キャッシュストアは、正式なスキーマを使用してデータベースにキャッシュエントリーを格納します。これにより、他のアプリケーションは永続化データを読み取り、他のアプリケーションにより提供されたデータを Red Hat JBoss Data Grid にロードできます。他のアプリケーションが JBoss Data Grid でこのデータベースを同時に使用しないようにする必要があります。
重要
Red Hat JBoss Data Grid では、JPA キャッシュストアはライブラリーモードでのみサポートされます。
18.8.1. JPA キャッシュストアの XML 設定例 (ライブラリーモード)
Red Hat JBoss Data Grid で XML を使用して JPA キャッシュストアを設定するには、以下の設定を
infinispan.xml
ファイルに追加します。
<namedCache name="users"> <!-- Insert additional configuration elements here --> <persistence passivation="false"> <jpaStore xmlns="urn:infinispan:config:jpa:6.0" shared="true" preload="true" persistenceUnitName="MyPersistenceUnit" entityClassName="org.infinispan.loaders.jpa.entity.User" /> </persistence> </namedCache>
この設定例で使用された要素とパラメーターの詳細については、「キャッシュストア設定の詳細 (ライブラリモード)」を参照してください。
18.8.2. JPA キャッシュストアのプログラミングによる設定例
Red Hat JBoss Data Grid で JPA キャッシュストアをプログラミングにより設定するには、以下のコードを使用します。
Configuration cacheConfig = new ConfigurationBuilder().persistence().addStore(JpaStoreConfigurationBuilder.class).persistenceUnitName("org.infinispan.loaders.jpa.configurationTest") .entityClass(User.class) .build();
このコード例で使用されるパラメーターは以下のとおりです。
persistenceUnitName
パラメーターは、JPA エンティティークラスを含む設定ファイル (persistence.xml
) の JPA キャッシュストアの名前を指定します。entityClass
パラメーターは、このキャッシュに格納された JPA エンティティークラスを指定します。各設定で指定できるクラスは 1 つだけです。
18.8.3. データベースへのメタデータの格納
storeMetadata
が true
(デフォルト値) に設定された場合、有効期限、作成および変更タイムスタンプ、バージョンなどのエントリーに関するメタ情報はデータベースに格納されます。エンティティーテーブルのレイアウトは固定され、メタデータを収めることができないため、JBoss Data Grid はメタデータを __ispn_metadata__
という名前の追加テーブルにメタデータを格納します。
このテーブルの構造は、使用中のデータベースに依存します。テスト環境と同じデータベースを使用して、このテーブルの自動作成を有効にし、構造を本稼働データベースに転送します。
手順18.7 persistence.xml でのメタデータエンティティーの設定
- Hibernate を JPA 実装として使用すると、以下のように
persistence.xml
のプロパティーhibernate.hbm2ddl.auto
を使用してこれらのテーブルの自動作成を許可できます。<property name="hibernate.hbm2ddl.auto" value="update"/>
- 以下の内容を
persistence.xml
に追加して、JPA プロバイダーに対してメタデータエンティティークラスを宣言します。<class>org.infinispan.persistence.jpa.impl.MetadataEntity</class>
説明のとおり、メタデータは常に新しいテーブルに格納されます。メタデータ情報の収集と格納が必要ない場合は、JPA ストア設定で
storeMetadata
属性を false
に設定します。
18.8.4. さまざまなコンテナーでの JPA キャッシュストアのデプロイ
Red Hat JBoss Data Grid の JPA キャッシュストア実装は、Red Hat JBoss Enterprise Application Platform を除くすべてのサポート対象コンテナーに対して正常にデプロイされます。JBoss Data Grid の JBoss EAP モジュールには、JPA キャッシュストアと関連ライブラリー (Hibernate など) が含まれます。結果として、関連ライブラリーはアプリケーション内部にパッケージ化されず、アプリケーションはインストールされた JBoss EAP モジュールのライブラリーを参照します。
これらのモジュールは、JBoss EAP 以外のコンテナーには必要ありません。結果として、すべての関連ライブラリーは、以下の Maven 依存関係の場合のようにアプリケーションの WAR/EAR ファイル内でパッケージ化されます。
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-cachestore-jpa</artifactId> <version>6.4.0.Final-redhat-4</version> </dependency>
手順18.8 JBoss EAP 6.3.x およびそれ以前のバージョンでの JPA キャッシュストアのデプロイ
- JBoss Data Grid モジュールの依存関係をアプリケーションのクラスパスに追加するには、以下のいずれかの方法で JBoss EAP デプロイヤーに依存関係のリストを提供します。
- 依存関係設定を
MANIFEST.MF
ファイルに追加します。Manifest-Version: 1.0 Dependencies: org.infinispan:jdg-6.6 services, org.infinispan.persistence.jpa:jdg-6.6 services
- 依存関係設定を
jboss-deployment-structure.xml
ファイルに追加します。<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> <deployment> <dependencies> <module name="org.infinispan.persistence.jpa" slot="jdg-6.6" services="export"/> <module name="org.infinispan" slot="jdg-6.6" services="export"/> </dependencies> </deployment> </jboss-deployment-structure>
手順18.9 JBoss EAP 6.4 以降での JPA キャッシュストアのデプロイ
persistence.xml
で以下のプロパティーを追加します。<persistence-unit> [...] <properties> <property name="jboss.as.jpa.providerModule" value="application" /> </properties> </persistence-unit>
jboss-deployment-structure.xml
で以下の依存関係を追加します。<jboss-deployment-structure> <deployment> <dependencies> <module name="org.infinispan" slot="jdg-6.6"/> <module name="org.jgroups" slot="jdg-6.6"/> <module name="org.infinispan.persistence.jpa" slot="jdg-6.6" services="export"/> <module name="org.hibernate"/> </dependencies> </deployment> </jboss-deployment-structure>
- 追加の JDG モジュールなどの依存関係を
jboss-deployment-structure.xml
のdependencies
セクションに追加します。
重要
JPA キャッシュストアは、JBoss Data Grid 6.6 の Apache Karaf でサポートされません。