プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceの統合
12c (12.2.1)
E69904-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

7 Oracle Coherence GoldenGate HotCacheとの統合

この章では、Coherenceキャッシュを使用するアプリケーションとともにCoherence GoldenGate HotCache (HotCache)を使用する方法について説明します。HotCacheを使用すると、データベースに対する変更をCoherenceキャッシュ内のオブジェクトに伝播できます。

Oracle GoldenGateの詳細は、このドキュメントでは述べません。GoldenGateをOracleデータベースにインストールする方法の詳細は、『Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成』を参照し、また『Oracle GoldenGateアダプタの管理』を参照してください。


注意:

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

この章では、次の内容を説明します。

7.1 概要

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

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

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

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

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

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

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

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

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

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

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

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

7.2 HotCacheの機能

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

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

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

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

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

例7-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>

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

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

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

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

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

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

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

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

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

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

7.3 前提条件

次の項の説明は、データベースがGoldenGateを使用するように設定されていることを前提とします。必要なタスクは次のとおりです。

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

  • ユーザー権限の付与

  • ロギングの有効化

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

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

ALTER DATABASE ADD SUPPLEMENTAL LOG DATAコマンドに注意してください。サプリメンタル・ロギングを有効にすると、すべての列が追加のロギング対象として指定されます。少なくとも、どのようなチェンジ・データ・キャプチャのソース・データベースに対しても、最小データベース・レベルのサプリメンタル・ロギングを有効にする必要があります。

例7-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ライブラリの追加

  • マネージャの起動

これらのタスクの詳細は、このドキュメントでは述べません。GoldenGateをOracleデータベースにインストールする方法の詳細は、『Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成』を参照し、また『Oracle GoldenGateアダプタの管理』を参照してください。

7.4 GoldenGateの構成

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

7.4.1 表の変更のモニター

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

ADD TRANDATA csdemo.*

例7-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文は必要ありません。

例7-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

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

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

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

TranLogOptions excludeUser csdemo 

例7-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で無視されることを示します。

例7-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

7.5 HotCacheの構成

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

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

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

ファイル名の拡張子が.propertiesのテキスト・ファイルを作成します。ファイルにHotCacheの構成を入力します。構成には少なくともイベント・ハンドラのリスト、イベント・ハンドラの完全修飾Javaクラス、ユーザー出口チェックポイント・ファイルを使用しているかどうか、およびJavaライター名が含まれている必要があります。


注意:

.propertiesファイルへのパスは、次の例のようにGoldenGate JavaアダプタのGGS_USEREXIT_CONF変数の値として.prmファイルに設定する必要があります。
SetEnv(GGS_USEREXIT_CONF="dirprm/cs-cgga.properties")

この説明は、「GoldenGate Javaクライアント抽出ファイルの編集」にあります。


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

  • gg.handlerlist=cgga

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

  • gg.handler.cgga.type=oracle.toplink.goldengate.CoherenceAdapter

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

  • goldengate.userexit.nochkpt=true

    goldengate.userexit.nochkptプロパティを使用して、ユーザー出口チェックポイント・ファイルを無効にします。この例では、ユーザー出口チェックポイント・ファイルを無効に定義しています。

  • goldengate.userexit.writers=jvm

    goldengate.userexit.writersプロパティには、ライターの名前を指定します。GoldenGate Javaアダプタの呼出しを有効にするには、goldengate.userexit.writersの値をjvmにする必要があります。

  • -Dlog4j.configuration=my-log4j.properties

    -Dlog4j.configurationプロパティには、dirprmディレクトリ(dirprmディレクトリはクラスパスにすでに存在)のユーザー定義Log4Jプロパティ・ファイルmy-log4j.propertiesを指定します。プロパティはクラスパスからロードできるため、この文はオプションです(つまり、log4j.configuration=my-log4j.properties)。HotCacheのロギング・プロパティの構成の詳細は、「ロギング・プロパティ」を参照してください。

その他の様々なプロパティを使用して、GoldenGate Javaアダプタの動作を制御できます。詳細は、『Oracle GoldenGateアダプタの管理』を参照してください。

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

# ====================================================================
# List of active event handlers. Handlers not in the list are ignored.
# ====================================================================
gg.handlerlist=cgga

# ====================================================================
# Coherence cache updater
# ====================================================================
gg.handler.cgga.type=oracle.toplink.goldengate.CoherenceAdapter

# ====================================================================
# Native JNI library properties
# ====================================================================
goldengate.userexit.nochkpt=true
goldengate.userexit.writers=jvm

# ======================================
# Java boot options
# ======================================
jvm.bootoptions=-Djava.class.path=dirprm:/home/oracle/app/oracle/product/11.2.0/dbhome_2/jdbc/lib/ojdbc6.jar:ggjava/ggjava.jar:/home/oracle/Oracle/Middleware/coherence/lib/coherence.jar:/home/oracle/Oracle/Middleware/coherence/lib/coherence-hotcache.jar:/home/oracle/Oracle/Middleware/oracle_common/modules/javax.persistence_2.0.0.0_2-0.jar:/home/oracle/Oracle/Middleware/oracle_common/modules/oracle.toplink_12.1.2/eclipselink.jar:/home/oracle/Oracle/Middleware/oracle_common/modules/oracle.toplink_12.1.2/toplink-grid.jar:/home/oracle/cgga/workspace/CacheStoreDemo/bin -Xmx32M -Xms32M -Dtoplink.goldengate.persistence-unit=employee -Dlog4j.configuration=my-log4j.properties -Dcoherence.distributed.localstorage=false -Dcoherence.cacheconfig=/home/oracle/cgga/workspace/CacheStoreDemo/client-cache-config.xml -Dcoherence.ttl=0

