プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceの統合
12c (12.2.1.3.0)
E90216-02
目次へ移動
目次

前
次

2 Oracle Coherence GoldenGate HotCacheとの統合

Coherenceキャッシュを使用するアプリケーションは、Oracle Coherence GoldenGate HotCache (HotCache)統合を活用して、データベースへの外部変更をCoherenceキャッシュ内のオブジェクトに伝播させることができます。
Oracle GoldenGateの詳細は、このドキュメントでは述べません。GoldenGateを初めて使用する場合は、次を参照してください。
  • 『Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成』の「Oracle GoldenGateのインストール」

  • 「Oracle GoldenGateアプリケーション・アダプタのインストール」

  • 『Application Adapters Oracle GoldenGateアダプタの管理』の「Oracle GoldenGateアダプタの理解」

注意:

HotCacheを使用するには、Oracle GoldenGateおよびCoherence Grid Editionのライセンスが必要です。HotCacheは、Oracle GoldenGate for Big Data 12c (12.3.1.1.0以上)およびOracle GoldenGate 11gR1、11gR2および12cのリリースで使用できます。

この章の内容は次のとおりです。

2.1 Oracle Coherence GoldenGate HotCacheの概要

データベースに対するサード・パーティの更新により、Coherenceアプリケーションで、最新でない失効した可能性のあるデータが使用されることがあります。HotCacheは、データベースをモニタリングし、変更をCoherenceキャッシュにプッシュすることでこの問題を解決します。HotCacheには、失効したデータのみを処理する効率的なプッシュ・モデルが採用されています。データベースに変更が行われる際にデータがプッシュされるため、待機時間の短さが保証されます。

HotCacheは、どのようなCoherenceアプリケーションにも追加できます。データベース・データからJavaオブジェクトへのマッピングの取得には標準JPAが使用されます。構成は、XMLのみで取得することも、注釈を使用したXMLで取得することできます。

次のシナリオは、HotCacheをデータベースと連動して使用する方法、およびCoherenceキャッシュを使用するアプリケーションと連動するように使用する方法を示しています。図2-1にこのシナリオを示します。

  1. GoldenGateを起動します。『Application Adapters Oracle GoldenGateアダプタの管理』のアプリケーションの起動に関する項を参照してください。GoldenGateによって、目的の変更に対するトランザクション・ログがモニターされます。これらの変更内容は追跡ファイルに格納されます。

  2. 必要に応じてCoherenceキャッシュ・サーバーを起動し、キャッシュをウォーミングします。

  3. HotCacheを起動して、追跡ファイル内の変更内容をキャッシュに伝播できるようにします。キャッシュのウォーミング中に変更が発生した場合は、変更内容が消失しないように、HotCacheが起動するとその変更が即時にキャッシュに適用されます。

  4. アプリケーション・クライアントを起動します。その操作の一部として、アプリケーションによってキャッシュに対する問合せが繰り返し実行されることを想定します。

  5. サード・パーティ・アプリケーションによって、データベースの直接更新が実行されます。

  6. GoldenGateによってデータベースの変更が検出され、それがHotCacheによってCoherenceキャッシュに伝播されます。

  7. アプリケーション・クライアントによって、キャッシュ内の変更が検出されます。

図2-1 HotCacheによるキャッシュへのデータベース変更の伝播方法

図2-1の説明が続きます
「図2-1 HotCacheによるキャッシュへのデータベース変更の伝播方法」の説明

2.2 HotCacheの仕組み

HotCacheソリューションを実装する前に、ある程度時間をかけてHotCacheの基本およびサポートされている機能を理解してください。

この項には次のトピックが含まれます:

2.2.1 HotCacheの仕組みの概要

HotCacheは、GoldenGateから配信されるデータベース変更イベントを処理し、それらの変更をCoherenceキャッシュ内の影響を受けるオブジェクトにマップします。これは、Java Persistence API (JPA)マッピング・メタデータを使用することで実行できます。JPAは、Javaにおけるオブジェクト・リレーショナル・マッピングのJava標準であり、リレーショナル表にJavaオブジェクトがどのようにマップされるのかを示す一連の注釈(および対応するXML)を定義します。例2-1に示すように、Employeeクラスのインスタンスは、次の注釈を使用することでEMPLOYEE表の行にマップできます。

例2-1 JavaコードによるEmployeeクラスのインスタンスの行へのマッピング

@Entity
@Table(name="EMPLOYEE")
Public class Employee {
   @Id
   @Column(name="ID")
   private int id;
   @Column(name="FIRSTNAME")
   private String firstName;
…
}

@Entity注釈はEmployeeクラスを永続としてマークし、@Id注釈は主キーを含んでいるとしてidフィールドを識別します。Coherenceのキャッシュ・オブジェクトの場合、@Idフィールドには、キャッシュされるオブジェクトが属するキーの値も含まれている必要があります。@Tableおよび@Column注釈は、指定した表とクラス、および指定した列とフィールドをそれぞれ関連付けます。

簡単にするため、JPAではtable name=class namecolumn name=field nameなど、いくつかのデフォルト・マッピングが想定されており、多くの場合、マッピングを指定する必要があるのはそのデフォルトが適切でない場合のみです。例2-1では表とフィールドの両方の名前がJavaでの名前と一致しているため、例2-2に示すように、@Table@Columnを削除してコードを短くできます。

例2-2 Employeeクラスのインスタンスを行にマッピングする単純化したJavaコード

@Entity
Public class Employee {
   @Id
   private int id;
   private String firstName;
…
}

前述のJavaコードの例はXMLでも表現できます。例2-1のJavaコードに相当するXMLを例2-3に示します。

例2-3 XMLによるEmployeeクラスのインスタンスの行へのマッピング

<entity class="Employee">
       <table name="EMPLOYEE"/>
            <attributes>
                <id name="id">
                    <column name="ID"/>
                </id>
                <basic name="firstName"/>
                    <column name="FIRSTNAME"/>
                </basic>
                ...
        </attributes>
</entity>

同様に、例2-2の単純化したJavaコードに相当するXMLを例2-4に示します。

例2-4 Employeeクラスのインスタンスを行にマッピングする単純化したXML

<entity class="Employee">
       <attributes>
            <id name="id"/>
            <basic name="firstName"/>
             ...
        </attributes>
</entity>

2.2.2 GoldenGate JavaアダプタによるJPAマッピング・メタデータの使用方法

JPAマッピング・メタデータは、オブジェクトからリレーショナルへのマッピングを提供しますが、HotCacheで使用できるリレーショナルからオブジェクトへの逆マッピングも提供します。Employeeの例で、EMPLOYEE表の行のFIRSTNAME列への更新を考えてみましょう。図2-2は、Johnという名前が従業員IDの1と関連付けられている更新前のEMPLOYEE表と、Bobという名前が従業員IDの1と関連付けられている更新後のEMPLOYEE表を示しています。

図2-2 更新前および更新後のEMPLOYEE表

図2-2の説明が続きます
「図2-2 更新前および更新後のEMPLOYEE表」の説明

GoldenGateによってEMPLOYEE表に対する変更がモニタリングされており、HotCacheが適切な追跡ファイルで構成されている場合、アダプタによって、主キー1を持つEMPLOYEE行のFIRSTNAME列がBobに変更されたことを示すイベントが処理されます。アダプタは、JPAマッピング・メタデータを使用して、最初にEMPLOYEE表に関連付けられているクラスEmployeeを識別し、次にEmployeeのIDフィールドと関連付けられている列IDを判別します。この情報を使用して、アダプタは変更イベントからそのID列値を抽出し、そのID列値でキャッシュされているEmployeefirstNameフィールド(FIRSTNAME列と関連付けられた)を更新できます。

2.2.3 サポートされているデータベース操作

GoldenGate Javaアダプタでは、データベースのINSERTUPDATEおよびDELETE操作がサポートされています。マップされた表にINSERT操作を実行すると、関連付けられたクラスの新しいインスタンスが追加され、新たに挿入された行のデータが移入されます。UPDATE操作で適用される変更内容は、対応するキャッシュ・オブジェクトに伝播されます。更新された行に対応するオブジェクトがキャッシュに含まれていなければ、デフォルトではキャッシュは変更されません。デフォルトの動作を変更するには、HonorRedundantInsertプロパティを参照してください。DELETE操作を実行すると、対応するオブジェクトがキャッシュに存在する場合はキャッシュから削除されます。

2.2.4 JPA関係サポート

HotCacheでは、1対1、1対多、多対1および多対多のJPA関係マッピングはサポートされません。ただし、HotCacheではJPA埋込み可能クラスおよびJPA要素コレクションはサポートされます。埋込み可能クラスおよび要素コレクションをHotCacheで使用して、ドメイン・オブジェクト間の関係をモデル化できます。HotCacheで使用されるドメイン・オブジェクトは、識別子(リレーショナル・データベースの外部キーと類似)によって相互に参照できる場合もあります。

