Oracle® Fusion Middleware Oracle TopLinkのためのCoherence Grid統合ガイド 11g リリース1(11.1.1) B61395-02 |
|
前 |
次 |
Oracle TopLink 11g リリース1(11.1.1)では、Oracle Coherenceを使用してJPAアプリケーションをスケール・アウトできます。TopLink Gridは、Coherenceを分散共有(L2)キャッシュとして使用することから、JP QL問合せをCoherenceに送ってグリッド全体でパラレル実行してデータベース負荷を削減することまで、スケール・アウトに関する多数のオプションをアプリケーションに提供します。TopLink Gridでは、スケール・アウトするアプリケーションをリライトする必要はありません。JPAへの投資を使用したまま、Coherenceのスケーラビリティを利用できます。
TopLink Gridには次のような利点があります。
標準JPAに合せた注釈またはXML構成を使用した単純なアプリケーション構成。
複雑なオブジェクト・グラフと関係をCoherenceに格納する機能。
グリッドに格納するエンティティとバッキング・データベースに直接格納するエンティティを選択する機能。
グリッド内のJP QL問合せを実行またはデータベースに対して直接実行できます。
即時関係と遅延関係の両方でエンティティをCoherenceに格納できます。
このドキュメントでは、次の方法を説明します。
Coherenceデータ・グリッドをエンティティのプライマリ・データ・ストアとして使用するようにTopLink Gridを構成する
Coherenceを分散共有キャッシュとして使用する
Coherenceのパラレル処理を使用してキャッシュされたエンティティに対してJava Persistence Query Language(JPQL)問合せを実行する
グリッドで実行されているCoherenceアプリケーションで、EclipseLink JPAに対して最適化されたキャッシュ・ストアおよびキャッシュ・ローダー・インタフェースを使用する
この章の内容は次のとおりです。
TopLink GridはTopLink JPA実装(EclipseLink)とOracle Coherenceとを統合するもので、2つの開発アプローチを提供します。
Coherence APIをTopLink Gridによって支援されたキャッシュとともに使用して、JPAに対して実装された特殊なキャッシュ・ローダーおよびキャッシュ・ストア・インタフェースでリレーショナル・データにアクセスできます。
この従来のCoherenceアプローチでは、TopLink GridはEclipseLink JPA用に最適化されたoracle.eclipselink.coherence.standalone
パッケージにCacheLoader
およびCacheStore
実装を提供します。この手法については、Oracle Coherence統合ガイドを参照してください。
JPAを使用してアプリケーションを構築し、データ・グリッドの機能を透過的に使用してスケーラビリティとパフォーマンスを向上させることができます。
このグリッド基盤のJPAアプローチでは、TopLink GridはEclipseLink JPAがCoherenceを使用する方法を制御できる一連のキャッシュおよび問合せ構成オプションを提供します。これらの実装は、oracle.eclipselink.coherence.integrated
パッケージ内にあります。詳細は、第2章「グリッド基盤のJPA構成」を参照してください。
EclipseLink Native Object Relational Mapping(ORM)フレームワークでアプリケーションを構築して、高度なデータベース固有機能、パフォーマンス・チューニングと管理のオプションなどの拡張機能を利用できます。
Native ORMアプローチは、グリッド基盤のJPAと非常によく似ていますが、キャッシュの使用方法を構成するために注釈を使用しません。かわりに、このアプローチは、適切なキャッシュ動作を定義する修正メソッドを採用します。詳細は、第3章「EclipseLink Native ORM構成」を参照してください。
JPAアプリケーションをCoherenceのデータ・グリッドと統合する際は、可能性のあるメリットと制限事項に注意してください。あらゆる可能性を理解するためには、グリッドの動作およびグリッドとJPA構成との関連性について理解する必要があります。
TopLink Grid構成オプションについては、次の各項を参照してください。
EclipseLinkには、デフォルトでEntityManagerFactory
管理の共有エンティティ・キャッシュが備わっています。この共有キャッシュにより、単一のJVM内で稼働する、Java EEサーバーがホストするマルチスレッド・アプリケーションのパフォーマンスを向上させることができます。
TopLink Gridを使用すると、デフォルトのEclipseLink共有(L2)キャッシュをCoherenceに置き換えることができます。これはグリッド・キャッシュ構成と呼ばれるTopLink Gridの基本構成です。この構成は、Coherenceデータ・グリッドを、Coherenceキャッシュにすべて事前ロードできないデータベースにホストされたデータに依存するJPAアプリケーションに適用します。クラスタ・ノード全体にわたって非常に大きな共有グリッド・キャッシュを定義できます。各共有キャッシュが調整されていることを確認するために特別な構成を追加する必要はありません。エンティティのグリッド・キャッシュ構成をCoherence内に定義することで、そのエンティティに対するEntityManager.find()
コールはすべて、関連付けられたCoherenceキャッシュに対するget
コールとなります。Coherenceキャッシュにオブジェクトが含まれていない場合は、データベースが問合せされます。
詳細は、「グリッド・キャッシュ構成」を参照してください。
グリッド・キャッシュ構成以外にも、読取り問合せをCoherenceに送るようTopLink Gridを構成できます。TopLink JPAキャッシュ・ローダーを構成すると、キャッシュ・ヒットがない場合でもオブジェクトをデータベースから読み取ってキャッシュに挿入できるため、以降の問合せでそのオブジェクトが使用可能になります。Coherenceでは、非常に多数のオブジェクトを管理することで、1つのクラスタ・メンバー内での読取り操作が他のメンバーに対してオブジェクトを即時利用可能にするため、キャッシュ・ヒットの確率が高くなります。
Coherenceを使用してエンティティ・キャッシュをグリッド全体に分散させることが効果的である一方で、非主キー問合せに対するサポートは特にメリットがあります。エンティティをグリッド読取り構成で構成すると、すべての読取り操作がCoherenceに送られます。JPQL問合せはCoherenceフィルタに自動的に変換され、フィルタに一致するオブジェクトがグリッドから取得されます。Coherenceは、すべてのフィルタを各クラスタ・メンバーでパラレルに実行します。したがって、すべてのオブジェクトが1つのメンバー内に存在する場合と比較すると、問合せの処理速度が大幅に速くなります。詳細は、「グリッド読取り構成」を参照してください。
フィルタはCoherenceキャッシュ内のオブジェクトにのみ適用されるため、キャッシュ・ストアまたはキャッシュ・ローダーの構成が非定型の問合せ処理に影響を与えることはありません。この構成では、デフォルトで問合せはデータベースに対して実行されません。ただし、oracle.eclipselink.coherence.integrated.querying.IgnoreDefaultRedirector
クラスを使用して問合せヒントを発行することにより、この動作をオーバーライドすることはできます。たとえば、次のヒントはCoherenceキャッシュではなくデータベースに問合せを送ります。
query.setHint(QueryHints.QUERY_REDIRECTOR, new IgnoreDefaultRedirector());
EclipseLink JPAの問合せのヒントの使用方法の詳細は、次のURLにあるEclipseLinkのドキュメントを参照してください。
別の主要な構成オプションは、データベースへのエンティティの書込み方法の指定です。次のいずれかを行うようにEclipseLinkを構成できます。
データベースにエンティティを直接書き込んでから、Coherenceに挿入します(これにより、データベース状態が反映されます)。詳細は、「グリッド・キャッシュ構成でのオブジェクトの書込み」および「グリッド読取り構成でのオブジェクトの書込み」を参照してください。
エンティティをCoherenceに挿入してから、Coherenceでキャッシュ・ストアを使用してデータベースへの書込みを行います。
グリッド・エンティティ構成とも呼ばれるキャッシュ・ストア・メソッドでは、非同期データベース書込み操作(データベースが戻るのを待たずにアプリケーションが処理を続行できることを意味します)を可能にするCoherenceのライトビハインド機能を使用できます。
ただし、この構成には、Java Transaction API(JTA)統合を使用できないなど、いくつかの制約があります。
詳細は、「グリッド・エンティティ構成」を参照してください。