ヘッダーをスキップ
Oracle® Coherence統合ガイド
リリース3.6
B61372-01
  ドキュメント・ライブラリへ
ライブラリ
製品リストへ
製品
目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

1 JPA用のCoherenceの構成

Java Persistence API(JPA)は、オブジェクト・リレーショナル・マッピング(ORM)およびエンタープライズJava Persistenceにおける標準です。この章で説明する内容は次のとおりです。


注意:

現時点では、リソース・ローカルおよびブートストラップのエンティティ・マネージャのみがサポートされています。コンテナ管理のエンティティ・マネージャ、およびJTAトランザクションを使用するマネージャは、サポート対象ではありません。

この章では、グリッド上のJPAについても簡単に説明します。このシナリオでは、JPAアプリケーションではTopLink Gridを使用してデータベースと直接対話します。それに対して、TopLink GridではCoherenceデータ・グリッドを使用してドメイン・モデルの一部またはすべてを格納します。グリッド上のJPAに関する詳細は、このドキュメントでは取り上げません。このトピックの詳細は、CoherenceグリッドでのOracle TopLinkの統合ガイドを参照してください。

この章の内容は次のとおりです。

1.1 デフォルトのCoherence JPAの使用

Coherence JPAを使用してデータベースにオブジェクトをロードおよび格納する一般的な手順は、次のとおりです。

  1. JPAプロバイダ実装の入手

  2. Coherence JpaCacheStoreの構成

Oracle Coherenceでは、CacheLoaderクラスとCacheStoreクラスの独自実装が提供されています。JpaCacheLoaderクラスとJpaCacheStoreクラスは任意のJPA実装を使用して、エンティティをデータ・ストアに対してロードおよび格納ができます。このエンティティはデータ・ストアにマップされている必要があり、JPA永続性ユニット・コンフィギュレーションが存在する必要があります。

Coherenceでは、coherence-cache-config.xmlという名前のデフォルトのキャッシュ構成ファイルも提供されています。JPAランタイム構成ファイル(persistence.xml)とデフォルトJPAオブジェクト・リレーショナル・マッピング・ファイル(orm.xml)は通常、JPA実装で提供されます。

表1-1は、Coherenceで提供されるデフォルトJPA実装を示しています。

表1-1 Coherenceに付属するJPA関連のCacheStoreとCacheLoader API

クラス名 説明

com.tangosol.net.cache.CacheLoader

JCacheキャッシュ・ローダー

com.tangosol.net.cache.CacheStore

JCacheキャッシュ・ストア: CacheStoreインタフェースは、CacheLoaderを拡張します。

com.tangosol.coherence.jpa.JpaCacheLoader

CacheLoaderインタフェースのJPA実装: このクラスをロード専用の実装として使用します。これは、任意のJPA実装を使用してデータ・ストアからエンティティをロードできます。このエンティティはデータ・ストアにマップされている必要があり、JPA永続性ユニット・コンフィギュレーションが存在する必要があります。

ロードとストアの完全な実装には、JpaCacheStoreクラスを使用します。

com.tangosol.coherence.jpa.JpaCacheStore

CacheStoreインタフェースのJPA実装: このクラスをロードとストアの完全な実装として使用します。これは、任意のJPA実装を使用してデータ・ストアに対してエンティティをロードおよび格納できます。このエンティティはデータ・ストアにマップされている必要があり、JPA永続性ユニット・コンフィギュレーションが存在する必要があります。

注意: 永続性ユニットは、RESOURCE_LOCALトランザクションを使用するように設定されていることが前提になります。


1.1.1 JPAプロバイダ実装の入手

JPAプロバイダはCoherenceに付属していませんが、容易に入手できます。JPA CacheStoreは、任意のJPA準拠の実装で機能しますが、EclipseLink JPAを使用することをお薦めします。EclipseLink JPAは、JPA 2.0仕様のリファレンス実装です。オラクル社は、Eclipse JPAをはじめとする、オープンソースのEclipseLinkプロジェクトをリードしています。EclipseLinkは、Eclipseの次のURLで提供されています。

http://www.eclipse.org/eclipselink

Oracle TopLinkおよびCoherence統合用TopLink Gridには、JPA実装としてEclipseLinkが組み込まれています。TopLinkとダウンロードの詳細は、次のURLを参照してください。

http://www.oracle.com/technology/products/ias/toplink/index.html