パフォーマンス最適化として、HotCacheでJPA要素コレクションを使用するときは、親表に対する外部キーである要素コレクション表の列を指定してADD TRANDATAコマンドでGoldenGateを構成することをお薦めします。要素コレクション表の行が変更されたときに更新するキャッシュ・エントリを、最適化によりHotCacheが効率的に検出できます。

2.3 前提条件

Oracle Coherence GoldenGate HotCacheを使用する前に、前提条件を満たしていることを確認してください。ここでの説明は、データベースがGoldenGateを使用するように設定されていることを前提としています。

データベースの設定には次のものが含まれます。

  • データベースおよび表の作成

  • ユーザー権限の付与

  • ロギングの有効化

  • 表およびデータのプロビジョニング

例2-5に、csdemoというユーザーを作成し、データベースに対するユーザー権限を付与するOracle Databaseのサンプル・コマンドのリストを示します。

ALTER DATABASE ADD SUPPLEMENTAL LOG DATAコマンドに注意してください。サプリメンタル・ロギングを有効にすると、すべての列が追加のロギング対象として指定されます。少なくとも、どのようなチェンジ・データ・キャプチャのソース・データベースに対しても、最小データベース・レベルのサプリメンタル・ロギングを有効にする必要があります。データベース表の主キー列の値が変更する可能性がある場合、Oracle Databaseに次のコマンドを含むことが重要です: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;およびALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;

例2-5 ユーザーの作成、権限の付与およびロギングの有効化を実行するサンプル・コマンド

CREATE USER csdemo IDENTIFIED BY csdemo;
GRANT DBA TO csdemo;
grant alter session to csdemo;
grant create session to csdemo;
grant flashback any table to csdemo;
grant select any dictionary to csdemo;
grant select any table to csdemo;
grant select any transaction to csdemo;
grant unlimited tablespace to csdemo;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

また、ここでの説明は、Oracle GoldenGateがインストールされ、マネージャが起動されていることを前提としています。これには、次の作業が含まれます。

  • Oracle GoldenGateのダウンロードおよびインストール

  • ggsciの実行によるGoldenGateサブディレクトリの作成

  • マネージャ・パラメータ(mgr.prm)ファイルの作成、リスナー・ポートの指定

  • ライブラリ・パスへのJVMライブラリの追加

  • マネージャの起動

これらのタスクの詳細は、このドキュメントでは述べません。『Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成』の「Oracle GoldenGateのインストール」、『Application Adapters Oracle GoldenGateアダプタの管理』のOracle GoldenGateアプリケーション・アダプタのインストールに関する項および「Oracle GoldenGateアダプタの理解」を参照してください。

注意:

Oracle GoldenGateアプリケーション・アダプタのインストール時には、Oracle GoldenGateの汎用ビルドを使用することが重要です。Oracle GoldenGateの非汎用のインスタンスは使用しないでください。

2.4 GoldenGateの構成

GoldenGateの証跡ファイルからキャッシュを更新するには、GoldenGateおよびHotCacheを構成する必要があります。その後、GoldenGate Javaアダプタを構成することでHotCacheを有効にします。

この項には次のトピックが含まれます:

2.4.1 表の変更のモニター

ADD TRANDATAコマンドを使用して変更をモニターする必要がある表を指定します。ADD TRANDATAコマンドは、コマンド行で、またはggsciスクリプトの一部として使用できます。たとえば、csdemoスキーマの表への変更をモニターするには、次のコマンドを使用します。

ADD TRANDATA csdemo.*

例2-6に、cs-cap.ggsciというggsciスクリプトのサンプルを示します。

  • スクリプトがマネージャを起動してデータベースにログインします。cs-capという実行中の抽出を停止して削除します。

  • ADD TRANDATAコマンドで抽出を指示し、csdemo*という表に対する変更をモニターします。

  • SHELLコマンドでdirdatディレクトリのすべての追跡ファイルを削除し、抽出が再作成された場合に古い追跡ファイルが残存しないようにします。rm -fコマンドはプラットフォーム固有です。dirprm/cs-cap.prmファイルからパラメータを使用して、cs-capという抽出が作成されます。追跡はcs-cap抽出ファイルからdirdat/csに追加されます。

  • startコマンドでcs-cap.ggsciスクリプトが開始します。

  • ADD EXTRACTコマンドはcs-cap.prmファイルをパラメータのソースとして自動的に使用するため、PARAMS dirprm/cs-cap.prm文は必要ありません。

例2-6 表の変更をモニターするGoldenGate Javaアダプタggsciスクリプトのサンプル

start mgr
DBLOGIN USERID csdemo, PASSWORD csdemo
STOP EXTRACT cs-cap
DELETE EXTRACT cs-cap
ADD TRANDATA csdemo.*
ADD EXTRACT cs-cap, tranlog, begin now
SHELL rm -f dirdat/cs*
ADD EXTTRAIL dirdat/cs, EXTRACT cs-cap
start cs-cap

2.4.2 現在のユーザーが実行した変更のフィルタ処理

Coherence CacheStoresにログインしているユーザーが行った変更が無視されるようにGoldenGateを構成します。これにより、Coherenceによってデータベースに適用された、キャッシュにすでに存在する変更の処理が回避されます。

TranLogOptions excludeUSERコマンドは、コマンド行で、またはggsciスクリプト内で使用できます。たとえば、次のコマンドはcsdemoでログインしたCoherence CacheStoreユーザーが行ったデータベース表への変更を無視するようにGoldenGate抽出プロセスに指示します。

TranLogOptions excludeUser csdemo 

例2-7に、cs-cap.prmという抽出の.prmファイルのサンプルを示します。Coherence CacheStoreにログインしているユーザーはcsdemoです。recoveryOptions OverwriteMode行は、新しいデータを追加せずに、既存のトランザクション・データを最後の書込みチェックポイント位置の後に上書きすることを示します。EXTRAILパラメータで、追跡がdirdat/csであることが識別されます。BR BROFFパラメータは、Bounded Recovery (BR)機能を制御します。BROFF値は、実行とリカバリに対してBounded Recoveryをオフにします。GETUPDATEBEFORESパラメータは、更新された列の更新前のイメージがOracle GoldenGateで処理されるレコードに格納されることを示します。TABLEパラメータで、変更をモニターする表がcsdemo.*であることが識別されます。TranLogOptions excludeUSERパラメータは、csdemoでログインしたCoherence CacheStoreユーザーが行った表への変更がGoldenGateで無視されることを示します。

注意:

OverwriteModeオプションは、Oracle GoldenGate for Big Dataには適用されません。

例2-7 GoldenGate Javaアダプタ用の抽出の.prmファイルのサンプル

EXTRACT cs-cap
USERID csdemo, PASSWORD csdemo
RecoveryOptions OverwriteMode
EXTTRAIL dirdat/cs
BR BROFF
getUpdateBefores
TABLE csdemo.*;
TranLogOptions excludeUser csdemo --ignore changes made by csuser

2.5 HotCacheの構成

HotCacheは、システム・プロパティ、EclipseLink JPAマッピング・メタデータおよびJPA persistence.xmlファイルで構成されます。「HotCacheの仕組み」を参照してください。HotCacheからCoherenceクラスタへの接続はCoherence*Extend (TCP)を使用して実行でき、またはHotCache JVMはCoherenceクラスタをメンバーとして結合できます。

次の項では、HotCacheの構成に必要なプロパティと、Coherence*Extendとの接続について説明します。

2.5.1 GoldenGate for Javaのプロパティでのプロパティ・ファイルの作成

ファイル名の拡張子が.propertiesのテキスト・ファイルを作成します。ファイルにHotCacheの構成を入力します。最低限の構成には、イベント・ハンドラのリストおよびイベント・ハンドラの完全修飾Javaクラスが含まれている必要があります。

注意:

.propertiesファイルへのパスは、.prmファイル内のHotCache ReplicatのTARGETDBパラメータに、たとえば、次のように設定する必要があります。

TARGETDB LIBFILE libggjava.so SET property=/home/oracle/gg/hotcache.properties

「HotCache Replicatのパラメータ・ファイルの編集」を参照してください。