Javaブート・オプションについては、次の項で説明します。

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

この項では.propertiesファイルのJava boot optionsセクションに指定する必要のあるプロパティについて説明します。これらのオプションはjvm.bootoptionsプロパティを使用して定義します。

jvm.bootoptionsのサンプル・リストは、例7-8Java boot optionsセクションに記載されています。

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

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

  • dirprm: 抽出.prmファイルが含まれているGoldenGate dirprmディレクトリ

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

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

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

  • javax.persistence_2.0.0.0_2-0.jar: Java永続ライブラリが含まれています

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

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

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

7.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を終了します。

7.5.2.3 Coherence関連プロパティ

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

-Dcoherence.distributed.localstorage=false

7.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パスで構成される同じファイルに含めることができます。

7.5.3 Coherence*Extend接続情報の指定

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

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

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

例7-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>

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

例7-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>

7.6 GoldenGate Javaクライアントの構成

GoldenGate Javaクライアントには、イベント・ハンドラ・クラスを構成することで、JavaのGoldenGateデータ変更イベントを処理する方法が用意されています。GoldenGate Javaクライアントの構成により、抽出をモニターしたり、データ変更イベントをHotCacheに渡すことができます。

この構成は抽出.prmファイルで用意します。このファイルについては次の項で説明します。抽出.prmファイルには、イベント・ハンドラ・クラスへの参照も含まれています。これは、「GoldenGate for Javaのプロパティでのプロパティ・ファイルの作成」で説明されているプロパティ・ファイルに指定されたイベント・ハンドラ・クラスと同じです。

7.6.1 GoldenGate Javaクライアント抽出ファイルの編集

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

これらのパラメータおよび抽出.prmファイルに追加できる他のパラメータの詳細は、『Oracle GoldenGateエラー・メッセージ・リファレンスfor Windows and UNIX』を参照してください。

  • SetEnv ( GGS_USEREXIT_CONF = "dirprm/cs-cgga.properties" )

    GGS_USEREXIT_CONFプロパティは、「GoldenGate for Javaのプロパティでのプロパティ・ファイルの作成」で作成した.propertiesファイルへの参照を提供します。cs-cgga.propertiesという名前で、dirprmフォルダに格納されていることが前提となります。

  • GETUPDATEBEFORES

    GETUPDATEBEFORESプロパティは、変更前の値が提示された場合は列の変更前後の値が追跡に書き込まれるため、値を比較できます。変更前の値が提示されない場合は、変更後の値のみが書き込まれます。

  • CUserExit libggjava_ue.so CUSEREXIT PassThru IncludeUpdateBefores

    CUSEREXITパラメータには次のものがあります。

    • libggjava_ue.so (UNIXの場合)またはggjava_ue.dll (Windowsの場合) - ユーザー出口ライブラリの場所

    • CUSEREXIT - コールバック関数名(大文字で記載する必要がある)

    • PASSTHRU - ダミー・ターゲット追跡を不要にする

    • INCLUDEUPDATEBEFORES - トランザクションの整合性のために必要

  • NoTcpSourceTimer

    NOTCPSOURCETIMERパラメータを使用して、レポート作成のためにレプリケートされた操作のタイムスタンプをOracle GoldenGate環境内で管理します。NOTCPSOURCETIMERには当初のタイムスタンプ値が保持されます。NOTCPSOURCETIMERは、双方向構成でタイムスタンプベースの競合解決を使用する場合に使用します。

例7-11に、GoldenGate for Javaクライアントの.prmファイルのサンプルを示します。

例7-11 GoldenGate for Javaクライアントの.prmパラメータ・ファイルのサンプル

Extract cs-cgga
USERID csdemo, PASSWORD csdemo
 
SetEnv ( GGS_USEREXIT_CONF = "dirprm/cs-cgga.properties" )
 
-- the user-exit library (unix/linux)
CUserExit libggjava_ue.so CUSEREXIT PassThru IncludeUpdateBefores
 
-- the user-exit library (windows)
-- CUserExit ggjava_ue.dll CUSEREXIT PassThru IncludeUpdateBefores
--  pass all trail data to user-exit (don't ignore/omit/filter data)
GetUpdateBefores
 
-- TcpSourceTimer (default=on) adjusts timestamps in replicated records for more 
-- accurate lag calculation, if time differences between source/target
NoTcpSourceTimer
 
-- pass all data in trail to user-exit. Can wildcard tables, but not schema name
Table csdemo.*;

7.7 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は一意である必要があり、すべてのクラスタ・インスタンスで一致している必要があります。POFファイルの構成方法の詳細は、『Oracle Coherenceでのアプリケーションの開発』のPOFオブジェクトの登録に関する項を参照してください。

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

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

例7-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-configcoherence-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> 

7.8 TopLink Gridアプリケーション用のラッパー・クラスの有効化

Coherenceキャッシュへの変更されたデータのポンプをHotCacheに依存するTopLink Gridアプリケーションでは、trueに設定したtoplink.goldengate.enable-toplinkgrid-clientコンテキスト・プロパティを使用して、Coherenceキャッシュ挿入用のJavaラッパー・クラスを生成できます

TopLink Gridは、JPA関係がTopLink Grid JPAクライアントによってCoherenceから取得される際に、先行および遅延するJPA関係を再構築するための、関係情報のエンコードをラッパーに依存しています。HotCacheでTopLink Gridを使用し、かつプロパティをtrueに設定していない場合、オブジェクト間の関係は、Coherenceキャッシュから取得された時点でNULLになります。

このコンテキスト・プロパティは、persistence.xmlファイル、またはHotCacheの.propertiesファイルのJavaブート・オプション・セクションのシステム・プロパティで設定できます。