1.1.2 Coherence JpaCacheStoreの構成

JPAは、データベースへのJavaオブジェクトのマッピング、問合せ、格納に使用される標準APIです。ただし、キャッシング、スレッド処理および全体的なパフォーマンスについては、JPA実装ごとに特性が異なる場合があります。TopLinkは、数多くの高度な機能を備え、パフォーマンスに優れたJPA実装を提供します。

Coherenceには、デフォルトのエンティティベースのCacheStore実装として、JpaCacheStore(および対応するCacheLoader実装であるJpaCacheLoader)が組み込まれています。その他の情報については、実装するクラスのJavadocを参照してください。

Coherence JpaCacheStoreを構成する一般的手順は次のとおりです。

  1. 永続クラスのマッピング

  2. JPAの構成

  3. JPA用のCoherence Cacheの構成

  4. 永続性ユニットの構成

1.1.2.1 永続クラスのマッピング

CacheStoreでオブジェクトをロードおよび格納するには、データベースにクラスがマップされているかどうかを確認します。JPAマッピングは標準仕様に準拠しているため、すべてのJPAプロバイダに対して同じ方法で指定できます。

エンティティは、エンティティ・クラスに注釈を付けるか、orm.xmlまたは他のXMLマッピング・ファイルを追加してマップされます。JPAエンティティのマップ方法の詳細は、JPAプロバイダのドキュメントを参照してください。

1.1.2.2 JPAの構成

一般的なJPA構成では、persistence.xmlファイルを編集する必要があります。このファイルには、ランタイムの動作を指示するプロパティがあります。

例1-1のサンプルpersistence.xmlファイルは、設定できる一般的プロパティを示しています。トランザクション・タイプはRESOURCE_LOCALに設定され、JPAプロバイダに必要なJDBCプロパティ(driverurluserpasswordなど)には、使用するデータベースの接続およびログイン用の値が格納されます。JPA注釈を使用してマップされるクラスは、<class>要素に記述してください。

例1-1 JPAのpersistence.xmlファイルのサンプル

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="EmpUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>
        org.eclipse.persistence.jpa.PersistenceProvider
    </provider>
    <class>com.oracle.coherence.handson.Employee</class>
    <properties>
        <property name="eclipselink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
        <property name="eclipselink.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="eclipselink.jdbc.user" value="scott"/>
        <property name="eclipselink.jdbc.password" value="tiger"/>
    </properties>
</persistence-unit>
</persistence>

1.1.2.3 JPA用のCoherence Cacheの構成

coherence-cache-config.xmlファイルを作成して、デフォルトのCoherence設定をオーバーライドし、JpaCacheStoreキャッシング・スキームを定義します。キャッシング・スキームには、JpaCacheStoreクラスをリストし次のパラメータを含む<cachestore-scheme>要素が必要です。

  • 格納するエンティティの名前。JPAで明示的にオーバーライドされていないかぎり、エンティティ・クラスの非修飾名になります。例1-2では、組込みのCoherenceマクロ{cache-name}を利用して、CacheStoreを構成および使用するキャッシュの名前に変換します。永続エンティティの種類ごとに別個のキャッシュを使用した後、各キャッシュの名前がその中に格納されるエンティティの名前に従って設定されるため、この操作は正常に処理されます。

  • エンティティ・クラスの完全修飾名。クラスのすべてが同一パッケージ内にあり、デフォルトのJPAエンティティ名を使用する場合は、ここでも{cache-name}マクロを使用して、エンティティの種類ごとに異なる部分に入力できます。このようにすることで、同じ永続性ユニット内でキャッシュされるすべてのエンティティで、同じキャッシング・スキームを使用できます。

  • 永続性ユニット名。これはpersistence.xmlファイルで指定した名前と同じにする必要があります。

これにより、様々な名前付きのキャッシュに対して、JPAキャッシング・スキームの使用が指示されます。例1-2は、Employeeという名前のNamedCacheを定義するcoherence-cache-config.xmlのサンプルを示しています。これによって、Employeeクラスのインスタンスがキャッシュされます。追加クラス用のエンティティ・キャッシュを定義するには、さらに<cache-mapping>要素をこのファイルに追加します。

例1-2 JPAキャッシング・スキームに対する名前付きキャッシュの割当て

