Oracle TopLink Gridは、EclipseLink JPAとCoherenceとの統合を可能にするOracle TopLinkの機能です。TopLink Gridにより、Java Persistence API(JPA)を使用したアプリケーション開発の簡便性とOracle Coherence Data Gridのスケーラビリティや分散処理能力を組み合せることができます。標準のJPAアプリケーションは、プライマリ・データ・ストア(一般的にリレーショナル・データベース)と直接対話しますが、TopLink Gridの場合、ドメイン・モデルの一部またはすべてをCoherenceデータ・グリッドに格納できます。
TopLink Gridでは、デフォルトのエンティティベースのCacheStore実装として、oracle.eclipselink.coherence.standaloneパッケージ内にあるEclipseLinkJPACacheStore、および対応するCacheLoader実装であるEclipseLinkJPACacheLoaderを提供します。これらの実装は、EclipseLink JPAでの使用に最適化されています。クラスおよびJavadocについては、toplink-grid.jarファイルを参照してください。
表2-1 EclipseLink JPA用のTopLink Gridクラス
| クラス名 | 説明 |
|---|---|
|
oracle.eclipselink.coherence.standalone.CacheStore |
EclipseLink JPAでの使用に最適化された |
|
oracle.eclipselink.coherence.standalone.CacheLoader |
EclipseLink JPAでの使用に最適化された |
この項では、単純なEclipseLinkJPACacheStoreコンストラクタを紹介します。このコンストラクタには、キャッシュの名前(エンティティの非修飾名)および永続性ユニットの名前が必要になります。これは、デフォルトのコンフィギュレーション・パスを使用してToplink Gridを構成し、クラスパス内で構成ファイルpersistence.xmlおよびorm.xmlを探します。また、EclipseLinkコンフィギュレーション・ファイルのリソース名またはファイル仕様を第3の<init-param>として渡す機能もあります(リソース名の場合<param-type>要素をjava.lang.Stringに設定し、ファイル仕様の場合はjava.io.Fileに設定する)。
例2-1は、エンティティ(novels)のインスタンスをキャッシュする、Publisherという名前のNamedCacheの定義に使用される単純なcoherence-cache-config.xmlファイルを示しています。エンティティ・キャッシュを追加するには、<cache-mapping>要素を追加します。
例2-1 EclipseLink用のcoherence-cache-config.xmlファイルのサンプル
<?xml version="1.0"?>
<!DOCTYPE cache-config SYSTEM "cache-config.dtd">
<cache-config>
<caching-scheme-mapping>
<cache-mapping>
<cache-name>Publisher</cache-name>
<scheme-name>distributed-eclipselink</scheme-name>
</cache-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>
<class-name>
oracle.eclipselink.coherence.standalone.EclipseLinkJPACacheStore
</class-name>
<init-params>
<init-param>
<param-type>java.lang.String</param-type>
<param-value>{cache-name}</param-value>
</init-param>
<init-param>
<param-type>java.lang.String</param-type>
<param-value>novels</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>
Toplink Gridを簡単に構成し、Coherenceのプライマリ・データ・ストアとしての使用、グリッドに対する問合せの実行、およびCoherenceによる新規データと変更データにおける永続性の管理ができます。Coherenceでは、JPAとデータストア間のレイヤーが提供されており、すべてのアプリケーション・インスタンスからデータベース・コールを直接オフロードできます。これにより、クラスタ化されたアプリケーションのデプロイメントでは、通常のデータベース操作の限界を超えるスケーラビリティが得られます。
アプリケーションで使用できる一般的なTopLink Gridの構成には次の3つがあります。
Coherenceによる共有L2キャッシュ: この構成では、CoherenceをTopLink L2(共有)キャッシュとして使用します。また、この構成では、Coherenceのキャッシュにすべて事前ロードできずデータベースでホストされるデータに依存するJPAアプリケーションにCoherenceのデータ・グリッドを適用できます。事前ロードができない理由には、Coherenceのフィルタの機能セットを超える非常に複雑な問合せ、古いキャッシュの原因となるサード・パーティ製データベースによる更新、ネイティブSQL問合せ、ストアド・プロシージャやトリガーへの依存などがあります。
この構成では、ローカルL2キャッシュを調整することなく、TopLinkを大規模なクラスタにスケール・アップできます。エンティティに対する更新は、トランザクションがコミットされるとただちに、すべてのCoherenceクラスタ・メンバーにおいて使用できます。
Coherenceの読取り: この構成は、(比較的安定した)大容量のデータへ高速にアクセスし、変更をデータベースへ同期的に書き込む必要のあるエンティティに適しています。これらのエンティティでは、Coherenceキャッシュへの移入にキャッシュ・ウォーミングが使用されますが、各問合せは必要に応じてデータベースへ送信されます。
Coherenceの読取り/書込み: この構成は、(比較的安定した)大容量のデータへ高速にアクセスする必要があり、更新が比較的少ないアプリケーションに適しています。この構成は、ライトビハインドを使用しCoherence CacheStoreと組み合せることができます。これにより、データベースの更新が非同期に行われ、アプリケーションのレスポンス時間が向上します。
Toplink Grid用のCoherence構成に関する詳細は、Oracle Technology NetworkのOracle TopLink Gridのページを参照してください。
TopLink Grid/Coherenceの統合用APIは、toplink-grid.jarに含まれています。この統合には、標準のJPAランタイム・コンフィギュレーション・ファイルpersistence.xmlおよびJPAマッピング・ファイルorm.xml(デフォルト名)も使用します。Coherenceキャッシュ・コンフィギュレーション・ファイルであるcoherence-cache-config.xml(デフォルト名)を指定して、デフォルトのCoherenceの設定をオーバーライドし、CacheStoreキャッシング・スキームを定義する必要があります。
表2-2に、EclipseLinkクラスの中で重要なクラスを示します。これらのクラスはTopLink Grid/Coherenceの統合で一般的に使用されます。クラスおよびJavadocについては、toplink-grid.jarファイルを参照してください。
表2-2 Toplink Grid/Coherenceの統合で一般的に使用されるEclipseLinkクラス
| クラス名 | 説明 |
|---|---|
|
oracle.eclipseLink.coherence.integrated.EclipseLinkJPACacheLoader |
JPA対応バージョンのCoherence |
|
oracle.eclipseLink.coherence.integrated.EclipseLinkJPACacheStore |
JPA対応バージョンのCoherence |
|
oracle.eclipselink.coherence.integrated.cache.CoherenceInterceptor |
内部TopLink L2キャッシュに対するすべてのTopLinkコールをインターセプトし、それをCoherenceにリダイレクトします。 |
|
oracle.eclipselink.coherence.integrated.config.CoherenceReadCustomizer |
Coherenceの読取り構成の設定に使用します。 |
|
oracle.eclipselink.coherence.integrated.config.CoherenceReadWriteCustomizer |
Coherenceの読取り/書込み構成の設定に使用します。 |
|
oracle.eclipselink.coherence.integrated.querying.IgnoreDefaultRedirector |
問合せはCoherenceのキャッシュをバイパスし直接データベースに送信されます。 |