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. データベースへのメタデータの格納

storeMetadatatrue (デフォルト値) に設定された場合、有効期限、作成および変更タイムスタンプ、バージョンなどのエントリーに関するメタ情報はデータベースに格納されます。エンティティーテーブルのレイアウトは固定され、メタデータを収めることができないため、JBoss Data Grid はメタデータを __ispn_metadata__ という名前の追加テーブルにメタデータを格納します。
このテーブルの構造は、使用中のデータベースに依存します。テスト環境と同じデータベースを使用して、このテーブルの自動作成を有効にし、構造を本稼働データベースに転送します。

手順18.7 persistence.xml でのメタデータエンティティーの設定

  1. Hibernate を JPA 実装として使用すると、以下のように persistence.xml のプロパティー hibernate.hbm2ddl.auto を使用してこれらのテーブルの自動作成を許可できます。
    <property name="hibernate.hbm2ddl.auto" value="update"/>
  2. 以下の内容を 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 デプロイヤーに依存関係のリストを提供します。
    1. 依存関係設定を MANIFEST.MF ファイルに追加します。
      Manifest-Version: 1.0
      Dependencies: org.infinispan:jdg-6.6 services, org.infinispan.persistence.jpa:jdg-6.6 services
    2. 依存関係設定を 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 キャッシュストアのデプロイ

  1. persistence.xml で以下のプロパティーを追加します。
    <persistence-unit>
      [...]
      <properties>
        <property name="jboss.as.jpa.providerModule" value="application" />
      </properties>
    </persistence-unit>
  2. 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>
  3. 追加の JDG モジュールなどの依存関係を jboss-deployment-structure.xmldependencies セクションに追加します。

重要

JPA キャッシュストアは、JBoss Data Grid 6.6 の Apache Karaf でサポートされません。