<cache-config>
  <caching-scheme-mapping>
    <cache-mapping>
      <!-- Set the name of the cache to be the entity name  -->
      <cache-name>Employee</cache-name>
      <!-- Configure this cache to use the scheme defined below  -->
      <scheme-name>jpa-distributed</scheme-name>
    </cache-mapping>
  </caching-scheme-mapping>
  <caching-schemes>
    <distributed-scheme>
      <scheme-name>jpa-distributed</scheme-name>
      <service-name>JpaDistributedCache</service-name>
      <backing-map-scheme>
        <read-write-backing-map-scheme>
          <internal-cache-scheme>
            <local-scheme/>
          </internal-cache-scheme>
          <!- Define the cache scheme -->
          <cachestore-scheme>
            <class-scheme>
              <class-name>
                com.tangosol.coherence.jpa.JpaCacheStore
              </class-name>
              <init-params>

                <!-- This param is the entity name -->
                <init-param>
                  <param-type>java.lang.String</param-type>
                  <param-value>{cache-name}</param-value>
                </init-param>

                <!-- This param is the fully qualified entity class -->
                <init-param>
                  <param-type>java.lang.String</param-type>
                  <param-value>com.acme.{cache-name}</param-value>
                </init-param>

                <!-- This param should match the value of the -->
                <!-- persistence unit name in persistence.xml -->
                <init-param>
                  <param-type>java.lang.String</param-type>
                  <param-value>EmpUnit</param-value>
                </init-param>
              </init-params>
            </class-scheme>
          </cachestore-scheme>
        </read-write-backing-map-scheme>
      </backing-map-scheme>
    </distributed-scheme>
  </caching-schemes>
</cache-config>

1.1.2.4 永続性ユニットの構成

com.tangosol.coherence.jpa.JpaCacheStoreを使用する場合、挿入または更新の際にエンティティが確実に変更されないようにするには、永続性ユニットを構成します。JPAプロバイダによるエンティティへの変更は、いずれもCoherenceキャッシュには反映されません。これは、キャッシュ内のエンティティがデータベースの内容と一致しなくなることを意味します。特に@GeneratedValueなど、エンティティがIDの取得にID生成を使用しない場合、オブジェクトがCoherenceに置かれる前にアプリケーション・コードでIDを割り当てる必要があります。通常、IDはCoherenceに格納されるエンティティが属するキーになります。

オプティミスティック・ロック(@Versionなど)は、データベース・トランザクションのコミットに失敗する可能性があるため使用しないでください。CacheStoreの使用方法およびデータベース・スキーマの設定方法の詳細は、『Oracle Coherenceスタート・ガイド』の「リードスルー、ライトスルー、ライトビハインドおよびリフレッシュアヘッド・キャッシュ」および『Oracle Coherence開発者ガイド』の「CacheStoreのサンプル」を参照してください。

JpaCacheStoreまたはJpaCacheLoaderを使用する場合、永続性ユニットのL2(共有)キャッシュを無効にする必要があります。プロバイダについてはドキュメントを参照してください。TopLinkでは、各エンティティに@Cache(shared=false)と指定するか、デフォルトとしてpersistence.xmlの次のプロパティに指定できます。

<property name="eclipselink.cache.shared.default" value="false"/>

EclipseLinkをTopLink Gridで使用する場合、TopLink Grid実装ではL2キャッシュ、オプティミスティック・ロック・チェックおよびバージョニングが自動的に無効になります。基本的にTopLink Grid実装では、CacheStoreコンテキストに永続性ユニットがデプロイされて適宜構成が調整されることが認識されます。

1.2 TopLink GridでバッキングしたCoherenceキャッシュの使用

図1-1は、クライアント・アプリケーション(Coherence APIを採用している)、Coherenceキャッシュ、TopLink Gridおよびデータベースとの間の関係を示しています。

図1-1 TopLink GridでのCoherenceのアプローチ

従来のCoherenceアプローチ

1.2.1 TopLink Grid構成でのCoherenceのAPI

TopLink GridのCacheStore実装およびCacheLoader実装は、toplink-grid.jarに含まれています。TopLink Gridには、標準のJPAランタイム構成ファイルpersistence.xmlおよびJPAマッピング・ファイルorm.xmlを使用します。Coherenceキャッシュ構成ファイルのcoherence-cache-config.xmlを指定して、デフォルトのCoherence設定をオーバーライドし、CacheStoreキャッシング・スキームを定義する必要があります。