例2-8に、HotCacheプロジェクトについて最低限の構成が格納された.propertiesファイルを示します。ファイルでは、次のプロパティが使用されています。

  • gg.handlerlist=hotcache

    gg.handlerlistプロパティには、アクティブなハンドラのカンマ区切りリストを指定します。この例では、論理名hotcacheをデータベース変更イベント・ハンドラとして定義しています。ハンドラ名はユーザーが定義できますが、gg.handler.{name}.typeプロパティで使用する名前と一致する必要があります。

  • gg.handler.hotcache.type=[oracle.toplink.goldengate.CoherenceAdapter|oracle.toplink.goldengate.CoherenceAdapter1220]

    gg.handler.{name}.typeプロパティには、HotCacheのハンドラを定義します。{name}フィールドは、gg.handlerlistプロパティにリストされているイベント・ハンドラ名で置換する必要があります。HotCacheに対して設定できる唯一のハンドラはoracle.toplink.goldengate.CoherenceAdapterまたはoracle.toplink.goldengate.CoherenceAdapter1220です。GoldenGate Applicationアダプタ・リリース12.2.0以上ではoracle.toplink.goldengate.CoherenceAdapter1220を使用します。GoldenGate Applicationアダプタ・リリース12.2.0より前では oracle.toplink.goldengate.CoherenceAdapterを使用します。

その他の様々なプロパティを使用して、GoldenGate Javaアダプタの動作を制御できます。『Oracle GoldenGate Application Adapters Oracle GoldenGateアダプタの管理』のOracle GoldenGateアプリケーション・アダプタのプロパティの使用に関する項を参照してください。

例2-8 HotCacheプロジェクトの.propertiesファイル

# ====================================================================
# List of active event handlers
# ====================================================================
gg.handlerlist=hotcache

# ====================================================================
# HotCache event handler
# ====================================================================
gg.handler.hotcache.type=oracle.toplink.goldengate.CoherenceAdapter1220

# ======================================
# JVM boot options
# ======================================
jvm.bootoptions=-Xms32M -Xmx32M -Djava.class.path=dirprm:ggjava/ggjava.jar:/u01/app/oracle/product/12.1.0/dbhome_1/jdbc/lib/ojdbc6.jar:/u01/Oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar:/u01/Oracle/Middleware/Oracle_Home/coherence/lib/coherence-hotcache.jar:/u01/Oracle/Middleware/Oracle_Home/oracle_common/modules/javax.persistence.jar:/u01/Oracle/Middleware/Oracle_Home/oracle_common/modules/oracle.toplink/eclipselink.jar:/u01/Oracle/Middleware/Oracle_Home/oracle_common/modules/oracle.toplink/toplink-grid.jar:/home/oracle/cgga/workspace/CacheStoreDemo/bin -Dcoherence.cacheconfig=/home/oracle/cgga/workspace/CacheStoreDemo/client-cache-config.xml -Dcoherence.distributed.localstorage=false -Dtoplink.goldengate.persistence-unit=employee

2.5.2 プロパティ・ファイルへのJVMブート・オプションの追加

この項では.propertiesファイルのJVMブート・オプションのセクションに指定する必要のあるプロパティについて説明します。これらのオプションはjvm.bootoptionsプロパティを使用して定義します。jvm.bootoptionsのサンプル・リストは、例2-8JVM boot optionsセクションに記載されています。

この項には次のトピックが含まれます:

2.5.2.1 Javaクラスパス・ファイル

次のリストは、Javaクラスパスに含める必要があるディレクトリおよびJARファイルです。ディレクトリおよびJARファイルはjava.class.pathプロパティで定義します。

  • dirprm: GoldenGateのdirprmディレクトリ

  • ggjava.jar: GoldenGate Javaアダプタ・ライブラリが含まれています

  • ojdbc6.jar: ソース・データベース用のJDBCドライバ・クラスが含まれています

  • coherence.jar: Oracle Coherenceライブラリが含まれています

  • coherence-hotcache.jar: Oracle Coherence GoldenGate HotCacheライブラリが含まれています

  • javax.persistence.jar – Java永続ライブラリが含まれています

  • eclipselink.jar: EclipseLinkライブラリが含まれています

  • toplink-grid.jar: HotCacheで必要なOracle TopLinkライブラリが含まれています

  • ドメイン・クラス: Coherenceにキャッシュされているユーザー・クラスを含むJARファイルまたはディレクトリ。HotCacheで使用するためにJPAにマップされています。Coherence構成ファイル、persistence.xmlファイルおよびorm.xmlファイルも同様。

2.5.2.2 HotCache関連プロパティ

toplink.goldengate.persistence-unitプロパティは必須で、HotCacheがロードするpersistence.xmlファイルに定義された永続性ユニットを識別します。永続性ユニットには、関与しているドメイン・クラスのリスト、構成オプション、データベース接続情報(必要な場合)などの情報が含まれています。

toplink.goldengate.on-errorプロパティはオプションです。変更イベントの処理時に、アダプタがエラーに応答する方法を制御します。このレスポンスは、予想されるオプティミスティック・ロック例外と予期しない例外の両方に適用されます。このプロパティはオプションで、デフォルトでは「Refresh」の値に設定されます。Refreshを指定すると、アダプタでは、データベースからの指定行の最新データの読取りと、キャッシュ内の対応するオブジェクトの更新が試行されます。Refreshでは、データベース接続がpersistence.xmlファイルに指定されている必要があります。この接続はHotCacheの初期化中に確立されます。接続できない場合は、例外がスローされ、HotCacheの起動は失敗となります。

その他のエラー時戦略にはデータベース接続は必要ありません。次のものがあります。

  • Ignore - 例外のみをログに記録します。キャッシュに古いデータが残存する可能性があります。アプリケーションの要件およびキャッシュ・エビクション・ポリシーに応じて許容します。

  • Evict - 警告をログに記録し、変更データベース行に対応するオブジェクトをキャッシュから排出します。

  • Fail - 例外をスローしてHotCacheを終了します。

2.5.2.3 Coherence関連プロパティ

Java boot optionsでは、Coherenceの任意のプロパティをシステム・プロパティとして指定できます。falseの値のcoherence.distributed.localstorageシステム・プロパティは、Java boot optionsで渡す必要がある唯一のCoherenceプロパティです。Coherenceのすべてのプロパティと同様に、jvm.bootoptions文ではプロパティ名に-D接頭辞を付けます。次に例を示します。

-Dcoherence.distributed.localstorage=false

2.5.2.4 ロギング・プロパティ

HotCacheに対して次のロギング・プロパティを定義できます。

-Dlog4j.configuration=default-log4j.propertiesプロパティはデフォルトのLog4J構成ファイルを指定します。プロパティの例は、$GOLDEN_GATE_HOME/ggjava/resources/classes/ディレクトリにあります。これらを既存のLog4J構成にマージできます。

GoldenGate for Javaに付属のLog4Jプロパティ・ファイルはデモ専用です。ファイルをそのまま使用することも、内容を既存のLog4Jプロパティにマージすることもできます。

ファイルをそのまま使用する場合は、dirprmディレクトリにコピーして新しい名前を指定し、-Dlog4j.configurationプロパティで指定します。たとえば、次の行はdirprmディレクトリにあるユーザー定義のmy-log4j.propertiesファイル(dirprmディレクトリはクラスパスにすでに指定済)を指定します。

-Dlog4j.configuration=my-log4j.properties

現在の位置でデフォルトのプロパティ・ファイルを使用すると、アップグレード時に問題が発生する可能性があります。変更内容は新しい配布のインストール時に消失します。

HotCacheで警告を記録できるようにするには、プロパティ・ファイルに次の行を追加します。

log4j.logger.oracle.toplink.goldengate=WARN, stdout, rolling
 

HotCacheでエラーを記録できるようにするには、使用するプロパティ・ファイルに次の行を追加します。

-Dlog4j.logger.oracle.toplink.goldengate=DEBUG, stdout, rolling

注意:

Coherence Log4J構成は、GoldenGate Log4J構成と共存できます。どちらもjvm.bootoptionsパスで構成される同じファイルに含めることができます。

2.5.3 Coherence*Extend接続情報の指定

HotCacheとCoherenceクラスタ間は、Coherence*Extendで接続されます。Coherence*Extendの詳細は、Oracle Coherenceリモート・クライアントの開発を参照してください。

Coherenceの構成ファイルは.propertiesファイルのjvm.bootoptions=-Djava.class.path= ...エントリで指定されたディレクトリに存在する必要があります。1つの例として、例2-8jvm.bootoptionsエントリを参照してください。

例2-9に、Coherenceクラスタへの接続にCoherence*Extendを使用するクライアント・キャッシュ構成ファイルのセクションを示します。クライアント・キャッシュ構成ファイルでは、Coherence*Extendは<remote-cache-scheme>セクションで構成されます。デフォルトでは、Coherence*Extendの接続ポートは9099です。

例2-9 クライアント・キャッシュ構成ファイルのCoherence*Extendセクション

<cache-config>
 ...
   <caching-schemes>
      <remote-cache-scheme>
         <scheme-name>CustomRemoteCacheScheme</scheme-name>
         <service-name>CustomExtendTcpCacheService</service-name>
         <initiator-config>
            <tcp-initiator>
               <remote-addresses>
                  <socket-address>
                     <address>localhost</address>
                     <port>9099</port>
                  </socket-address>
               </remote-addresses>
            </tcp-initiator>
            <outgoing-message-handler>
             ...
            </outgoing-message-handler>
         </initiator-config>
      </remote-cache-scheme>
 ...
