Oracle GoldenGateの詳細は、このドキュメントでは述べません。GoldenGateをOracleデータベースにインストールする方法の詳細は、『Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成』を参照し、また『Oracle GoldenGateアダプタの管理』を参照してください。
注意:
HotCacheを使用するには、Oracle GoldenGateおよびCoherence Grid Editionのライセンスが必要です。HotCacheは、Oracle GoldenGate 11gR1、11gR2および12cのリリースで使用できます。
この章の構成は、次のとおりです。
データベースに対するサード・パーティの更新により、Coherenceアプリケーションで、最新でない失効した可能性のあるデータが使用されることがあります。HotCacheは、データベースをモニタリングし、変更をCoherenceキャッシュにプッシュすることでこの問題を解決します。HotCacheには、失効したデータのみを処理する効率的なプッシュ・モデルが採用されています。データベースに変更が行われる際にデータがプッシュされるため、待機時間の短さが保証されます。
HotCacheは、どのようなCoherenceアプリケーションにも追加できます。データベース・データからJavaオブジェクトへのマッピングの取得には標準JPAが使用されます。構成は、XMLのみで取得することも、注釈を使用したXMLで取得することできます。
次のシナリオは、HotCacheをデータベースと連動して使用する方法、およびCoherenceキャッシュを使用するアプリケーションと連動するように使用する方法を示しています。図7-1にこのシナリオを示します。
GoldenGateの起動方法の詳細は、『Oracle GoldenGateアダプタの管理』のアプリケーションの起動に関する項を参照してください。GoldenGateによって、目的の変更に対するトランザクション・ログがモニターされます。これらの変更内容は追跡ファイルに格納されます。
必要に応じてCoherenceキャッシュ・サーバーを起動し、キャッシュをウォーミングします。
HotCacheを起動して、追跡ファイル内の変更内容をキャッシュに伝播できるようにします。キャッシュのウォーミング中に変更が発生した場合は、変更内容が消失しないように、HotCacheが起動するとその変更が即時にキャッシュに適用されます。
アプリケーション・クライアントを起動します。その操作の一部として、アプリケーションによってキャッシュに対する問合せが繰り返し実行されることを想定します。
サード・パーティ・アプリケーションによって、データベースの直接更新が実行されます。
GoldenGateによってデータベースの変更が検出され、それがHotCacheによってCoherenceキャッシュに伝播されます。
アプリケーション・クライアントによって、キャッシュ内の変更が検出されます。
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
name
やcolumn
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; … }
例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-4 Employeeクラスのインスタンスを行にマッピングする単純化したXML
<entity class="Employee"> <attributes> <id name="id"/> <basic name="firstName"/> ... </attributes> </entity>
JPAマッピング・メタデータは、オブジェクトからリレーショナルへのマッピングを提供しますが、HotCacheで使用できるリレーショナルからオブジェクトへの逆マッピングも提供します。Employee
の例で、EMPLOYEE
表の行のFIRSTNAME
列への更新を考えてみましょう。図7-2は、Johnという名が従業員ID 1と関連付けられている更新前のEMPLOYEE
表と、Bobという名が従業員ID 1と関連付けられている更新後のEMPLOYEE
表を示しています。
GoldenGateによってEMPLOYEE
表に対する変更がモニタリングされており、HotCacheが適切な追跡ファイルで構成されている場合、アダプタによって、主キー1
を持つEMPLOYEE
行のFIRSTNAME
列がBob
に変更されたことを示すイベントが処理されます。アダプタは、JPAマッピング・メタデータを使用して、最初にEMPLOYEE
表に関連付けられているクラスEmployee
を識別し、次にEmployee
のIDフィールドと関連付けられている列ID
を判別します。この情報を使用して、アダプタは変更イベントからそのID列値を抽出し、そのID
列値でキャッシュされているEmployee
のfirstName
フィールド(FIRSTNAME
列と関連付けられた)を更新できます。
GoldenGate Javaアダプタでは、データベースのINSERT
、UPDATE
およびDELETE
操作がサポートされています。マップされた表にINSERT
操作を実行すると、関連付けられたクラスの新しいインスタンスが追加され、新たに挿入された行のデータが移入されます。UPDATE
操作で適用される変更内容は、対応するキャッシュ・オブジェクトに伝播されます。更新された行に対応するオブジェクトがキャッシュに含まれていなければ、デフォルトではキャッシュは変更されません。デフォルトの動作を変更するには、HonorRedundantInsertプロパティを参照してください。DELETE
操作を実行すると、対応するオブジェクトがキャッシュに存在する場合はキャッシュから削除されます。
HotCacheでは、1対1、1対多、多対1および多対多のJPA関係マッピングはサポートされません。ただし、HotCacheではJPA埋込み可能クラスおよびJPA要素コレクションはサポートされます。埋込み可能クラスおよび要素コレクションをHotCacheで使用して、ドメイン・オブジェクト間の関係をモデル化できます。HotCacheで使用されるドメイン・オブジェクトは、識別子(リレーショナル・データベースの外部キーと類似)によって相互に参照できる場合もあります。
パフォーマンス最適化として、HotCacheでJPA要素コレクションを使用するときは、親表に対する外部キーである要素コレクション表の列を指定してADD TRANDATA
コマンドでGoldenGateを構成することをお薦めします。要素コレクション表の行が変更されたときに更新するキャッシュ・エントリを、最適化によりHotCacheが効率的に検出できます。
次の項の説明は、データベースがGoldenGateを使用するように設定されていることを前提とします。これには、次の作業が含まれます。
データベースおよび表の作成
ユーザー権限の付与
ロギングの有効化
表およびデータのプロビジョニング
例7-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;
。
例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アダプタの管理』を参照してください。
GoldenGate追跡ファイルからのキャッシュの更新では、GoldenGateおよびHotCacheを構成する必要があります。その後、GoldenGate Javaアダプタを構成することでHotCacheを有効にします。
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
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
HotCacheは、システム・プロパティ、EclipseLink JPAマッピング・メタデータ(HotCacheの機能を参照)およびJPA persistence.xml
ファイルで構成されます。HotCacheからCoherenceクラスタへの接続はCoherence*Extend (TCP)を使用して実行でき、またはHotCache JVMはCoherenceクラスタをメンバーとして結合できます。
次の項では、HotCacheの構成に必要なプロパティと、Coherence*Extendとの接続の詳細について説明します。
ファイル名の拡張子が.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|oracle.toplink.goldengate.CoherenceAdapter122]
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.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
この項では.properties
ファイルのJava boot optionsセクションに指定する必要のあるプロパティについて説明します。これらのオプションはjvm.bootoptions
プロパティを使用して定義します。
jvm.bootoptions
のサンプル・リストは、例7-8のJava boot options
セクションに記載されています。
次のリストは、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.jar
– Java永続ライブラリが含まれています
eclipselink.jar
: EclipseLinkライブラリが含まれています
toplink-grid.jar
: HotCacheで必要なOracle TopLinkライブラリが含まれています
ドメイン・クラス: Coherenceにキャッシュされているユーザー・クラスを含むJARファイルまたはディレクトリ。HotCacheで使用するためにJPAにマップされています。Coherence構成ファイル、persistence.xml
ファイルおよびorm.xml
ファイルも同様。
toplink.goldengate.persistence-unit
プロパティは必須で、HotCacheがロードするpersistence.xml
ファイルに定義された永続性ユニットを識別します。永続性ユニットには、関与しているドメイン・クラスのリスト、構成オプション、データベース接続情報(必要な場合)などの情報が含まれています。
toplink.goldengate.on-error
プロパティはオプションです。変更イベントの処理時に、アダプタがエラーに応答する方法を制御します。このレスポンスは、予想されるオプティミスティック・ロック例外と予期しない例外の両方に適用されます。このプロパティはオプションで、デフォルトでは「Refresh」の値に設定されます。Refreshを指定すると、アダプタでは、データベースからの指定行の最新データの読取りと、キャッシュ内の対応するオブジェクトの更新が試行されます。Refreshでは、データベース接続がpersistence.xml
ファイルに指定されている必要があります。この接続はHotCacheの初期化中に確立されます。接続できない場合は、例外がスローされ、HotCacheの起動は失敗となります。
その他のエラー時戦略にはデータベース接続は必要ありません。次のものがあります。
Ignore
- 例外のみをログに記録します。キャッシュに古いデータが残存する可能性があります。アプリケーションの要件およびキャッシュ・エビクション・ポリシーに応じて許容します。
Evict
- 警告をログに記録し、変更データベース行に対応するオブジェクトをキャッシュから排出します。
Fail
- 例外をスローしてHotCacheを終了します。
Java boot optionsでは、Coherenceの任意のプロパティをシステム・プロパティとして指定できます。false
の値のcoherence.distributed.localstorage
システム・プロパティは、Java boot optionsで渡す必要がある唯一のCoherenceプロパティです。Coherenceのすべてのプロパティと同様に、jvm.bootoptions
文ではプロパティ名に-D
接頭辞を付けます。次に例を示します。
-Dcoherence.distributed.localstorage=false
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
パスで構成される同じファイルに含めることができます。
HotCacheとCoherenceクラスタ間は、Coherence*Extendで接続されます。Coherence*Extendの詳細は、Oracle Coherenceリモート・クライアントの開発を参照してください。
Coherenceの構成ファイルは.properties
ファイルのjvm.bootoptions=-Djava.class.path=
...エントリで指定されたディレクトリに存在する必要があります。1つの例として、例7-8のjvm.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>
GoldenGate Javaクライアントには、イベント・ハンドラ・クラスを構成することで、JavaのGoldenGateデータ変更イベントを処理する方法が用意されています。GoldenGate Javaクライアントの構成により、抽出をモニターしたり、データ変更イベントをHotCacheに渡すことができます。
この構成は抽出.prm
ファイルで用意します。このファイルについては次の項で説明します。抽出.prm
ファイルには、イベント・ハンドラ・クラスへの参照も含まれています。これは、GoldenGate for 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.*;
次のCoherenceインストールのJARファイルを、HotCacheによってリフレッシュされるキャッシュを含むすべてのCoherenceキャッシュ・サーバーJVMのクラスパスに追加する必要があります。
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を使用してデータをネットワーク上で移動させることが必要になった場合に重要となる機能です。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>
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ブート・オプション・セクションのシステム・プロパティで設定できます。
HotCacheの動作は、JPAエンティティ・タイプごとに構成できる多数のカスタムJPAプロパティを使用してカスタマイズできます。これらのプロパティは、JPAエンティティ・クラスの@Property
注釈、またはpersistence.xml
ファイルの<property>
要素のいずれかによって構成できます。構成が矛盾する場合は、後者が優先されます。
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]"/>
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]"/>
SyntheticEvent
SyntheticEvent
プロパティは、HotCacheによるキャッシュの書込みが統合的かどうかを制御します。Coherenceキャッシュへの統合的な書込みはCoherenceでイベントをトリガーせず、フェデレーテッド・キャッシュに参加せず、Coherence CacheStore
実装を呼び出しません。イベントがトリガーされ、フェデレーテッド・キャッシュに参加し、CacheStore
実装が呼び出されるように(エンティティ・クラス・キャッシュに対してこれらが構成されている場合)、このクラスに対するHotCacheによるキャッシュ書込みを非統合にする場合は、JPAエンティティ・クラスについてこのプロパティをfalse
に設定します。すべてのエンティティ・クラスに対してこのプロパティのデフォルト値はtrue
です。
注意:
エンティティ・クラスに対してSyntheticEvent
をtrue
に設定し、そのエンティティ・クラス・キャッシュでCacheStore
実装が構成され、同じデータベースHotCacheへの書込みがCoherenceにレプリケートされている場合、無限レプリケーション・ループが発生するリスクがあります。このリスクは、現在のユーザーが実行した変更のフィルタ処理で説明されているようにトランザクションをデータベース・ユーザー別にフィルタリングすることで軽減できます。
エンティティ・クラス注釈
@Property(name = "SyntheticEvent", value = "[true|false]", valueType = boolean.class)
永続性XMLプロパティ
<property name="[fully qualified entity class name].SyntheticEvent" value="[true|false]"/>
eclipselink.cache.shared.default
eclipselink.cache.shared.default
プロパティは、EclipseLink内部共有キャッシュを有効化するために使用されます。HotCache JVM内の内部共有キャッシュは、persistence.xml
ファイル内のプロパティをfalse
に設定して無効化することが重要です。
永続性XMLプロパティ
<property name=" eclipselink.cache.shared.default" value="false"/>
HotCacheは、初期データセットをロードすることでキャッシュをウォーミングするために使用できます。このアプローチでは、初期キャッシュ・ウォーミングにGoldenGateおよびHotCacheを利用するため、カスタム・キャッシュ・ウォーミング・プログラムを作成する必要がありません。次の項では、HotCacheを使用した初期キャッシュ・ウォーミングに必要な手順の概要と、サンプル・コードを示します。
IL0001
、IL0002
などの名前の1つ以上の追跡ファイルがGG_HOME/dirdat
ディレクトリにできます。 ファイルが生成されない場合は、GG_HOME/dirrpt/initload.rpt
ファイルを確認してください。initload.rpt
を参照)、Coherence MBeansまたはコマンド行インタフェース・コマンドに従ったターゲットCoherenceキャッシュ内のエントリ数を比較することによって、初期ロードが正しく完了したことを検証します。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インストールにフェイルオーバーします。
GoldenGateの高可用性の実装の詳細は、HotCache JVMを埋め込むGoldenGateプロセスも含めて、Oracle GoldenGate Oracle Clusterwareを使用した高可用性で説明されています。
HotCacheはJPAプロバイダとしてEclipseLinkを使用します。EclipseLinkでは、たとえば、Oracle DatabaseのOracle Spatial and GraphオプションのSDO_GEOMETRY
やすべてのOracle DatabaseエディションでのXMLType
など、Oracle Databaseに固有のデータ型がサポートされます。このため、EclipseLinkでサポートされるOracle固有のデータ型がHotCacheでサポートされると考えることは妥当です。
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コンバータの使用が必要になる場合があります。EclipseLinkコンバータの詳細は、https://www.eclipse.org/eclipselink/documentation/2.6/jpa/extensions/annotations_ref.htm#CHDEHJEBを参照してください。次の項では、EclipseLinkでサポートされる特定のOracle Databaseデータ型に対するHotCacheサポートと、それらのデータ型を使用するためにHotCache内にEclipseLinkを構成する方法について説明します。
EclipseLinkでは、SDO_GEOMETRY
列をoracle.spatial.geometry.JGeometry
(Oracle Spatial and Graphオプションに用意されているJavaクラス)のインスタンスにマッピングすることで、Oracle DatabaseのOracle Spatial and Graphオプションがサポートされます。Oracle Spatial and Graphに対するEclipseLinkのサポートの詳細は、http://www.eclipse.org/eclipselink/documentation/2.6/solutions/oracledb002.htm#CHDJBFIJを参照してください。
そのため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のクラスパスに存在する必要があります。
EclipseLinkは、XMLType
列をjava.lang.String
またはorg.w3c.dom.Document
(JPAエンティティ内のマップされるフィールドのタイプによります)のインスタンスにマッピングすることで、Oracle DatabaseのXMLType
データ型をサポートします。EclipseLinkのXMLType
のサポートの詳細は、https://www.eclipse.org/eclipselink/api/2.6/org/eclipse/persistence/mappings/xdb/DirectToXMLTypeMapping.htmlおよびhttp://onpersistence.blogspot.in/2011/08/mapping-xmltype.htmlを参照してください。
そのためHotCacheは、XMLType
のタイプの列の、JPAエンティティのフィールドにバインドされたjava.lang.String
またはorg.w3c.dom.Document
のインスタンスへのマッピングをサポートします。このサポートには、http://onpersistence.blogspot.in/2011/08/mapping-xmltype.htmlで説明されているように、標準のEclipseLink DirectToXMLTypeMapping
を当該JPAエンティティ・フィールドに構成する必要があります。
XMLType
列のサポートに対して統合取得モードを使用するには、GoldenGateを構成する必要があります。詳細は、http://docs.oracle.com/goldengate/c1221/gg-winux/GIORA/system_requirements.htm#GIORA122およびhttp://docs.oracle.com/goldengate/c1221/gg-winux/GIORA/process_mode.htm#GIORA209を参照してください。