Oracle TopLink Grid Coherenceの読取り構成

How-Toドキュメント

11 g(11.1.1.0.0)

 

2008年10月

このHow-Toドキュメントを読むと以下のことが可能になります。

  • Oracle TopLink GridでOracle Coherenceの読取り構成を使用する目的を理解する

  • Oracle TopLinkのJPAエンティティを構成して、すべての読取り問合せをCoherenceへ送る

  • TopLinkのJPAエンティティを構成して、データベースですべての書込み問合せを実行してからCoherenceのキャッシュを更新 する

1 ソフトウェア要件

2 はじめに

TopLink Coherenceの読取り構成は、(比較的安定した)大容量のデータへ高速アクセスする必要のあるエンティティで使用します。その際に、変更を同期的に データベースへ書き込む必要があります。 これらのエンティティでは通常、キャッシュ・ウォーミングを使用してCoherenceへのデータ入力をおこないますが、必要に応じて各問合せを直接デー タベースへ送ることもできます。

2.1 読取りオブジェクト

Coherenceの読取り構成では、エンティティの読取り問合せはすべてCoherenceのキャッシュへ送られます。 問合せの処理時間を削減するため、TopLink Gridは、データ・グリッド全体で問合せの並列処理をサポートします。 Coherenceにはオブジェクト形式のデータが含まれており、データベースとの通信やオブジェクト構築で発生するやり取りを削減します。

たとえば、主キーベースのJPQL問合せとともに EntityManager.find(主キーベース)を実行すると、 適切なCoherenceのキャッシュを取得できます。 任意のJPQL問合せ(動的または名前付きの問合せ)は関連するCoherenceのフィルタへ変換され、フィルタに適合するオブジェクトを取得するため に使用されます。

読取りは、Coherenceのキャッシュのオブジェクトのみに実行されます。そのため、 CacheLoaderの構成 は非定型の問合せ処理に影響を与えることはありません。つまり、データベースへの問合せはおこなわれません。 ただし、問合せ単位であれば、以下の例に示す oracle.eclipselink.coherence.integrated.querying.IgnoreDefaultRedirectorク ラスを使って、Coherenceではなくデータベースへ直接問合せを送ることも可能です。

query.setHint(QueryHints.QUERY_REDIRECTOR, new IgnoreDefaultRedirector());
            

データベース問合せで取得したすべてのオブジェクトは、次の問合せで利用できるようCoherenceに追加されます。 この構成はデフォルトで、Coherenceを介してエンティティのすべての問合せを解決します。そのため、Coherenceのキャッシュはすべての問 合せ対象のデータによってウォーミングする必要があります。

CacheStoreには、Coherenceの読取り構成との互換性はありません。これは、EclipseLinkが すべてのデータベース更新を実行し、更新オブジェクトをCoherenceへ伝播するからです。 CacheStoreを使 用すると、Coherenceは書き込まれたばかりのオブジェクトを再度書き込もうとしてしまいます。

2.2 書込みオブジェクト

Coherenceの読取り構成では、TopLinkがデータベースのすべての書込み(挿入、更新、削除)を実行します。 そのあと、Coherenceのキャッシュはデータベースへの変更を反映するよう更新されます。 TopLinkは、大量のデータを書き込む際にいくつかのパフォーマンス機能を提供します。 たとえばバッチの書込み、パラメータのバインド、ストアド・プロシージャのサポート、および文の命令があり、データベースの制約に合致することを保証しま す。

このアプローチは、2つの長所をいずれも生かすことができます。 1つはデータベースの更新が効率的に実行されること、 そしてもう1つはCoherenceのデータ・グリッド全体に対して問合せを並列実行できることです。後 者では、データベースに個々の問合せを直接送ることもできます。

3

エンティティは、 CoherenceReadカスタマイザを使ってCoherenceから読み取るよう構成できます。

import oracle.eclipselink.coherence.integrated.config.CoherenceReadCustomizer;
          
import org.eclipse.persistence.annotations.Customizer;

@Entity
@Customizer(CoherenceRead.class)
public class Employee {
...
}

次の例で、TopLink Coherenceの読取り構成を使用する方法を示します。