</cache-config>

例2-10に、Coherence*Extend接続をリスニングするサーバー・キャッシュ構成ファイルのセクションを示します。サーバー・キャッシュ構成ファイルでは、Coherence*Extendは<proxy-scheme>セクションで構成されます。デフォルトでは、Coherence*Extendのリスナー・ポートは9099です。

例2-10 サーバー・キャッシュ構成ファイルのCoherence*Extendセクション

<cache-config>
   ...
   <caching-schemes>
    ... 
      <proxy-scheme>
         <scheme-name>CustomProxyScheme</scheme-name>
         <service-name>CustomProxyService</service-name>
         <thread-count>2</thread-count>
         <acceptor-config>
            <tcp-acceptor>
               <local-address>
                  <address>localhost</address>
                  <port>9099</port>
               </local-address>
            </tcp-acceptor>
         </acceptor-config>
         <load-balancer>proxy</load-balancer>
         <autostart>true</autostart>
      </proxy-scheme>
 
   </caching-schemes>
</cache-config>

2.6 GoldenGate Javaアダプタの構成

GoldenGate Javaアダプタには、イベント・ハンドラ・クラスを構成することで、JavaのGoldenGateデータ変更イベントを処理する方法が用意されています。GoldenGate Javaアダプタの構成により、証跡ファイルをモニターしたり、データ変更イベントをHotCacheに渡すことができます。その構成はReplicatのパラメータで指定し、この項で説明します。

この項には次のトピックが含まれます:

2.6.1 HotCache Replicatのパラメータ・ファイルの編集

この項では、GoldenGate JavaアダプタのReplicatの.prmファイルに定義できるパラメータについて説明します。例2-11に示すパラメータは、HotCacheプロジェクトの最低限の構成です。

パラメータの完全なリストについては、『Oracle GoldenGateリファレンスfor Windows and UNIX』のReplicatパラメータの概要に関する項を参照してください。

  • TARGETDB LIBFILE libggjava.so SET property=/home/oracle/gg/hotcache.properties

  • GROUPTRANSOPS 1

    GROUPTRANSOPSパラメータは、GoldenGateのReplicatプロセスによるトランザクションのグループ化を制御します。1の値は、証跡ファイル内のソース・データベースのトランザクション境界を保持するよう、GoldenGateのReplicatプロセスに指示します。1より大きい値は、複数のソース・データベース・トランザクションからの操作を1つのターゲット・トランザクションにグループ化するよう、GoldenGateのReplicatプロセスに指示します。『Oracle GoldenGateリファレンスfor Windows and UNIX』のGROUPTRANSOPSに関する項を参照してください

  • MAP scott.*, TARGET scott.*;

    MAPパラメータは、ソース・データベース表をレプリケーション・ターゲットにマップする方法をGoldenGateのReplicatプロセスに指示します。パラメータの構文は、レプリケーション・ターゲットがリレーショナル・データベースであることを前提としています。HotCacheでは、同一のマッピングの指定が適切です。『Oracle GoldenGateリファレンスfor Windows and UNIX』TABLEおよびMAPのオプションに関する項を参照してください

例2-11は、GoldenGate Javaアダプタのサンプルの.prmファイルを示しています。

例2-11 GoldenGate Javaアダプタのサンプルの.prmパラメータ・ファイル

REPLICAT hotcache
TARGETDB LIBFILE libggjava.so SET property=/home/user/project/hotcache.properties
GROUPTRANSOPS 1
MAP scott.*, TARGET scott.*;

2.7 Coherenceキャッシュ・サーバーの構成

HotCacheでリフレッシュされるキャッシュを含む、すべてのCoherenceキャッシュ・サーバーJVMのクラスパスを変更する必要があります。Coherenceインストールに含まれる次のJARファイルを各キャッシュ・サーバーのクラスパスに配置します。
  • coherence-hotcache.jar – Oracle Coherence GoldenGate HotCacheライブラリが含まれています‬

  • javax.persistence.jar – Java永続ライブラリが含まれています

  • eclipselink.jar – EclipseLinkライブラリが含まれています

  • toplink-grid.jar – HotCacheで必要なOracle TopLinkライブラリが含まれています

  • ‬ドメイン・クラス – Coherenceにキャッシュされているユーザー・クラスを含むJARファイルまたはディレクトリ。HotCacheで使用するためにJPAにマップされています。

2.8 HotCacheでのPortable Object Formatの使用

シリアライズとは、オブジェクトをバイナリ形式にエンコードするプロセスです。これは、Coherenceを使用してデータをネットワーク上で移動させることが必要になった場合に重要となる機能です。Portable Object Format (POF)は言語に依存しないバイナリ形式です。POFは領域と時間の両面で効率を向上させるように設計されており、Coherenceの使用時に不可欠なものとなっています。HotCacheでPOFシリアライズを使用できますが、POF構成ファイル(pof-config.xml)を更新してHotCacheおよびTopLink Gridフレームワーク・クラスが登録できるようにする必要があります。

pof-config.xmlファイルには、coherence-hotcache-pof-config.xmlファイルを含める必要があり、TopLinkGridPortableObjectユーザー・タイプおよびTopLinkGridSerializerをシリアライザとして登録する必要があります。各クラスに対する<type-idは一意である必要があり、すべてのクラスタ・インスタンスで一致している必要があります。『Oracle Coherenceでのアプリケーションの開発』のPOFオブジェクトの登録に関する項を参照してください。

<allow-interfaces>要素は、TopLinkGridPortableObjectインタフェースのすべてのインプリメンタに対して単一のクラスを登録できるようにするために、trueに設定する必要があります。

例2-12は、HotCacheのpof-config.xmlファイルのサンプルを示しています。integer_valueの値は、1000より大きい一意の整数値を表します。

例2-12 HotCacheのPOF構成ファイルのサンプル

<?xml version='1.0'?>

<pof-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-pof-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-pof-config
   coherence-pof-config.xsd">
   <user-type-list>
      <include>coherence-hotcache-pof-config.xml</include>
      <!-- User types must be above 1000 -->
      ...
      <user-type>
         <type-id><integer_value></type-id>
         <class-name>oracle.eclipselink.coherence.integrated.cache.TopLinkGridPortableObject</class-name>
         <serializer>
            <class-name>oracle.eclipselink.coherence.integrated.cache.TopLinkGridSerializer</class-name>
         </serializer>
      </user-type>
      ...
   </user-type-list>
   <allow-interfaces>true</allow-interfaces>
   ...
</pof-config> 

2.9 HotCache JPAプロパティの構成

JPAのエンティティ・タイプごとに構成できるいくつかのカスタムJPAプロパティを使用してHotCacheをカスタマイズできます。これらのプロパティは、JPAエンティティ・クラスの@Property注釈、またはpersistence.xmlファイルの<property>要素のいずれかによって構成できます。構成が矛盾する場合は、後者が優先されます。

この項には次のトピックが含まれます:

2.9.1 EnableUpsertプロパティ

EnableUpsert

EnableUpsertプロパティは、GoldenGate追跡ファイルで更新操作を受け取ったが、対応するキャッシュ・エントリがエンティティ・キーのキャッシュに存在しない場合に、HotCacheがキャッシュ・エントリを挿入するかどうかを制御します。デフォルトでは、HotCacheは存在しないエンティティへの更新を無視します。追跡ファイルで更新操作を受け取ったときに、欠落しているエンティティをHotCacheでキャッシュに挿入する場合は、このプロパティをtrueに設定します。このプロパティのデフォルト値はfalseです。

このプロパティをtrueに設定すると、基礎となっているデータベースで対応するレコードが更新された後、エンティティがキャッシュからアクセスされる可能性が高い場合は、イベントドリブン方式でのウォーミング・キャッシュが容易になります。

注意:

このプロパティの使用時に考慮する必要があるリスクがあります。

  • 追跡ファイルには、挿入するエンティティのすべてのフィールドの値が含まれていない場合があるため、挿入するエンティティは、データベースから読み取られます。これにより、データベース読取りの待機によってHotCacheプロセスのスループットが削減される場合があります。

  • 容量がプロビジョニングされたキャッシュ内のエンティティ数より多くのDB内の行が更新される場合、キャッシュ容量を使い果たす可能性があります。

エンティティ・クラス注釈

@Property(name = "EnableUpsert", value = "false",valueType = boolean.class)

永続性XMLプロパティ

<property name="[fully qualified entity class name].EnableUpsert" value="[true|false]"/>

2.9.2 HonorRedundantInsertプロパティ

HonorRedundantInsert

