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

前
次

7 Oracle Coherence GoldenGate HotCacheとの統合

この章では、Coherenceキャッシュを使用するアプリケーションとともに (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操作で適用される変更内容は、対応するキャッシュ・オブジェクトに伝播されます。更新された行に対応するオブジェクトがキャッシュに含まれていなければ、デフォルトではキャッシュは変更されません。デフォルトの動作を変更するには、HonorRedundantInsertプロパティを参照してください。DELETE操作を実行すると、対応するオブジェクトがキャッシュに存在する場合はキャッシュから削除されます。

7.2.3 JPA関係サポート

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

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

7.3 前提条件

次の項の説明は、データベースが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アダプタの管理』を参照してください。

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

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.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 Coherenceキャッシュ・サーバーの構成

次の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にマップされています。

7.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は一意である必要があり、すべてのクラスタ・インスタンスで一致している必要があります。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.9 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ブート・オプション・セクションのシステム・プロパティで設定できます。

7.10 HotCache JPAプロパティの構成

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

7.10.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]"/>

7.10.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]"/>

7.10.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]"/>

7.10.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"/>

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

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

7.11.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ファイルを確認してください。

7.11.2 キャッシュ・ウォーマ抽出の作成および実行

キャッシュ・ウォーマ抽出を作成および実行する手順は次のとおりです。
  1. 下の例に示すように、warmcach.prmという名前のGoldenGate抽出パラメータ・ファイルを作成します。このパラメータ・ファイルで実行されるGoldenGate抽出プロセスは、初期ロード抽出の作成および実行で作成された追跡ファイルから初期ロード・データセットを読み取ります。
    EXTRACT warmcach
    USERID <user>, PASSWORD <password>
    GetEnv (JAVA_HOME)
    GetEnv (PATH)
    GetEnv (LD_LIBRARY_PATH)
    CUserExit libggjava_ue.so CUSEREXIT PASSTHRU INCLUDEUPDATEBEFORES
    getUpdateBefores
    NoTcpSourceTimer
    TABLE <schema>.*;
    
  2. 抽出パラメータ・ファイルはGoldenGate Javaアダプタを使用するので、下の例に示すように、対応するwarmcach.propertiesファイルをGG_HOME/dirprmに作成します。
    #============================================================
    goldengate.log.logname=cuserexit
    goldengate.log.level=DEBUG
    goldengate.log.tofile=true
    gg.brokentrail=true
    #============================================================
    # List of active event handlers
    gg.handlerlist=hotcache
    #============================================================
    # HotCache handler
    gg.handler.hotcache.type=oracle.toplink.goldengate.CoherenceAdapter
    #============================================================
    # Native JNI library properties
    goldengate.userexit.nochkpt=true
    goldengate.userexit.writers=jvm
    #============================================================
    # 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, 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抽出プロセスをGoldenGateインストールに登録します。
    cd $GG_HOME
    ./ggsci
    add extract warmcach, exttrailsource GG_HOME/dirrpt/IL
    前述の抽出パラメータ・ファイルおよびプロパティ・ファイルは、初期ロード抽出プロセスによって作成された追跡ファイルを読み取るGoldenGate warmcachプロセスによって使用されます。
  4. GoldenGate GGSCIコマンド行インタフェースを介して次のコマンドを発行して、GoldenGate warmcach抽出プロセスを実行します。
    cd $GG_HOME
    ./ggsci
    start mgr
    start extract warmcach
    
    
    warmcach抽出プロセスの実行が終了すると、初期ロード追跡ファイルの内容はJPAエンティティに変換されて、Coherenceキャッシュに挿入されます。
  5. 次のGGSCIコマンドを使用して、warmcach抽出を停止および登録解除します。
    stop extract warmcach
    delete extract warmcach
    

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

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

7.12 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インストールにフェイルオーバーします。

GoldenGateの高可用性の実装の詳細は、HotCache JVMを埋め込むGoldenGateプロセスも含めて、Oracle GoldenGate Oracle Clusterwareを使用した高可用性で説明されています。

7.13 Oracleデータ型のサポート

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を構成する方法について説明します。

7.13.1 SDO_GEOMETRYのサポート

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のクラスパスに存在する必要があります。

7.13.2 XMLTypeのサポート

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を参照してください。