3.1 IDによるオブジェクトの問合せ

Coherenceから特定のID(キー)を使ってオブジェクトを取得する場合、 em.find(Entity.class, ID)を使用します。 ここでは、特定のIDをもった従業員を検索します。

private Employee employeeFind(EntityManager em, int id) {
            
Employee employee = null;
employee = em.find(Employee.class, id);
return employee;}

たとえば、 em.find(Employee.class, 8)8と いうキーをもったオブジェクトをCoherence Employeeのキャッシュから取得しま す。

キャッシュに指定されたIDが含まれていない場合は、データベースにオブジェクトがあるかを問い合わせるよう、Coherenceの CacheLoaderを 構成することもできます。

3.2 条件によるオブジェクトの問合せ

Coherenceから特定の選択条件に一致するオブジェクトを取得する場合、 em.createQuery("...")を 使用します。ここでは、特定の名前をもつ従業員を検索します。

private Employee employeeFind(EntityManager em, String name) {
            
Employee employee = null;
employee = (Employee)em.createQuery("select e from Employee e where e.name = :name").setParameter("name", name).getSingleResult();
return employee;
}

たとえば、 em.createQuery("select e from Employee e where e.name='John'")は、Coherenceの Employeeキャッ シュから Johnという 名前のオブジェクト を取得します。

3.3 オブジェクトの永続化

データベースにオブジェクトを挿入してからCoherenceキャッシュ内のオブジェクトと置き換えるには、 em.persist(Object)を 使用します。 ここでは、新しい従業員を追加します。

private void employeeAdd(EntityManager em, String name) {
            
Employee employee = new Employee(name);
em.getTransaction().begin();
em.persist(employee);
em.getTransaction().commit();
}

たとえば、サンプルの employeeAddメソッドをパラメータの John( employeeAdd(em, "John"))で呼び出すと、コミット時にTopLinkは INSERT文を実行し、データベースにオブジェ クトの Johnを追加します。 そのあと、Coherenceキャッシュ内にある主キー下でオブジェクトが置き換えられます。

3.4 オブジェクトの更新

データベースにオブジェクトを更新してからCoherenceキャッシュ内に更新オブジェクトを挿入するには、 em.merge(Object)を 使用します。 ここでは、特定のIDをもつ従業員を検索し、従業員の名前を変更します。

private void employeeRename(EntityManager em, int id, String newName) {
            
Employee employee = employeeFind(em, id);
if (employee != null) {
em.getTransaction().begin();
employee.setName(newName);
em.merge(employee);
em.getTransaction().commit();
}
}

たとえば、サンプルの employeeRename(em, 8, "John")メソッドを呼び出すと、 TopLinkは 8のIDをもつオブジェクトのためにデータベースに対してUPDATE文を実行 し、従業員の名前を Johnに変更します。 コミット・トランザクションが成功すると、更新されたオブジェクトはCoherenceキャッシュ内にある主キー下にて、古いオブジェクトと置き換えられ ます。

4 まとめ

一般的に、TopLink Coherenceの読取り構成は以下のようにまとめられます。

  • 読取り操作でCoherenceのキャッシュからオブジェクトを取得する。

  • TopLinkがデータベースへの書込み操作を実行する。 コミットに成功すると、Coherenceのキャッシュは変更を反映させる形で更新される。

  • オブジェクトがCoherence内にない場合は、 CacheLoaderを使用してデータベースに対する主 キーの問合せを解決できる。

  • CacheStoreにはこの構成との互換性がなく、すべての書込みはTopLinkが実行する。

この機能のおもなクラスは、 oracle.eclipselink.coherence.integrated.config.CoherenceReadCustomizerパッ ケージ内にあります。

そのほかの重要なクラスは、 org.eclipse.persistence.annotations.Customizerで す。

5 ドキュメント・アクセシビリティ