HonorRedundantInsertプロパティは、HotCacheがGoldenGate追跡ファイル内の挿入操作を、そのキーのキャッシュ・エントリがすでに存在する場合に適用するかどうかを制御します。デフォルトでは、HotCacheは重複した挿入操作を無視します。ただし、JPAエンティティがOracle Databaseの複合マテリアライズド・ビューにマップされており、行がそのマテリアライズド・ビューの基礎となる表で更新される(つまり、マテリアライズド・ビューの1つ以上の行を更新する)場合、Oracle Databaseは、既存の行と同じPKおよび新しい行IDで新しい行をマテリアライズド・ビューに挿入し、既存の行を削除します。このため、HotCacheは重複した挿入操作を、キャッシュされたJPAエンティティへの更新を表していると見なします。この状況でユーザーは、GoldenGate構成を使用して、そのマテリアライズド・ビューでの削除操作のレプリケーションを抑制することも考える必要があります。そうしない場合、キャッシュされたエンティティがHotCacheによって削除されます。このプロパティのデフォルト値はfalseです。

エンティティ・クラス注釈

@Property(name = "HonorRedundantInsert", value = "false",valueType = boolean.class)

永続性XMLプロパティ

<property name="[fully qualified entity class name].HonorRedundantInsert" value="[true|false]"/>

2.9.3 SyntheticEventプロパティ

SyntheticEvent

SyntheticEventプロパティは、HotCacheによるキャッシュの書込みが統合的かどうかを制御します。Coherenceキャッシュへの統合的な書込みはCoherenceでイベントをトリガーせず、フェデレーテッド・キャッシュに参加せず、Coherence CacheStore実装を呼び出しません。イベントがトリガーされ、フェデレーテッド・キャッシュに参加し、CacheStore実装が呼び出されるように(エンティティ・クラス・キャッシュに対してこれらが構成されている場合)、このクラスに対するHotCacheによるキャッシュ書込みを非統合にする場合は、JPAエンティティ・クラスについてこのプロパティをfalseに設定します。すべてのエンティティ・クラスに対してこのプロパティのデフォルト値はtrueです。

注意:

エンティティ・クラスに対してSyntheticEventtrueに設定し、そのエンティティ・クラス・キャッシュでCacheStore実装が構成され、同じデータベースHotCacheへの書込みがCoherenceにレプリケートされている場合、無限レプリケーション・ループが発生するリスクがあります。このリスクは、データベース・ユーザーによるトランザクションをフィルタリングすることで軽減できます。「現在のユーザーが実行した変更のフィルタ処理」を参照してください。

エンティティ・クラス注釈

@Property(name = "SyntheticEvent", value = "[true|false]", valueType = boolean.class)

永続性XMLプロパティ

<property name="[fully qualified entity class name].SyntheticEvent" value="[true|false]"/>

2.9.4 eclipselink.cache.shared.defaultプロパティ

eclipselink.cache.shared.default

eclipselink.cache.shared.defaultプロパティは、EclipseLink内部共有キャッシュを有効化するために使用されます。HotCache JVM内の内部共有キャッシュは、persistence.xmlファイル内のプロパティをfalseに設定して無効化することが重要です。

永続性XMLプロパティ

<property name=" eclipselink.cache.shared.default" value="false"/>

2.10 HotCacheを使用したキャッシュのウォーミング

HotCacheは、初期データセットをロードすることでキャッシュをウォーミングするために使用できます。このアプローチでは、初期キャッシュ・ウォーミングにGoldenGateおよびHotCacheを利用するため、カスタム・キャッシュ・ウォーミング・プログラムを作成する必要がありません。

この項には次のトピックが含まれます:

2.10.1 初期ロード抽出の作成および実行

初期ロード抽出を作成および実行する手順は次のとおりです。
  1. 下に示すように、initload.prmという名前のGoldenGate抽出パラメータ・ファイルを作成し、GG_HOME/dirprmに保存します。抽出ファイルの名前は8文字以下にする必要があることに注意してください。このパラメータ・ファイルで実行されるGoldenGate抽出プロセスは、(データベースのトランザクション・ログから変更を取得するのとは対照的に)ソース・データベースからレコードを選択し、標準形式で証跡ファイルに書き込みます。
    -- This is an initial load extract initload
    -- SOURCEISTABLE parameter indicates source is a table, not redo logs
    SOURCEISTABLE
    USERID <user>, PASSWORD <password>
    -- EXTFILE parameter indicates path and prefix of data files
    -- Note: set MEGABYTES parameter to a maximum file size relative
    -- to the amount of source data being extracted
    EXTFILE GG_HOME/dirdat/IL, maxfiles 9999, MEGABYTES 5, PURGE
    TABLE <schema>.*
  2. 前述の抽出パラメータ・ファイルを使用して、次の例に示すように、コマンド行から直接GoldenGate初期ロード抽出プロセスを実行します。
    cd GG_HOME
    extract paramfile GG_HOME/dirprm/initload.prm reportfile GG_HOME/dirrpt/initload.rpt
抽出プロセスを実行した後、IL0001IL0002などの名前の1つ以上の追跡ファイルがGG_HOME/dirdatディレクトリにできます。 ファイルが生成されない場合は、GG_HOME/dirrpt/initload.rptファイルを確認してください。

2.10.2 キャッシュ・ウォーマReplicatの作成および実行

キャッシュ・ウォーマReplicatを作成および実行する手順は次のとおりです。
  1. 次の例に示すように、warmcach.prmという名前のGoldenGateのReplicatパラメータ・ファイルを作成します。このパラメータ・ファイルで実行されるGoldenGateのReplicatプロセスは、証跡ファイルから初期ロード・データ・セットを読み込みます。「初期ロード抽出の作成および実行」を参照してください。
    REPLICAT warmcach
    TARGETDB LIBFILE libggjava.so SET property=/home/user/project/warmcach.properties
    MAP <schema>.*, TABLE <schema>.*
  2. Replicatパラメータ・ファイルはGoldenGate Javaアダプタを使用するので、次の例に示すように、対応するwarmcach.propertiesファイルをGG_HOME/dirprmに作成します。
    #============================================================
    # List of active event handlers
    gg.handlerlist=hotcache
    #============================================================
    # HotCache handler
    gg.handler.hotcache.type=oracle.toplink.goldengate.CoherenceAdapter1220
    #============================================================
    # Options for the HotCache JVM.
    # Obviously the persistence unit name, classpath, and other
    # options will vary between users and environments. The classpath
    # must include $GG_HOME/dirprm, $GG_HOME/ggjava/ggjava.jar, and
    # coherence.jar, coherence-hotcache, jar, eclipselink.jar,
    # javax.persistence.jar, and toplink-grid.jar from a Coherence
    # installation, as well as a JDBC driver jar for your database,
    # and a jar with your cache key and value classes in it.
    # Other system properties may override Coherence operational
    # configuration elements for cluster addresses and names,
    # paths to configuration files, etc. You may also wish to provide
    # non-default JVM heap sizes, log4j configuration, etc.
    jvm.bootoptions= -Dtoplink.goldengate.persistence-unit=pu_name -Djava.class.path=jvm_class_path
  3. 次の例に示すように、GoldenGate GGSCIコマンド行インタフェースを使用してwarmcach ReplicatプロセスをGoldenGateインストールに登録します。
    cd $GG_HOME
    ./ggsci
    add replicat warmcach, exttrail GG_HOME/dirrpt/IL
    前述のReplicatパラメータ・ファイルおよびプロパティ・ファイルは、初期ロード抽出プロセスによって作成された証跡ファイルを読み取るGoldenGate warmcachプロセスによって使用されます。
  4. GoldenGate GGSCIコマンド行インタフェースを介して次のコマンドを発行して、GoldenGate warmcach Replicatプロセスを実行します。
    cd $GG_HOME
    ./ggsci
    start mgr
    start replicat warmcach
    
    
    warmcach Replicatプロセスの実行が終了すると、初期ロード証跡ファイルの内容はJPAエンティティに変換されて、Coherenceキャッシュに挿入されます。
  5. 次のGGSCIコマンドを使用して、warmcach Replicatを停止および登録解除します。
    stop replicat warmcach
    delete replicat warmcach
    

2.10.3 キャッシュのウォーミング中に変更されたデータの取得

