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のキャッシュをバイパスし直接データベースに送信されます。 |