Oracle TopLink Grid: Oracle Coherenceの読取り/書込み構成

How-Toドキュメント

11g (11.1.1.0.0)

 

2008年9月

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

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

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

  • 標準のCoherence CacheStore構成を用いて、TopLink JPAエンティティをデータベースに対して永続化する(オプション)

2 はじめに

TopLink Coherenceの読取り/書込み構成は、(比較的安定した)大容量のデータへ高速アクセスし、更新を頻繁におこなわないアプリケーションで使用しま す。 この構成はライトビハインド機能を利用してCoherence CacheStoreと組み合わせることができます。 これにより、データベースの更新が同期的に実行され、アプリケーションのレスポンス時間が改善されます。

2.1 読取りオブジェクト

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

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

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

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

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

2.2 書込みオブジェクト

Coherenceの読取り/書込み構成では、 EntityManagerを介して永続化または統合されたオブジェクト はすべて適切なCoherenceのキャッシュ内に格納されます。 Coherenceのキャッシュ内のオブジェクトをデータベースに永続化させる場合は、各キャッシュに対してEclipseLink CacheStoreoracle.eclipselink.coherence.integrated.EclipseLinkJPACacheStore) を構成する必要があります。

"ライトビハインド"を使って非同期的に更新オブジェクトをバッチ書込みするよう、CacheStoreを構成することもできます。 詳しくは、『 Coherence User Guide 』を参照してください。


注:

CacheStoreを使用すると、TopLinkはすべての書込み操作が成功したという前提で動作します。 Coherenceやサード・パーティのアプリケーションによってデータベースが同時に修正された場合、データが破損しないよう保護する機能としてコミッ ト時ロックを使用することはできません。

3

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

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

@Entity
@Customizer(CoherenceReadWrite.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ま たは CacheStoreを構成することもできます。

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

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

private Employee employeeFind(EntityManager em, String name) {
            
Employee employee = null;
employee = (Employee)em.createQuery("select p from Employee p where p.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)を使用しま す。 コミット時に、TopLinkは主キー下でCoherenceのキャッシュ内のオブジェクトを置き換えます。 ここでは、新しい従業員を追加します。

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

たとえば、サンプルの employeeAddメソッドをパラメータの JohnemployeeAdd(em, "John"))で呼び出すと、コミット時にTopLinkは主キー下で新規Employeeオブジェクトの Johnを追加します。

CacheStoreEmployeeクラス向けに構成されて いる場合、TopLinkは INSERT文を実行してデータベースにオブジェクトを追加します。

3.4 オブジェクトの更新

オブジェクトを更新するには、Java Persistence APIを使用します。 トランザクションでは、エンティティに対して問合せや修正をおこなうか、分離されたエンティティ同士をマージできます。 トランザクションをコミットすると変更が適用され、Coherence内に更新オブジェクトが挿入されます。

この例では分離された従業員の名前を変更し、永続化コンテンツへ戻して統合します(ここでは簡潔を優先してエラー・チェックは省略します)。 トランザクションがコミットされると、Coherenceは更新されます。

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

この例では、管理された従業員の名前を変更しました(ここでも同様に簡潔さを優先してエラー・チェックは省略します)。 トランザクションがコミットされると、Coherenceは更新されます。

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

たとえば、サンプルの employeeRename(em, 8, "John")メソッドでいずれかを呼び出すと、 TopLinkは主キー下でCoherenceのキャッシュ内に更新オブジェクトを挿入し、古いオブジェクトと置き換えます。

CacheStoreEmployeeクラス向けに構成されて いる場合、TopLinkは UPDATE文を実行してデータベースにオブジェクトを追加します。

4 まとめ

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

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

  • このほか、 CacheLoaderまたは CacheStoreが構成されているとき は、データベースに対して主キー問合せを実行する必要がある。

  • 書込み操作は、Coherenceのキャッシュ内にオブジェクトを挿入する。 CacheStoreが構成さ れている場合、TopLinkはデータベースへの書込み操作を実行する。

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

そのほかの重要なクラスは、 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)購入製品またはサービスに関連する第三者との契約のいかなる条項の履行(製品またはサービスの提供、保証 義務を含む)に関しても責任を負いかねます。 また、第三者との取引により損失や損害が発生いたしましても、オラクル社およびその関連会社は一切の責任を負いかねます。