HotCacheは、基礎となっているデータベース・トランザクションが発生したときにCoherenceキャッシュをリフレッシュするために開発されました。初期キャッシュ・ウォーミングに対するHotCacheの使用は、追加された利点です。初期キャッシュ・ウォーミングが行われているときにデータベース内で変更されたデータを取得し、注意深く順序付けられた手順に従ってその変更されたデータでCoherenceキャッシュをリフレッシュできます。必要な操作の順序は次のとおりです。
  1. データベースのREDOログからチェンジ・データを取得する通常のソース抽出プロセスを起動しますが、そのチェンジ・データでCoherenceキャッシュをリフレッシュする通常のHotCache Replicatプロセスは起動しません
  2. 初期ロード抽出プロセスを起動して、データベースから初期データ・セットを選択します。
  3. キャッシュ・ウォーミングReplicatプロセスを実行して、初期データ・セットでCoherenceキャッシュをウォーミングします。
  4. GoldenGateによってデータベースから抽出された行数と(initload.rptを参照)、Coherence MBeansまたはコマンド行インタフェース・コマンドに従ったターゲットCoherenceキャッシュ内のエントリ数を比較することによって、初期ロードが正しく完了したことを検証します。
  5. 標準のHotCache Replicatプロセスを起動して、チェンジ・データでCoherenceキャッシュをリフレッシュします。

2.11 HotCacheの高可用性の実装

HotCacheは、Coherenceキャッシュ・サービスのクライアントであり、サービスを起動して、基礎となるデータベースでのトランザクションに応じてキャッシュ・エントリを挿入、更新または排出します。キャッシュ・クライアントとして、HotCacheはCoherenceクラスタ・メンバーとして、またはクラスタ内のCoherenceプロキシ・サービスに接続するCoherence*Extendクライアントとして構成できます。

ベストプラクティスのデプロイメントでは、Coherenceキャッシュ・サービスおよびプロキシ・サービスには、サービス・メンバーの冗長性(たとえば、複数のキャッシュ・サーバー・プロセスおよび複数のプロキシ・サーバー・プロセス)と、Coherence内の組込み自動フェイルオーバー機能により、すでに高い可用性があります。たとえば、プロキシ・サーバーに障害が発生した場合、そのプロキシ・サーバーを使用するCoherence*Extendクライアントは自動的に別のプロキシ・サーバーにフェイルオーバーします。同様に、キャッシュ・サーバーに障害が発生した場合は、別のキャッシュ・サーバーがそのデータの責任を引き受け、そのデータとのクライアント相互作用は、そのデータを所有する新しいキャッシュ・サーバーに自動的にリダイレクトされます。

HotCacheクライアント自体の可用性を高くすることは、HotCache JVMがGoldenGateプロセスに埋め込まれて実行されるため、標準のGoldenGate HA手法に依存します。

GoldenGateは、GoldenGateインストール内のマネージャ・プロセスによって強制されるAUTOSTARTおよびAUTORESTARTパラメータを介して単一サーバーHAを実装します。マネージャ・プロセスは、AUTOSTARTで構成された登録済のGoldenGateプロセスを自動的に起動します。また、AUTORESTARTで構成された登録済のGoldenGateプロセスの停止も検出(および自動再起動)します。

マネージャ・プロセス自体、またはマネージャ・プロセスが実行されるホストやそのホストに接続するネットワークの障害から保護するために、GoldenGateはOracle Clusterwareに依存して、アクティブなGoldenGateインストールの停止を検出し、パッシブなGoldenGateインストールにフェイルオーバーします。

HotCache JVM埋込みのGoldenGateプロセスを含め、GoldenGateの高可用性については、ホワイト・ペーパー『Oracle Clusterwareを使用したOracle GoldenGateの高可用性』で説明されています。

2.12 Oracleデータ型のサポート

HotCacheはJPAプロバイダとしてEclipseLinkを使用します。EclipseLinkでサポートされているOracle固有のデータ型がHotCacheでサポートされると考えることは合理的です。たとえば、EclipseLinkでは、すべてのOracle DatabaseエディションでOracle DatabaseおよびXMLTypeのOracle Spatial and GraphオプションのSDO_GEOMETRYなど、Oracle Databaseに固有のデータ型がサポートされます。

HotCacheで使用されるとき、EclipseLinkに示されるデータは一般的なJPAシナリオで使用されるときとは異なることを理解することが重要です。一般的なJPAシナリオでは、EclipseLinkはJDBC接続を介してデータベースと相互作用し、EclipseLinkはJDBC APIおよびドライバ固有の拡張子(たとえば、SDO_GEOMETRY列はjava.sql.Structのインスタンスとして表されます)によって示されるデータを使用します。一方HotCacheでは、データはGoldenGate追跡ファイルから読み取られ、JDBC接続は関係ありません。そのため、EclipseLinkはデータのJDBC表現ではなくデータのGoldenGate表現を使用します。たとえば、GoldenGateではSDO_GEOMETRY列をXMLドキュメントとして表現し、java.sql.Structのインスタンスとしては表現しません。

データ表現におけるこれらの違いにより、HotCache内でEclipseLinkを使用するとき、一般的なJPAシナリオで使用される標準のEclipseLinkコンバータのかわりをするHotCache固有のEclipseLinkコンバータの使用が必要になる場合があります。『Java Persistence API (JPA) Extensions Reference for EclipseLink』@Converterに関する項を参照してください。次の項では、EclipseLinkでサポートされる特定のOracle Databaseデータ型に対するHotCacheサポートと、それらのデータ型を使用するためにHotCache内にEclipseLinkを構成する方法について説明します。

2.12.1 SDO_GEOMETRYのサポート

EclipseLinkでは、SDO_GEOMETRY列をoracle.spatial.geometry.JGeometry (Oracle Spatial and Graphオプションに用意されているJavaクラス)のインスタンスにマッピングすることで、Oracle DatabaseのOracle Spatial and Graphオプションがサポートされます。『Solutions Guide for EclipseLink』Oracle Spatial and Graphの使用に関する項を参照してください。

そのためHotCacheは、SDO_GEOMETRYのタイプの列の、JPAエンティティのフィールドにバインドされたoracle.spatial.geometry.JGeometryのインスタンスへのマッピングをサポートします。このサポートには、次の例に示すように、クラスoracle.toplink.goldengate.spatial.GoldenGateJGeometryConverterのHotCache固有のEclipseLinkコンバータの構成が必要です。

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Convert;
import javax.persistence.Converter;
import javax.persistence.Entity;

import oracle.spatial.geometry.JGeometry;

import oracle.toplink.goldengate.spatial.GoldenGateJGeometryConverter;


@Entity
@Converter(name=”JGeometry”, converterClass= GoldenGateJGeometryConverter.class)
public class SpatialEntity {

	private JGeometry geometry;

	@Access(AccessType.PROPERTY)
	@Convert(“JGeometry”)
	public JGeometry getGeometry() {
		return geometry;
	}

このコンバータは、SDO_GEOMETRY列のGoldenGate XML表現を、JPAエンティティのフィールドにバインドされたoracle.spatial.geometry.JGeometryのインスタンスに変換します。GoldenGateJGeometryConverterクラスは、HotCache JVMおよびHotCacheデプロイメントで使用されるCoherenceキャッシュ・サーバーJVMのクラスパスに(依存先のeclipselink.jarファイルとともに)すでに存在するcoherence-hotcache.jarに含まれます。ただし、JGeometryクラスはOracle Spatial and Graphオプションのインストールからのsdoapi.jarに含まれます。sdoapi.jarファイルはHotCache JVMのクラスパスにある必要があり、JPAエンティティがJGeometryフィールドを含む他のJVMはデシリアライズされます。

oracle.spatial.geometry.JGeometryクラスはjava.io.Serializableを実装しているため、CoherenceでキャッシュされたJGeometryフィールドを持つJPAエンティティは、追加の構成をしなくてもjava.io.Serializableでシリアライズできます。CoherenceのPortable Object Format (POF)を使用してJGeometryフィールドを持つJPAエンティティをシリアライズするには、次の例のようにJGeometrySerializerをCoherenceデプロイメントで使用されるPOF構成ファイルに追加する必要があります。

<user-type>
   <type-id>1001</type-id><!—use a type-id value above 1000 that doesn’t conflict with other POF type-ids-->
   <class-name>oracle.spatial.geometry.JGeometry</class-name>
   <serializer>
       <class-name>oracle.spatial.geometry.JGeometryPofSerializer</class-name>
   </serializer>
</user-type>

oracle.spatial.geometry.JGeometryPofSerializerクラスはcoherence-hotcache.jarに含まれ、POFを使用してJGeometryフィールドを持つJPAエンティティをシリアライズまたはデシリアライズする任意のJVMのクラスパスに存在する必要があります。

2.12.2 XMLTypeのサポート

EclipseLinkは、XMLType列をjava.lang.Stringまたはorg.w3c.dom.Document (JPAエンティティ内のマップされるフィールドのタイプによります)のインスタンスにマッピングすることで、Oracle DatabaseのXMLTypeデータ型をサポートします。『EclipseLink API Reference』DirectToXMLTypeMappingに関する項、および『On Persistence』ブログのXMLTYPEのマッピングに関する項を参照してください。

そのためHotCacheは、XMLTypeのタイプの列の、JPAエンティティのフィールドにバインドされたjava.lang.Stringまたはorg.w3c.dom.Documentのインスタンスへのマッピングをサポートします。このサポートでは、標準のEclipseLinkのDirectToXMLTypeMappingの構成が必要です。

XMLType列のサポートに対して統合取得モードを使用するには、GoldenGateを構成する必要があります。『Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成』の各キャプチャ・モードでサポートされるOracleデータ型とオブジェクトのサマリーに関する項および使用するキャプチャ方法の決定に関する項を参照してください。

2.13 HotCacheでのマルチスレッドの構成

HotCacheでは、複数のスレッドを使用してCoherenceキャッシュに証跡ファイルの操作を適用できます。複数のスレッドを使用すると、単一のスレッドを使用して証跡ファイルの操作を適用するのと比較して、HotCacheプロセスのスループットが向上します。マルチスレッドを構成する前に、CoherenceキャッシュおよびHotCacheを使用するシステムで、証跡ファイル操作の同時適用によってデータの正確性のリスクが発生するかどうかを評価します。

トランザクションおよびその操作は、ソース・データベースでコミットされた順に証跡ファイルに現れます。デフォルトでは、HotCacheは、一度に1つのスレッドに操作を適用することで、ソース・データベースに適用された操作とまったく同じ順序で操作がキャッシュに適用されることを保証します。マルチスレッドを使用する場合、操作はソース・データベース表に適用された順序とは異なる順序で適用され、正確性のリスクが発生する可能性があります。

潜在的なリスクを判断するには、次の例を検討してください。