TopLink Grid CacheStoreクラスとCacheLoaderクラスはEclipseLink JPAにあわせて最適化され、Coherenceアプリケーションで使用できるように設計されています。これらのクラスは、oracle.eclispelink.coherence.standaloneパッケージ内にあります。表1-2では、これらのクラスについて説明します。

表1-2 TopLink GridアプリケーションでCoherenceを構築するTopLink Gridクラス

クラス名 説明

EclipseLinkJPACacheLoader

JPA対応バージョンのCoherence CacheLoaderを提供します。

EclipseLinkJPACacheStore

JPA対応バージョンのCoherence CacheStoreを提供します。


1.2.2

キャッシュ構成(coherence-cache-config.xml)では、例1-3で示されているようにキャッシュを定義します。TopLink Gridで必要な操作は、次の2つのパラメータを定義することのみです。

  • 格納するエンティティのキャッシュの名前。JPAで明示的にオーバーライドされないかぎり、エンティティ・クラスの非修飾名がデフォルトでエンティティ名になります。この例では、キャッシュの名前はEmployeeです。組込みのCoherenceマクロ{cache-name}を利用すると、CacheStoreを構成および使用するキャッシュの名前を入力できます。

  • 格納するエンティティを含む永続性ユニットの名前。この例では、employee-puEmployeeエンティティを含むMETA-INF/persistence.xmlで定義された永続性ユニットです。

    エンティティ・キャッシュを追加するには、<cache-mapping>要素を追加します。

例1-3 TopLink GridでのCoherence用キャッシュの構成

<cache-config>
  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>Employee</cache-name>
      <scheme-name>distributed-eclipselink</scheme-name>
    </caching-scheme-mapping>
  </caching-scheme-mapping>
  <caching-schemes>
    <distributed-scheme>
      <scheme-name>distributed-eclipselink</scheme-name>
      <service-name>EclipseLinkJPA</service-name>
      <backing-map-scheme>
        <read-write-backing-map-scheme>
          <internal-cache-scheme>
            <local-scheme />
          </internal-cache-scheme>
          <!-- 
            Define the cache scheme 
          -->
          <cachestore-scheme>
            <class-scheme>
            <!-- 
              Since the client code is using Coherence API we need the "standalone" version of the cache loader 
            -->
              <class-name>oracle.eclipselink.coherence.standalone.EclipseLinkJPACacheStore</class-name>
              <init-params>

            <!-- This parameter is the name of the cache containing the entity -->
                <init-param>
                  <param-type>java.lang.String</param-type>
                  <param-value>{cache-name}</param-value>
                </init-param>

            <!-- This parameter is the persistence unit name -->
                <init-param>
                  <param-type>java.lang.String</param-type>
                  <param-value>employee-pu</param-value>
                </init-param>
              </init-params>
            </class-scheme>
          </cachestore-scheme>
        </read-write-backing-map-scheme>
      </backing-map-scheme>
      <autostart>true</autostart>
    </distributed-scheme>
  </caching-schemes></cache-config>

1.3 TopLink GridキャッシュとしてのCoherenceの使用


注意:

この項では、TopLink GridのキャッシュとしてCoherenceを使用する方法のみを説明しています。このトピックの詳細は、CoherenceグリッドでのOracle TopLinkの統合ガイドを参照してください。

Oracle TopLink Gridは、EclipseLink JPAとCoherenceとの統合を可能にするOracle TopLinkの機能です。標準のJPAアプリケーションは、プライマリ・データ・ストア(一般的にリレーショナル・データベース)と直接対話しますが、TopLink Gridの場合、ドメイン・モデルの一部またはすべてをCoherenceデータ・グリッドに格納できます。この構成は、「グリッド上のJPA」とも呼ばれています。

TopLink Gridを簡単に構成し、Coherenceのプライマリ・データ・ストアとしての使用、グリッドに対する問合せの実行、およびCoherenceによる新規データと変更データにおける永続性の管理ができます。Coherenceでは、JPAとデータ・ストア間のレイヤーが提供されており、すべてのアプリケーション・インスタンスからデータベース・コールを直接オフロードできます。これにより、クラスタ化されたアプリケーションのデプロイメントでは、通常のデータベース操作の限界を超えるスケーラビリティが得られます。

アプリケーションで使用できる一般的なTopLink Gridの構成には次の3つがあります。

TopLink Grid用Coherenceの構成の詳細は、Oracle Technology NetworkのOracle TopLink Gridページを参照してください。