オラクルは、製品、サービス、およびサポート・ドキュメントを障害のあるお客様にも簡単に使用していただくことを目標にしています。 そのため、当社のドキュメントには、アシスティブ・テクノロジーを使用するお客様に情報を提供する機能が含まれています。 このドキュメントは、HTML形式で提供されており、障害のあるお客様が簡単にアクセスできるためのマークアップが含まれています。 アクセシビリティの標準は進化し続けており、オラクルは当社のドキュメントをすべてのお客様が利用できるように、市場をリードするほかの技術ベンダーと積 極的に関与して技術的な問題に対処しています。 詳しくは、Oracle Accessibility ProgramのWebサイト http://www.oracle.com/accessibility/ を 参照してください。

ドキュメント内のサンプル・コードのアクセシビリティ

スクリーン・リーダーは、ドキュメント内のサンプル・コードを常に正しく読み取るとは限りません。 コード表記規則では、右中括弧は別の空の行へ記す必要があります。ただし、スクリーン・リーダーによっては、括弧または中括弧のみを含むテキスト行を読み 取らない場合があります。

ドキュメント内の外部Webサイトへのリンクのアクセシビリティ

このドキュメントには、オラクルが所有または管理しないほかの企業または組織のWebサイトへのリンクが含まれる場合があります。 オラクルは、それらのWebサイトのアクセシビリティに関する評価や言及はおこないません。

Oracleサポート・サービスへのTTYアクセス

オラクルは、米国内では年中無休で24時間、Oracleサポート・サービスへのテキスト電話(TTY)アクセスを提供しています。 TTYサポートへは、800-446-2398へお電話ください。米国外からは、+1-407-458-2479へお電話ください。


Oracle TopLink How-Toドキュメント、11g (11.1.1.0.0)

Copyright © 2007, 2008 Oracle. All rights reserved.

このプログラム(ソフトウェアおよびドキュメントを含む)には、オラクル社およびその関連会社に所有権のある情報が含まれています。このプログラム の使用または開示は、オラクル社およびその関連会社との契約に記された制約条件に従うものとします。著作権、特許権およびそのほかの知的財産権と工業所有 権に関する法律により保護されています。 独立して作成されたほかのソフトウェアとの互換性を得るために必要な場合、もしくは法律によって規定される場合を除き、このプログラムのリバース・エンジ ニアリング、逆アセンブル、逆コンパイル等は禁止されています。

本文書に記載された内容は、予告なく変更されることがあります。 本文書内に問題が見つかった場合は、書面にて報告してください。 オラクル社およびその関連会社は、本文書に一切間違いがないことを保証するものではありません。 これらのプログラムのライセンス契約において明確に許諾されている場合を除いて、いかなる形式、手段(電子的または機械的)、目的のためにも、これらのプ ログラムを複製または転用することはできません。

このプログラムがアメリカ政府またはプログラムのライセンスを受け、使用するアメリカ政府の代理人に提供される場合は、以下の注意事項を適用しま す。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial Computer Software--Restricted Rights (June 1987). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このプログラムは、核、航空産業、大量輸送、医療あるいはそのほかの危険が伴うアプリケーションへの用途を目的としておりません。 このプログラムをかかる目的で使用する際、上述のアプリケーションを安全に使用するために、適切な安全装置、バックアップ、冗長性 (redundancy)、そのほかの対策を講じることはライセンシーの責任となります。万一かかるプログラムの使用に起因して損害が発生いたしまして も、オラクル社およびその関連会社は一切責任を負いかねます。

Oracle、JD Edwards、PeopleSoft、およびSiebelは、米国Oracle Corporationおよびその子会社、関連会社の登録商標です。 ほかの製品名は、それぞれの所有者の商標です。

このプログラムは、第三者のWebサイトへリンクし、第三者のコンテンツ、製品、サービスへアクセスすることがあります。 オラクル社およびその関連会社は第三者のWebサイトで提供されるコンテンツについては、一切の責任を負いかねます。 当該コンテンツの利用は、お客様の責任になります。 第三者の製品またはサービスを購入する場合は、第三者と直接の取引となります。 オラクル社およびその関連会社は、 (a)第三者の製品およびサービスの品質、(b)購入製品またはサービスに関連する第三者との契約のいかなる条項の履行(製品またはサービスの提供、保証 義務を含む)に関しても責任を負いかねます。 また、第三者との取引により損失や損害が発生いたしましても、オラクル社およびその関連会社は一切の責任を負いかねます。