  • あるデータベース・トランザクションが表に行を挿入し、次のデータベース・トランザクションがその行を削除する場合、順不同で操作を適用すると、対応するデータベースの行が削除されたオブジェクトがキャッシュに残ります。

  • あるデータベース・トランザクションによって列が古い値に更新され、次のデータベース・トランザクションによってその列が新しい値に更新される場合、順不同で操作を適用すると、キャッシュされたオブジェクトに新しい値ではなく古い値が残る可能性があります。(HotCacheでサポートされているJPAオプティミスティック・ロック機能を使用して、この特定の更新リスクを緩和できます)。

HotCacheを使用するシステムでデータの正確性のリスクがなく、複数のスレッドを使用してCoherenceキャッシュに証跡ファイルの操作を適用することを決定した場合、次のようにマルチスレッドを使用するようにHotCacheを構成できます。

  1. GoldenGate Javaアダプタのプロパティ・ファイルを編集し、トランザクション・モードを使用するようにHotCacheイベント・ハンドラを構成します。

    gg.handlerlist=hotcache
    goldengate.handler.hotcache.type=oracle.toplink.goldengate.CoherenceAdapter1220
    goldengate.handler.hotcache.mode=tx

    デフォルトでは、GoldenGate Javaアダプタのイベント・ハンドラは、操作モードを使用します。操作モード(op)では、イベント・ハンドラは一度に1つの操作を処理します。トランザクション・モード(tx)では、イベント・ハンドラは一度に1つのトランザクション内のすべての操作を処理します。

  2. GoldenGate Javaアダプタのプロパティ・ファイルを編集し、HotCache JVM上のcoherence.hotcache.concurrencyシステム・プロパティを、JVMホストのコア数(java.lang.Runtime.getAvailableProcessors()で返されます)の1倍以上、8倍以下の値に設定します。次に例を示します。

    jvm.bootoptions=-Dcoherence.hotcache.concurrency=16 …

    このプロパティの値によって、HotCacheがCoherenceキャッシュに証跡ファイルの操作を同時に適用するために使用するスレッドの数が決まります。

  3. HotCache Replicatの.prmファイルを編集し、GROUPTRANOPSプロパティを設定します。1の値は、ソース・データベースのトランザクション境界を保持します。1を超える値を指定すると、GoldenGate Replicat内でトランザクションのグループ化が行われます。デフォルト値は1000です。

HotCacheスレッドの動作の概要

HotCacheが推奨のGoldenGate Replicatプロセスで実行されていると仮定すると、ソース・データベース・トランザクションの競合に起因するリスクは、GROUPTRANOPSプロパティが1以外の値に構成されている場合にのみ発生します。1の値を指定すると、ソース・データベースのトランザクション境界およびシーケンスがHotCache Replicatによって保持されます。したがって、1つのトランザクション内の操作が並列に適用され、その次のトランザクションの操作が適用され、その後も同様に続きます。GROUPTRANOPSプロパティのデフォルトは1000で、複数の連続したソース・データベース・トランザクションからの証跡ファイル操作を、少なくとも1,000操作の1つのターゲット・トランザクションにグループ化します。GROUPTRANOPSプロパティ値の規模、ソース・データベースの書込み速度やボリュームを考えると、GROUPTRANOPSパラメータが1より大きい値に設定された場合にデータの正確性のリスクが発生する可能性は、グループ化されたソース・データベース・トランザクション内で操作が競合する可能性と同等です。『Oracle GoldenGateリファレンスfor Windows and UNIX』のGROUPTRANSOPSに関する項を参照してください。

次の表は、GoldenGate Javaアダプタのmodeプロパティとcoherence.hotcache.concurrencyプロパティの値に応じたHotCacheスレッドの動作をまとめたものです。

表2-1 HotCacheスレッドの動作

モード 並行性 動作

op

N/A

opモードの場合、HotCacheでは、各操作が証跡ファイルから読み込まれるたびに、単一のスレッド(GoldenGate Javaアダプタ・スレッド)上で一度に1つずつ証跡ファイルの操作が適用されます。これはHotCacheのデフォルトの動作です。並行性のプロパティの値は、操作モードでは考慮されません。

tx

1

txモードで並行性のプロパティ値が1の場合、HotCacheでは、単一のスレッド(GoldenGate Javaアダプタ・スレッド)上で、一連の証跡ファイルの操作が繰り返し適用されます。トランザクションを構成する操作のグループは、GoldenGate ReplicatのGROUPTRANOPSプロパティの値によって決定されます。並行性のプロパティのデフォルト値は1です。この構成は、シングル・スレッドのままであり、データの正確性のリスクがないにもかかわらず、操作モードの構成よりも高いスループットを示す可能性があります。

tx

>1

txモードで並行性のプロパティ値が1より大きい場合、HotCacheでは、複数のHotCacheスレッドによる並列処理で一連のトランザクションが処理されます。トランザクションを構成する操作のグループは、GoldenGate ReplicatのGROUPTRANOPSプロパティの値によって決定されます。この構成では、シングル・スレッド構成よりもスループットが向上し、通常、HotCacheホスト上のコア数の最大8倍まで、構成されたスレッド数に応じてスループットが向上します。

2.14 HotCacheのマルチテナント・モードの使用

HotCacheでは、特定のテナントのキャッシュをリフレッシュできます。マルチテナント・モードでは、テナント識別子をCoherenceスコープ名と組み合せて使用することで、HotCacheが特定のテナントのキャッシュのみをリフレッシュすることを保証します。

GoldenGateの証跡ファイルは単一テナントのデータが含まれていることが前提で、単一テナントのデータを入れるように構成する必要があります。複数テナントのキャッシュをリフレッシュする場合は、テナントごとに異なるHotCacheプロセスを使用する必要があります。Oracle Databaseを使用していて、GoldenGateのマルチテナント・サポートの構成をまだ実行していない場合は、ここでの手順を完了する前に実行してください。『Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成』のマルチテナント・コンテナ・データベースでのOracle GoldenGateの構成に関する項を参照してください。

HotCacheのマルチテナント・モードを使用するには:

  1. HotCacheのプロパティ・ファイルを編集し、データベース・テナント識別子を設定したcoherence.hotcache.tenantidシステム・プロパティをJVMブート・オプションのセクションに含めます。次に例を示します。

    -Dcoherence.hotcache.tenantid=oracle
  2. Coherenceキャッシュ構成ファイルを編集して、構成のスコープ名を含めます。次に例を示します

    <?xml version='1.0'?>
    
    <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
       xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config
       coherence-cache-config.xsd">
          <defaults>
             <scope-name>accounts</scope-name>
          </defaults>
       ...

注意:

前述のテナント識別子とスコープ名を指定する場合は、キャッシュ・サービス名をoracle/accounts:servicenameに変更します。

2.15 HotCacheの管理

HotCacheを管理して、キャッシュの更新操作が許容される時間内に実行されることを保証できます。HotCacheは、JMXを使用して、JMXブラウザ、CoherenceレポートまたはCoherence-Java VisualVMプラグインのいずれかを使用して表示される管理データを収集します。管理データには、特定のキャッシュおよび操作タイプの統計に加え、GoldenGate HotCacheアダプタ全体としての統計が含まれます。

この項には次のトピックが含まれます:

2.15.1 CoherenceAdapterMXBean

CoherenceAdapterMXBean MBeanはGolden Gate HotCacheアダプタを表し、操作およびパフォーマンスの統計を提供します。このマネージドBeanのゼロ個以上のインスタンスが作成され、アダプタ・インスタンスごとに1つのマネージドBeanインスタンスとなります。

MBeanのオブジェクト名は次のようになります。

Type=CoherenceAdapter,name=replicat name,member=member name

MBeanブラウザからCoherenceAdapterMXBean MBeanを表示するには、Coherence管理を有効にする必要があります。Coherence JMX管理を初めて使用する場合は、「JMXを使用したOracle Coherenceの管理」を参照してください。

属性

表2-2は、CacheMBeanの属性を示しています。

表2-2 CoherenceAdapterMXBean

属性 タイプ アクセス 説明

CacheNames

String[]

読取り専用

CoherenceAdapterによってリフレッシュされたキャッシュの名前

ExecutionTimePerOperationStatistics

LongSummaryStatistics

読取り専用

統計が最後にリセットされてからの、各操作の実行時間に関するナノ秒単位のサマリー統計

ExecutionTimePerTransactionStatistics

LongSummaryStatistics

読取り専用

統計が最後にリセットされてからの、各トランザクションの実行時間に関するナノ秒単位のサマリー統計

InvocationsPerOperationStatistics

IntSummaryStatistics

読取り専用

統計が最後にリセットされてからの、各操作の呼出し数に関するサマリー統計

LastExecutionTimePerOperationStatistics

LongSummaryStatistics

読取り専用

このメソッドが最後にコールされてからの、各操作の実行時間に関するナノ秒単位のサマリー統計

LastOperationReplicationLagStatistics

LongSummaryStatistics

読取り専用

このメソッドが最後にコールされてからの、操作のレプリケーション・ラグに関するミリ秒単位のサマリー統計

NumberOfOperationsProcessed

Long

読取り専用

統計が最後にリセットされてからの、処理された操作数の集計

OperationReplicationLagStatistics

LongSummaryStatistics

読取り専用

統計が最後にリセットされてからの、操作のレプリケーション・ラグに関するミリ秒単位のサマリー統計

OperationsPerTransactionStatistics

IntSummaryStatistics

読取り専用

統計が最後にリセットされてからの、各トランザクションの操作数に関するサマリー統計

PerCacheStatistics

Map

読取り専用

各操作タイプ、各キャッシュの、ナノ秒単位の実行時間のサマリー統計

StartTime

Date

読取り専用

CoherenceAdapterが起動された時間

TrailFileName

String

読取り専用

現在読み込まれている証跡ファイルの名前

TrailFilePosition

String

読取り専用

最後に正常に処理された操作の証跡ファイル内の位置

操作

CoherenceAdapterMXBean MBeanには、すべてのキャッシュ統計をリセットするresetStatistics操作が含まれます。

2.15.2 HotCacheレポートの理解

HotCacheレポートには、操作設定およびパフォーマンスの統計が含まれています。統計データはCoherenceAdapterMXBean MBeanから収集され、時間とともに提示されるため、パフォーマンス傾向の発見や潜在的なパフォーマンス問題のトラブルシューティングに最適です。HotCacheレポートの名前はtimestamp-hotcache.txtで、タイムスタンプはYYYYMMDDHH形式になります。たとえば、2009013101-hotcache.txtという名前のファイルは、2009年1月31日午前1時のHotCacheレポートを表します。

HotCacheレポートを表示するには、Coherenceレポートを有効にし、report-allレポート・グループを構成する必要があります。Coherenceレポートを初めて使用する場合は、「Oracle Coherenceのレポート機能の使用」を参照してください。

表2-3は、HotCacheレポートの内容を示しています。

表2-3 HotCacheレポートの内容

データ型 説明

Batch Counter

Long

関連ファイルの情報の統合に役立つ順次カウンタ。この値は、レポータが再起動され、メンバー全体での一貫性がない場合にリセットされます。しかし、ファイルの統合を試みる際には役立ちます。

Report Time

Date

レポートの各リフレッシュのタイムスタンプ

Handler Name

String

GoldenGate HotCacheプロパティ・ファイルからの、HotCacheイベント・ハンドラのユーザー指定の名前

Member Name

String

HotCacheアダプタが実行されるCoherenceメンバー名

Start Time

Date

Coherence HotCacheアダプタが起動された時間

Operations Processed

Long

処理されたトランザクション操作の数

Trail File Name

String

トランザクション操作が含まれるGolden Gate証跡ファイルの名前

Trail File Position

String

最後に正常に処理された操作の証跡ファイル内の位置

Operations per Transaction Average

IntSummaryStatistics

各トランザクションで処理される操作の平均数

Operations per Transaction Maximum

IntSummaryStatistics

各トランザクションで処理される操作の最大数

Operations per Transaction Minimum

IntSummaryStatistics

各トランザクションで処理される操作の最小数

Invocations per Operation Average

IntSummaryStatistics

各操作で実行されるエントリ・プロセッサの平均呼出し数

Invocations per Operation Maximum

IntSummaryStatistics

各操作で実行されるエントリ・プロセッサの最大呼出し数

Invocations per Operation Minimum

IntSummaryStatistics

各操作で実行されるエントリ・プロセッサの最小呼出し数

Last Execution Time per Operation Average (ns)

LongSummaryStatistics

最後のサンプリングからの、各操作のナノ秒単位の平均実行時間

Execution Time per Operation Average (ns)

LongSummaryStatistics

ナノ秒単位の各操作の平均実行時間

Execution Time per Operation Maximum (ns)

LongSummaryStatistics

ナノ秒単位の各操作の最大実行時間

Execution Time per Operation Minimum (ns)

LongSummaryStatistics

ナノ秒単位の各操作の最小実行時間

Execution Time per Transaction Average (ns)

LongSummaryStatistics

ナノ秒単位の各トランザクションの平均実行時間

Execution Time per Transaction Maximum (ns)

LongSummaryStatistics

ナノ秒単位の各トランザクションの最大実行時間

Execution Time per Transaction Minimum (ns)

LongSummaryStatistics

ナノ秒単位の各トランザクションの最大実行時間

Last Operation Replication Lag Average (ms)

LongSummaryStatistics

データベース・トランザクションのコミットからHotCacheアダプタによる最後の操作の処理までのミリ秒単位の平均時間

Operation Replication Lag Average (ms)

LongSummaryStatistics

データベース・トランザクションのコミットからHotCacheアダプタによる操作の処理までのミリ秒単位の平均時間

Operation Replication Lag Maximum (ms)

LongSummaryStatistics

最後のサンプリングからの、データベース・トランザクションのコミットからHotCacheアダプタによる操作の処理までのミリ秒単位の平均時間

Operation Replication Lag Minimum (ms)

LongSummaryStatistics

データベース・トランザクションのコミットからHotCacheアダプタによる操作の処理までのミリ秒単位の最小時間

2.15.3 Coherence-JVisualVMプラグインを使用したHotCacheのモニタリング

Coherence-JVisualVMプラグインの「HotCache」タブには、HotCacheのパフォーマンス統計がグラフィカル表示されます。Coherence-Java VisualVMプラグインを初めて使用する場合は、「Coherence-JVisualVMプラグインの使用」を参照してください。

HotCacheの統計データは、CoherenceAdapatMBean MBeanから収集され、時間とともに表およびグラフ形式で提示されます。このタブには、各GoldenGate HotCacheメンバーの統計が表示され、そのHotCacheメンバーによってリフレッシュされた特定のキャッシュに関する詳細が表示されます。特定のメンバーのデータを表示するには、メンバー表でメンバーを選択します。特定のキャッシュのデータを表示するには、キャッシュ表でキャッシュを選択します。

「HotCache」タブを使用してパフォーマンス統計の詳細を表示し、キャッシュ更新操作の潜在的なパフォーマンスの問題を特定します。「HotCache」タブには、次のものが含まれます。

  • 各操作でキャッシュを更新するために必要な最小、最大および平均の時間。

  • トランザクション内のすべての操作でキャッシュを更新するために必要な最小、最大および平均の時間。

  • 各操作で実行されるエントリ・プロセッサの合計呼出し数。

  • 最後の操作の最小、最大および平均の時間。

  • このMBean属性値が最後にサンプリングされてからの、最後の操作の最小、最大および平均の操作レプリケーション・ラグ時間。レプリケーション・ラグは、データベース・トランザクションのコミットからHotCacheアダプタによる操作の処理までの時間です。

  • 統計が最後にリセットされてからの、最小、最大および平均の操作レプリケーション・ラグ時間。

  • 各トランザクションの最小、最大および平均の操作数。

  • 各キャッシュ、各操作タイプの最小、最大および平均の時間。操作には、EVICTINSERTPK_CHANGEREAD_FROM_DBREDUNDANT_INSERTREFRESHUPDATE、およびUPSERTが含まれます。