oracle coherence goldengate hotcacheチュートリアル...oracle coherence goldengate...
TRANSCRIPT
Oracleホワイト・ペーパー
2014年2月
Oracle Coherence GoldenGate HotCacheチュートリアル
Oracle Coherence GoldenGate HotCacheチュートリアル
はじめに ...................................................................................................................................................... 3
1. Oracle GoldenGateについて ................................................................................................................ 4
2. Oracle GoldenGateの初期設定 ........................................................................................................... 5
3. Oracle GoldenGate向けのOracle Databaseの準備 ......................................................................... 7
4. JPAのセットアップ ............................................................................................................................ 10
4.1 EclipseでのJPAプロジェクトの作成 ....................................................................................... 10
4.2 アノテーションを使用したJPAの定義 .................................................................................. 12
4.3 XMLマッピングによるJPAの定義 ............................................................................................ 13
4.4 JPA APIによるJPAの永続性のテスト ...................................................................................... 15
4.5 Coherence APIによる永続性のテスト .................................................................................... 17
5. Coherence Extendのセットアップ .................................................................................................. 19
5.1 キャッシュ・サーバーのCoherence*Extendの構成 ........................................................... 20
5.2 キャッシュ・クライアントのCoherence Extendの構成 .................................................... 21
5.3 HotCacheでのPOF対応オブジェクトの使用 ......................................................................... 22
5.4 Coherenceのテスト ................................................................................................................... 22
6. HotCacheの構成 ................................................................................................................................. 23
6.1 プライマリExtractファイルの作成......................................................................................... 24
6.2 Java Extractファイルの作成 ..................................................................................................... 25
6.3 Java User Exitプロパティ・ファイルの作成 ......................................................................... 25
6.4 Extractファイルの登録 .............................................................................................................. 27
6.5 プライマリExtractファイルと証跡ファイルの関連付け .................................................... 28
7. HotCacheのテスト ............................................................................................................................. 32
8. HotCacheによる関係定義の使用 ..................................................................................................... 32
8.1 OneToOne関係の実装 ............................................................................................................... 32
8.2 OneToMany関係の実装 ............................................................................................................. 33
9. GoldenGateとHotCacheのトラブルシューティング ................................................................... 35
9.1 GoldenGate Extractプロセスのチェック ............................................................................... 36
9.2 HotCacheプロパティ・ファイルの確認 ................................................................................ 36
Oracle Coherence GoldenGate HotCacheチュートリアル
はじめに
サード・パーティ製品でデータベースを更新すると、古くなり失効している可能性のあるデータをOracle Coherenceアプリケーションで使用する可能性があります。Oracle Coherence GoldenGate HotCacheは、データベースを監視してすべての変更内容をCoherenceキャッシュにプッシュすることで、この問題を解消します。
HotCacheには、古くなったデータのみを処理する効率的なプッシュ・モデルが採用されています。データベースに変更があった場合のみデータがプッシュされるため、待機時間の短さが保証されます。
HotCacheはどのようなCoherenceアプリケーションにも追加できます。データベース・データからJavaオブジェクトへのマッピングの取得には標準JPAが使用されます。構成は、XMLのみで取得することも、アノテーション付きXMLで取得することもできます。
このチュートリアルは、Oracle GoldenGateのドキュメントとCoherenceのドキュメントから、GoldenGateのセットアップとHotCacheのセットアップに関する部分のみを取り出して1つにまとめたものと言えます。
このチュートリアルでは、Oracle Coherence 12cに導入された新しいHotCache機能について、ステップ・バイ・ステップ方式で説明します。サポートされるOracle GoldenGateのリリースは11g Release 1と11g Release 2です。
このドキュメントは、次の各項を前提としています。
• (Coherenceを含む)Oracle WebLogic Server 12cのフル・インストール。
• Oracle GoldenGate 11g Release 1または11g Release 2をダウンロードしてインストールしてあること(解凍するだけです)。
• GoldenGate Javaアダプタをダウンロードしてインストールしてあること(解凍するだけです)。
• Eclipse IDE(Oracle Enterprise Pack for Eclipse)などのIDE、または使用できる好みのIDEがあること。
• GoldenGateの実用的な知識を有していること。
• Coherenceの実用的な知識を有していること。
• Eclipseに精通していること。
• JPAに精通していること。
注:
• 便宜上、このチュートリアルではIDEを使用します。
3
Oracle Coherence GoldenGate HotCacheチュートリアル
1. Oracle GoldenGateについて
GoldenGateのアーキテクチャはHotCacheに関連しているため、GoldenGateを使ったことがないユーザーがいる場合に備え、セットアップの説明をする前にGoldenGateについて簡単に説明します。
GoldenGateはいくつかのプロセスで構成されており、各プロセスが別々の機能の実行を担当します。
• Managerプロセス:他のGoldenGateプロセスを実行するために、稼働している必要があるアンブレラ・プロセスです。Managerプロセスは、失敗したプロセスを自動的に再起動するように構成できます。また、依存するすべてのプロセスが証跡ファイルの使用を終了したら、証跡ファイルを自動的に消去するように構成することもできます。
• プライマリExtractプロセス:このプロセスは、コミットされたリアルタイムのトランザクションをトランザクション・ログから取得します。Oracle Databaseの場合は、オンラインREDOログから取得します。また、バルク・モードで動作させることもでき、その場合は、ターゲット表の初期ロードのために、表に対してSELECT *が実行されます。ただし、これはHotCache向けに使用される構成ではありません。プライマリExtractプロセスはターゲット/リモート証跡ファイルにデータを直接プッシュしますが、HotCacheを構成している場合は、ローカルの証跡ファイルに書き込むようにセットアップします。
• 証跡ファイル:コミットされたトランザクションを、GoldenGateのプロセスで読取り可能な標準形式で格納するバイナリ・ファイルです。
• User Exit Extractプロセス:証跡ファイルを読み取り、Java Adapterをコールし、属性をプロパティ・ファイルに実装し、データベース変更のXML表現を生成し、それをJavaアダプタ(この場合はHotCache)に渡します。
注:
• すでに説明したとおり、GoldenGate Managerプロセスは、前述したすべてのGoldenGateプロセスを制御します。また、他の
必要なGoldenGateプロセスを起動するようにGoldenGate Managerプロセスを構成できます。
データベース間のデータ・レプリケーション機能の他に、GoldenGateには標準設定のまま使用できる"ハンドラ"が用意されています。たとえば、JMSハンドラ(ユーザー・イグジット)があり、これを使用すると、あらかじめ定義しておいたJMSプロバイダにデータベース表への変更をJMSメッセージとして送信したり、ファイルに書き込んだりできます。
HotCacheはGoldenGateのイベント・ハンドラを利用します。
これらのカスタム・ハンドラは"ユーザー・イグジット"として動作します。ユーザー・イグジットはUser Exit Extractプロセスからコールされます。GoldenGate Extractプロセスは、変更を検出するたびにその内容をXMLドキュメントに変換し、"ユーザー・イグジット"が必要に応じてこれを使用してさらに変更を処理できるようにします。
たとえば、"Accounts"という名前の表があるとします。挿入操作が検出された場合は、新たに追加されたレコードを表す次のXMLがExtractプロセスによって生成されます。
4
Oracle Coherence GoldenGate HotCacheチュートリアル
図1.AccountsレコードのXML
XML表現を見て分かるとおり、表名、操作の種類(挿入、更新、削除)および列の数が簡単に見つかります。また、これが"update"操作であった場合に、"before"値を送信するようにGoldenGateを構成していたら、"before"値と"after"値を取得することになります。
上のXML形式がGoldenGateのデフォルト形式であり(本書の執筆時点)、XMLの書式設定には"Velocityマクロ"が使用されます。ただし、データベース操作をXMLで表現するためにエクストラクタ・プロセスで使用できる独自のカスタム・フォーマッタを開発することもできます。
このようにGoldenGateは実に柔軟であるため、カスタムJavaハンドラやカスタム・フォーマッタを使用する方法からGoldenGate固有の一連の標準ハンドラを使用する方法まで、Extractプロセスの動作をカスタマイズするためのオプションは多数あります。
これで、GoldenGateのアーキテクチャの復習を終わります。次はセットアップについて説明します。
2. Oracle GoldenGateの初期設定
GoldenGateをインストールしたら、実行できる状態にするために、いくつかの初期セットアップを実行する必要があります。本書では、GoldenGateをインストールしたディレクトリを$GG_HOMEとします。
GoldenGateには、"GoldenGate Software Command Interpreter"(ggsci)というコマンドライン・ツールが用意されていますが、これは$GG_HOMEの下にあります。
5
Oracle Coherence GoldenGate HotCacheチュートリアル
初期セットアップに伴う作業は、GoldenGate Managerに必要なすべてのディレクトリの作成と、GoldenGate Managerが使用するTCPポートの定義です。そこで、必要なディレクトリを最初に作成し、Managerが使用するTCPポートを次に定義し、最後にGoldenGate Managerを起動します。
手順1:Oracle GoldenGateの起動
GoldenGate初期セットアップを開始するには、$GG_HOMEに移動してggsciを起動します。
./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14 Copyright
(C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
手順2:ディレクトリ構造の作成
次のコマンドを使用して、GoldenGate Managerプロセスおよび他のプロセスに必要なすべてのサブディレクトリを$GG_HOMEの下に作成します。
GGSCI (bhijazi-linux) 1>CREATE SUBDIRS
手順3:TCPポートの指定
次のコマンドでエディタ(UnixまたはLinuxを使用している場合は"vi")を開き、Oracle GoldenGate Managerが使用するTCPポートを定義します。
GGSCI (bhijazi-linux) 1>EDIT PARAMS MGR
PORT tcp_port_numberをファイルに入力します。次に例を示します。
PORT 7809
お使いのエディタの保存コマンドを使用してファイルを保存します。すると、コマンド・プロンプトに戻ります。
手順4:Managerプロセスの起動
start mgrコマンドを入力してManagerを起動します。
GGSCI (bhijazi-linux) 1> START MGR
手順5:Managerプロセスのステータスの確認
Managerのステータスを確認するには、status mgrコマンドを入力します。
GGSCI (bhijazi-linux) 2> status mgr
Manager is running (IP port bhijazi-linux.7809)
exitコマンドを使用して、GoldenGateコマンドライン・ツールを終了します。
GGSCI (bhijazi-linux) 4>exit
6
Oracle Coherence GoldenGate HotCacheチュートリアル
これでGoldenGateの初期セットアップが終了し、データベースのセットアップができる状態になりました。本書では、GoldenGateが対応しているバージョンのOracle Databaseがすでにインストールされていることを前提としています。
3. Oracle GoldenGate向けのOracle Databaseの準備
GoldenGateでOracle Database表の変更の取得を開始するには、データベースをGoldenGate向けに準備する必要があります。下に記述されている手順をすべて実行するには、SYSユーザーのパスワードが必要になることがあります。データベースへのアクセスには、SQLPlusまたは好みのツールを使用します。データベースにSYSユーザーとしてログインします。
手順1:アーカイブ・モードの有効化
データベースがアーカイブ・モードになっているかどうかを確認します。データベースがアーカイブ・モードになっているときは、REDOログ・ファイルのコピーが作成されます。抽出プロセスではトランザクション・ログから変更が読み取られますが、REDOに欠落がある場合など、状況によってはアーカイブ・ログ・ファイルからトランザクションが取得されることもあります。
確認するには、次の文を発行します。
SQL>select log_mode from v$database;
アーカイブ・モードが有効な場合は、次のような結果が戻されます。
LOG_MODE
------------
ARCHIVELOG
データベースがアーカイブ・モードになっていない場合は、次のSQL文を発行して有効にします。
SQL>shutdown immediate;
SQL>startup mount;
SQL>Alter database archivelog;
SQL>Alter database open;
手順2:サプリメンタル・ロギングの有効化
データベースがサプリメンタル・ロギングをサポートしていることを確認します。Oracle Databaseでは通常、変更された行のROWIDとこの列の新しい値を格納するのにREDOログを使用するため、サプリメンタル・ロギングが必要になります。
2つのデータベースを処理すると、ROWIDが別々になります。したがって、サプリメンタル・ロギングを実装することで、表の主キー、一意キー、またはすべての列(一部、例外が適用されます)もREDOログに含めるよう、Oracle Databaseに指示します。
7
Oracle Coherence GoldenGate HotCacheチュートリアル
サプリメンタル・ロギングを使用しているかどうかを確認するには、次のSQL文を発行します。
SQL>select supplemental_log_data_min from v$database;
結果がYesの場合は、次の手順に進みます。Yesでない場合は、次の文を発行してサプリメンタル・ロギングを有効にします。
SQL>alter database add supplemental log data;
これで、GoldenGate向けデータベースの前提条件の構成が終了したので、次はGoldenGateがトランザクション・データの抽出の管理に使用する特殊なユーザーを作成します。
手順3:ユーザーの作成と権限の付与
名前がggownerでパスワードがggownerのユーザーを作成します。ユーザーを作成したら、次の権限一式を付与する必要があります。
SQL>create user ggowner identified by ggowner;
SQL>grant connect to ggowner;
SQL>grant dba to ggowner;
SQL>grant create session to ggowner;
SQL>grant alter session to ggowner;
SQL>grant select any dictionary to ggowner;
SQL>grant select any table to ggowner;
SQL>grant select any transaction to ggowner;
SQL>grant unlimited tablespace to ggowner;
注:
• GoldenGateのユーザーに"Any"を付与するのは思い切りがよすぎると感じるかもしれませんが、より限定された権限と"Any"
とをいつでも置き換えることができます。たとえば、"grant select any table to ggowner"を"grant select
scott.employee to ggowner"に置き換えることができます。
手順4:GoldenGateからデータベースへのログイン
SQLセッションからログアウトします。今度は、先ほど作成したユーザーのggownerを使用して、データベースへのログインを試します。使用するのはGoldenGateのコマンドラインです。
$GG_HOME/./ggsci
GGSCI (bhijazi-linux) 1>dblogin userid ggowner, password ggowner
Successfully logged into database
Stop GG Manager and exit the shell:
GGSCI (bhijazi-linux) 3> stop mgr
GGSCI (bhijazi-linux) 4>exit
手順5:データベース表の作成
このチュートリアルで使用する、Customersというサンプル表を作成します。この表に含まれる列は次のとおりです。
• CustID integer
• Firstname varchar2
8
Oracle Coherence GoldenGate HotCacheチュートリアル
• Lastname varchar2
• Telephone varchar2
Customers表にはCustIDを主キーとして定義します。好みのSQLエディタを使用して表を作成します。
SQL> CREATE TABLE "SCOTT"."CUSTOMERS" ("CUSTID" INTEGER NOT NULL,
"FIRSTNAME" VARCHAR2(20) NOT NULL, "LASTNAME" VARCHAR2(20) NOT NULL,
"TELEPHONE" VARCHAR2(15), PRIMARY KEY ("CUSTID") VALIDATE);
コミットされたトランザクションを取得する必要がある表のサプリメンタル・ロギングを有効にします。有効にするには、GoldenGateのコマンドライン・インタフェースを使用します。
$GG_HOME/./ggsci
GGSCI (bhijazi-linux) 1>dblogin userid ggowner, password ggowner
GGSCI (bhijazi-linux) 2>add trandata SCOTT.CUSTOMERS
注:
• 1つのスキーマの配下にあるすべての表を監視している場合は、次のコマンドを発行できます。GGSCI (bhijazi-linux) 2>add
trandata schema_name.*
手順6:Extractプロセスで使用する表のメタデータの作成
Extractプロセスには、証跡データを記述するメタデータが必要です。このメタデータは、データベース、または監視する表を記述したソース定義ファイルから作成できます。この例で使用するメタデータには、読取り対象の証跡ファイルに含まれる列名とデータ型を定義します。ファイルを作成するには、次のコマンドを入力します。
GGSCI (bhijazi-linux) 3>edit params defgen
このコマンドでファイル・エディタが開きます。ファイルに次のテキストを入力します。
USERID ggowner, password ggowner
defsfile dirdef/customerdef.def
TABLE SCOTT.CUSTOMERS;
ファイルを保存します。これで、defgen.prmというファイルが$GG_HOME/dirprmディレクトリに作成されます。
ファイル中のテキストは、表scott.customers用のcustomerdef.defという名前の定義ファイルをdirdefディレクトリに作成するよう、GoldenGateに指示しています。
GGSCI (bhijazi-linux) 4>exit
手順7:表定義ファイルの生成
次は、下に示す方法でdefgenコマンドを起動します。このコマンドは$GG_HOMEの下にあります。
./defgen paramfile dirprm/defgen.prm
9
Oracle Coherence GoldenGate HotCacheチュートリアル
このコマンドを実行すると、前の手順で作成したファイルが読み取られ、sourceDefsパラメータでJava Extractファイルに指定する必要がある表定義ファイルが作成されます。defgenコマンドで作成されたファイルを開き、調査します。
HotCacheはJPAに依存しているため、次の項では単純なJPAプロジェクトをセットアップし、persistence.xmlファイルや監視する表のPOJO表現など、JPAに必要なすべてのアーチファクトを作成します。
4. JPAのセットアップ
JPAは、JPAアノテーションを使用する方法、またはXMLマッピング・ファイルを使用して表を表現する方法のいずれでも動作させられます。JPAアノテーションを使用してJPAエンティティを定義する方法については、4.2項で説明します。XMLのみによるマッピングを使用してJPAエンティティを定義する方法については、4.3項で説明します。
4.1 EclipseでのJPAプロジェクトの作成
このチュートリアルではEclipse IDEを使用して新しいJPAプロジェクトを作成します。
注:
• JPA/TopLinkのみを対象にしているため、この項は省略可能です。HotCacheで必要なのはJPAの必須アーチファクトのみであ
るため、persistence.xmlファイルとPOJOを独自に作成できる場合、またはすでにこれらがある場合は、この項を
スキップしてかまいません。
手順1:Eclipse IDEでのJPAプロジェクトのセットアップ
Eclipse IDEを開きます。HotCacheという名前の新しいワークスペースを作成します。Eclipse IDEで、「File」→「New」→「Others」→「JPA」→「JPA Project」→「Next」の順にクリックして、新し
いJPAプロジェクトを作成します。新しいプロジェクトにCoherenceHotCacheという名前を付けます。
10
Oracle Coherence GoldenGate HotCacheチュートリアル
図2.EclipseでのJPAプロジェクトの構成
「Finish」をクリックします。Eclipse Project Explorerでプロジェクトを展開します。srcディレクトリの下に、mypojosという名前の新しいフォルダを作成します。
注:
• META-INFディレクトリの下には、JPAプラグインによって作成されたpersistence.xmlファイルが存在する必要があります。
手順2:persistence.xmlファイルの編集
「persistence.xml」ファイルをダブルクリックします。表示された画面ではファイルのカスタマイズが可能です。今回は、データベースへの接続の定義のみ行います。
「Connection」タブをクリックし、Transaction typeドロップダウン・リストから「Resource Local」を選択します。JDBC connections propertiesセクションで、データベースの情報を入力します。構成例を下の図に示します。
11
Oracle Coherence GoldenGate HotCacheチュートリアル
図3.Eclipse IDEのデータベース接続画面の構成
プロジェクトのクラスパスには必ずojdbc6.jarファイルを追加してください。
4.2 アノテーションを使用したJPAの定義
前述したとおり、JPAはJPAアノテーションまたはXMLマッピングのいずれかで指定できます。JPAアノテーションではなくXMLマッピングを使用する場合は、次の項に進んでください。
Eclipse JPAプラグインを使用すると、データベース表にエンティティをポイントする方法で、JPAエンティティを自動的に作成できます。自動作成するには、作成したディレクトリ(mypojos)を右クリックし、「New」→「Entities from Tables」の順に選択します。
すると、画面が表示されますが、データベース接続がまだ存在しない場合は、ここで作成することが必要になる場合があります。
12
Oracle Coherence GoldenGate HotCacheチュートリアル
右端にある「+」記号をクリックします。表示されたリストからデータベースを選択し、「Next」をクリックします。必要なすべてのデータベース情報を入力し、接続のテストを実行します。接続が成功したら「Finish」をクリックします。
Schemaドロップダウン・リストからスキーマを選択し、先ほど作成した表を選択します。「Finish」をクリックします。
この手順で、次の2つのことが完了しました。
• JPAプラグインによる表のPOJO表現の作成。
• JPAプラグインによるpersistence.xmlファイルの更新(このクラスがJPAの管理下に置かれるこ と を 示 す 内 容 へ の 書 換 え ) 。 新 し く 作 成 さ れ た ク ラ ス はCustomersと い う 名 前 で 、src/mypojosディレクトリの下に表示される必要があります。
persistence.xmlファイルには、JPAプラグインによって作成されたPOJOを表すエントリが、このプラグインによって追加されます。persistence.xmlファイルを調査し、このことを確認します。
注:
• persistence.xmlファイルを見ると、最上位がpersistence-unitになっていることが分かります。
後で必要になるため、名前属性の値をメモしておいてください。
4.3 XMLマッピングによるJPAの定義
XMLマッピングを使用してJPAをセットアップするには、次の項目を作成する必要があります。
• 永続化する表を表すPOJO。
• XMLマッピング・ファイル(このファイルのデフォルト名はorm.xmlです)。
先ほど、Customersという名前の表を作成しました。ここでは、Customers表を表すPOJOを作成します。
手順1:表を表すJavaクラスの作成
Customers.javaという名前の新しいJavaクラスをmypojosフォルダに作成します。次の図は、Customers.javaファイルのサンプルです。
13
Oracle Coherence GoldenGate HotCacheチュートリアル
図4.Customer.javaファイルのリスト
手順2:JPAマッピング・ファイルの作成
いま作成したCustomer.javaクラスを表すJPAマッピング・ファイルを作成します。META-INFディレクトリを右クリックし、「New」→「Mapping File」の順に選択します。次の図はMapping File画面を示しています。
図5.Eclipse IDEのNew Mapping File画面の構成
14
Oracle Coherence GoldenGate HotCacheチュートリアル
「Add to Persistence unit」チェック・ボックスが選択されていることを確認し、「Finish」をクリックします。これで、orm.xmlという名前のファイルがMETA-INFディレクトリに作成されます。orm.xmlファイルにはJPA XMLマッピングが定義されています。Customers表が反映されるようにorm.xmlファイルを更新します。次の図はこのファイルの内容を示しています。
図6.orm.xmlファイル内のCustomer表のマッピング
JPA XMLマッピングについての説明は、このチュートリアルの範囲に含まれません。XMLマッピングの基礎知識が必要な場合は次のURLを参照してください。
http://en.wikibooks.org/wiki/Java_Persistence/Mapping
『Pro JPA 2』(Mike Keith著)も役に立ちます。
http://www.amazon.com/Pro-JPA-2-Mike-Keith/dp/1430249269
4.4 JPA APIによるJPAの永続性のテスト
この項はHotCacheと直接関係しませんが、JPA/TopLink構成が正しいことを確認するために用意してあります。新しいレコードをデータベースに挿入し、それを選択して戻す方法で、JPA/TopLinkの構成をテストします。
手順1:JPAの構成をテストするためのJavaクラスの作成
JPA APIを使用して新しいレコードをデータベース表に挿入するNewCustomersという名前のJavaクラスをmypojosディレクトリに作成します。Javaクラスは次のコードのようになります。
15
Oracle Coherence GoldenGate HotCacheチュートリアル
手順2:テスト・クラスの実行
クラスを実行します。誤りがなければ、新しいレコードがデータベースに挿入されます。好みのSQLビューアを使用して表を確認します。
図7.データベースから返された新しい顧客レコード
手順3:名前付き問合せによるJPA構成のテスト
JPA/TopLink接続を詳しくテストするために、JPAプラグインによって作成されたCustomer.java
クラスに2つの名前付き問合せを追加します。@Tableアノテーションの下に、次のアノテーションを追加します。
@NamedQueries({
@NamedQuery(name = "CountCustomers", query = "select count(c) from
Customer c"),
@NamedQuery(name = "GetCustomer", query = "select c from Customer c
where c.custid=:id")})
16
Oracle Coherence GoldenGate HotCacheチュートリアル
手順4:顧客を取得するJavaクラスの作成
GetCustomer.javaというJavaクラスを作成します。コードは次のようになります。
これで、persistence.xmlおよびデータベース表を表すPOJOの用意ができたので、Coherenceのセットアップを開始できます。
手順5:Eclipseプロジェクトのエクスポート
プロジェクトに含まれる一部のアーチファクトはHotCacheアダプタで必要になり、そのアーチファクトはアダプタのクラスパスに存在している必要があるため、先ほど作成したEclipseプロジェクトをエクスポートします。エクスポートするには、「File」→「Export」→「Java」→「JarFile」の順にクリックし、ファイルの作成場所を指定します。たとえば、JARファイルにはcustomerJPA.jar
という名前を付けることができます。
4.5 Coherence APIによる永続性のテスト
前の項では、JPA APIを使用してデータベースの永続性をテストする方法を説明しました。JPAのセットアップをテストするもう1つの方法として、Coherenceを使用してデータベースの読取り/書込みを実行するやり方があります。
17
Oracle Coherence GoldenGate HotCacheチュートリアル
Coherenceは、データベース、Webサービス、パッケージ・アプリケーション、ファイル・システムなど、あらゆるデータソースの自動読取り/書込みキャッシングをサポートします。とはいえ、データベースがもっとも一般的なユースケースです。
効果的なキャッシュとしては、集中的な読取り専用操作と読取り/書込み操作の両方をサポートする必要があり、読取り/書込み操作の場合は、キャッシュとデータベースが完全に同期化され続ける必要があります。そのために、Coherenceはリードスルー、ライトスルー、リフレッシュ・アヘッド、およびライト・ビハインド・キャッシングをサポートします。
いったん、Coherenceにデータベースの読取り/書込みをセットアップしたら、Coherenceとの対話に使用するものと同じCoherence APIを使用できます。これは、Coherenceが構成ベースであるためです。このことから、コードの変更も一連の新しいAPIの学習も必要にならないため、この機能は特に強力なものになっています。
たとえば、Coherenceを使用してPerson POJOをputするだけの単純なクライアントがあるとすると、コードは次のようになります。
図8.PersonオブジェクトをキャッシュにputするJavaリスト
Coherenceをデフォルト構成で実行している場合は、メモリにエントリが保存されるだけです。ところが、データベースの読取り/書込みを実行するようにCoherenceを構成すると、新規データはデータベースに挿入され、データが更新された場合はデータベースが更新されます。
Coherenceからのデータのgetにも同じ考え方が適用されます。前のコード例でCoherenceにputされたエントリをgetする例を検討してみましょう。
図9.CoherenceキャッシュからのPersonエントリの取得
エントリをキャッシュから取得する場合、Coherenceはメモリ内にエントリがあるかどうかを確認します。エントリがない場合は、データベースからフェッチしたエントリをメモリに保存します。
注:
• 先ほど説明したとおり、Coherenceはリードスルー、ライトスルー、リフレッシュ・アヘッド、およびライト・ビハインド・
キャッシングをサポートします。さまざまな読取り/書込みアプローチについての説明は、『Developing Applications with
Oracle Coherence』の"Caching Data Sources"を参照してください
(http://docs.oracle.com/cd/E50629_01/coherence/COHDG/cache_rtwtwbra.htm#CFHEJHCI)。
18
Oracle Coherence GoldenGate HotCacheチュートリアル
Coherenceには、CacheStoreを使用したデータベースの読取り/書込み機能があります。CacheStoreは、キャッシュと基盤データソースとの接続に使用するアプリケーション固有のアダプタです。CacheStore実装は、Hibernate、JPA(標準ベースのアプローチ)、TopLinkなどのデータ・アクセス・メカニズムを使用してデータソースにアクセスします。
CacheStore実装は、データソースから取得したデータを使用してJavaオブジェクトを構築する方法を理解し、オブジェクトをデータソースにマッピングして書き込み、データソースからオブジェクトを消去します。
Coherence CacheStoreの定義についてはこのチュートリアルで説明しませんが、標準設定で使用できるCoherence CacheStore実装のセットアップ方法については、上のリンクで詳しく説明しています。
Coherenceには、Hibernate、JPA、TopLinkに基づくCacheStore実装が3つあり、標準設定で使用できます。要件に適合するカスタムCacheStoreを開発することもできます。
5. Coherence Extendのセットアップ
HotCacheからCoherenceへの接続にはCoherence*Extendを使用する方法をお薦めしますが、デフォルト・プロトコル(TCMP)を使用してCoherenceに接続することもできます。
テストしているだけの場合は、この項をスキップしてもかまいません。Coherenceを開始する必要がある場合は、$COHERENCE_HOME/bin/cache-server.shを実行するだけで開始できます。
Coherence*Extendは、クラスタ外で稼働するクライアントとクラスタ内で稼働するプロキシ・サービスの2つの基本コンポーネントで構成されます。クライアントAPIには、CacheServiceインタフェースとInvocationServiceインタフェースの両方の実装が含まれ、リクエストはすべて、これらのインタフェース経由で、Coherenceクラスタ内で稼働するプロキシにルーティングされます。ルーティングされたリクエストはプロキシから実際のCoherenceクラスタ・サービス(パーティション・キャッシュ・サービスやレプリケーション・キャッシュ・サービスなど)に委任され、これらのサービスがクライアント・リクエストに応答します。
この項では、Coherence*Extendを有効にしてキャッシュ・サーバーを作成します。Coherence*Extendの有効化はとても簡単です。必要な作業は、Coherenceキャッシュ構成ファイルを変更してプロキシ・サービスを有効にすることだけです。
Extendを使用してクライアントを接続する方法には、次の2つがあります。
• <proxy-scheme>を有効にするキャッシュ構成ファイルを持つキャッシュ・サーバー・プロセスに接続する方法。または
• キャッシュ・サーバーとして動作しない専用プロキシ・サーバー・プロセスに接続する方法。
プロキシ・サーバーはすべてのクライアント接続を処理するため、storage-disabledにすることをお薦めします。Coherenceのセットアップを簡素化するために、このチュートリアルでは1つ目の方法を使用します。
19
Oracle Coherence GoldenGate HotCacheチュートリアル
注:
• Extend経由でのCoherence接続にどちらの方法を使用するかにかかわらず、クライアント側とサーバー側の両方のキャッシュ
構成ファイルでキャッシュ名を指定する必要があります。
5.1 キャッシュ・サーバーのCoherence*Extendの構成
次の手順を実行し、キャッシュ・サーバーのCoherence*Extendを構成します。
手順1:Coherenceキャッシュ構成ファイルの構成
coherence-cache-config.xmlファイルがない場合は、$COHERENCE_HOME/libディレクトリにあるcoherence.jarファイルから抽出できます。
Coherence*Extendを有効にします。coherence-cache-config.xmlファイルを開き、次に示すような内容のプロキシ・サービス・セクションを探します。
重要な値は太字で示しています。Coherence*Extendを実行するホストとリスニングするTCPポートをこれらの値で指定します。最後のプロパティ(tangosol.coherence.extend.enabled)の値はtrueに変更する必要があります。
手順2:Coherence*Extendのテスト
テ ス ト を 行 う た め に 、 cache-server.sh フ ァ イ ル ま た は cache-server.cmd フ ァ イ ル($COHERENCE_HOME/binの下にあります)のコピーを作成し、cache-server-extend.sh、cache-server-extend.cmdなどの名前を付けます。新しく作成したファイルを開き、次の-Dフラグを追加します。
-Dtangosol.coherence.cacheconfig= path_to_the_server_cache_configuration_file
次に、キャッシュ・サーバーを実行します。実行中のサーバーの出力を詳しく見ると、有効になって い る Coherence サ ー ビ ス が 最 後 の セ ク シ ョ ン に 表 示 さ れ て い る は ず で す 。 最 後 の 行
(ProxyService)は、有効にしたプロキシ・サービスが実行中であることを示しています。
20
Oracle Coherence GoldenGate HotCacheチュートリアル
図10.キャッシュ・サーバーの出力で有効化されているサービス
5.2 キャッシュ・クライアントのCoherence Extendの構成
ク ラ イ ア ン ト 側 に 新 し い Coherence キ ャ ッ シ ュ 構 成 を 作 成 し ま す 。 フ ァ イ ル にextend-client-config.xmlという名前を付けます。次のXMLコードをコピーし、ファイルに貼り付けてかまいません。
21
Oracle Coherence GoldenGate HotCacheチュートリアル
重要な要素は太字で示しています。このcache-name要素は、どのようなキャッシュ名でも受け付けることを示しています。これが正しく動作するためには、cache-name要素のワイルドカード値
(*)がサーバー側のCoherenceキャッシュ構成ファイルにも存在する必要があります。前の項で作成したサーバー側のファイルを見直せば、このファイルでもcache-name要素にワイルドカード値(*)がデフォルトで指定されていることが分かります。
2つ目のaddress要素と3つ目のport要素は、サーバー側のCoherenceキャッシュ構成ファイルで定義した値と一致している必要があります。
注:
• 複数のExtend Serverのアドレスを定義できます。
5.3 HotCacheでのPOF対応オブジェクトの使用
POF 対 応 の POJO を HotCache と 併 用 す る 場 合 は 、 次 の 図 に 示 す よ う に 、oracle.eclipselink.coherence.integrated.cache.TopLinkGridPortableObject クラスとoracle.eclipselink.coherence.integrated.cache.TopLinkGridSerializerクラスをPOF構成ファイルに追加します。
図11.HotCache用のPOF構成
注:
• 必ず、次のCoherence POF対応フラグをJava User Exitプロパティ・ファイルに追加してください。
-Dtangosol.pof.enabled=true
-Dtangosol.pof.config=POF構成ファイルへのパス
5.4 Coherenceのテスト
ク ラ イ ア ン ト 構 成 が 正 常 に 動 作 す る こ と を テ ス ト す る に は 、$Coherence_Home/bin/coherence.shキャッシュ・サーバー・ファイルのコピーを作成し、extend- coherence.shなどの名前で保存します。キャッシュ構成システム・プロパティ-Dtangosol.coherence.cacheconfig=を使用して、先ほど作成したキャッシュ構成ファイルを指定します。
22
Oracle Coherence GoldenGate HotCacheチュートリアル
注:
• coherence.sh(Windowsプラットフォームの場合はcoherence.cmd)ファイルはCoherenceが提供するコマンドライン
で、Coherenceキャッシュのエントリの表示、Coherenceキャッシュへのエントリのputなどができます。
• toplink-grid.jarとeclipselink.jarがCoherenceノードのクラスパスに含まれていることを確認してください。
extend-coherence.shフ ァ イ ル を 実 行 し ま す 。Map(?)プ ロ ン プ ト が 返 さ れ ま す 。cache
testingと入力します。すると、testingという名前のキャッシュがまだ存在しない場合は、この名前のキャッシュが作成されます。次に、新しいエントリをキャッシュにputします。
Map (?): cache testing
Map (testing): put 1 test
extend-coherence.shのインスタンスをもう1つ起動します。まず、最初のセッションで作成したキャッシュを取得します。
Map (?): cache testing
先ほど最初のセッションで追加したエントリを取得します。
Map (testing): get 1 test
正しいエントリが返された場合は、Coherence Extendの構成が正しく動作しています。プロンプトを終了するには、byeと入力します。
6. HotCacheの構成
• HotCacheではGoldenGateが提供するカスタムJava APIを使用します。次の項目を定義する必要があります。
• トランザクション・ログを読み取って変更を証跡ファイルに書き込むプライマリExtractパラメータ・ファイル
• プライマリExtractによって作成された証跡ファイルを読み取り、変更をXMLドキュメントに変換し、それをJava User Exitに渡すJava Extractパラメータ・ファイル
• HotCacheの構成とプロパティがすべて定義されているJava User Exitプロパティ・ファイル
注:
• いったんExtractファイルが作成されたら、Extractパラメータ・ファイルをGoldenGate Managerプロセスに登録し、プロセス
が書込みまたは消費する証跡ファイルと関連付けます。Extractのセットアップを開始する前に、LD_LIBRARY_PATH変数を設
定し、ここに$GG_HOMEを含める必要があります。使用しているハードウェア(64ビットまたは32ビット)に応じて、
$JAVA_HOME/jre/lib/amd64/server ( 64 ビ ッ ト ・ プ ラ ッ ト フ ォ ー ム の 場 合 ) ま た は
$JAVA_HOME/jre/lib/i386/server(32ビット・プラットフォームの場合)も追加する必要があります。
• Windowsプラットフォームの場合は、$PATH変数に必ず$JAVA_HOME/jre/lib/i386/serverを追加してください。
23
Oracle Coherence GoldenGate HotCacheチュートリアル
6.1 プライマリExtractファイルの作成
プライマリExtractファイルは、更新されたレコードをREDOログから証跡ファイルに抽出するときにGoldenGateによって使用されます。
プライマリExtractファイルを作成し、custext.prmという名前を付けます。ファイル名は8文字までです。ファイルは必ず$GG_HOME/dirprmディレクトリの下に作成してください。
次に示すのが、このファイルの内容です。
EXTRACT custext
USERID ggowner, PASSWORD ggowner
EXTTRAIL /home/oracle/ggtrails/customers/cu
getUpdateBefores
TABLE SCOTT.CUSTOMERS;
各行には次の意味があります。
• EXTRACTは、この行で命名するExtractプロセスのExtractパラメータ・ファイルとしてこのパラメータ・ファイルを定義します。Extractの名前は、このExtractパラメータ・ファイルのファイル名と一致する必要があります。
• USERID/PASSWORDは、Extractプロセスがデータベースにログインするときに使用されます。
• EXTTRAILは、証跡ファイル("1. Oracle GoldenGateについて"を参照)を作成する必要があるGoldenGateを指します。GoldenGateによって自動的に生成されるファイル名には接頭辞(cu)が追加されること、および接頭辞は2文字のみで構成される必要があることに注意してください。
• GetUpdateBeforesは、変更されたデータの"変更前"のビューを送信します。
• 最後の行は、監視する表の名前です。次の書式を使用すると、監視するスキーマを指定できます。
TABLE scott.*
24
Oracle Coherence GoldenGate HotCacheチュートリアル
6.2 Java Extractファイルの作成
Java Extractファイルは、前の項で定義したプライマリExtractファイルによって作成された証跡ファイルからの読取り時にHotCacheによって使用されます。
Java Extractファイルを作成し、hcjavaue.prmという名前を付けます。次に示すのが、このファイルの内容です。
各行には次の意味があります。
• EXTRACTはエクストラクタの名前を定義します。
• USERID/PASSWORDは、Extractプロセスがデータベースにログインするときに使用されます。
• SetEnvは、次の項で作成するJava User Exitプロパティ・ファイルを指します。
• CuserEXitは、必要なネイティブ・ライブラリ(Linux/UNIXの場合はlibggjava_ue.so、Windowsの場合はggjava_ue.dll)を指します。
• sourceDefsは、先ほど作成した表定義ファイルです。
• getUpdateBeforesは、キャプチャに"変更前"データを含めます。
• 監視する表の名前です。
6.3 Java User Exitプロパティ・ファイルの作成
User Exitプロパティ・ファイルを作成します。このファイルは、起動するJavaクラスとそのクラスに必要なすべてのパラメータをExtractプロセスに指示します。
テキスト・エディタを使用してファイルを作成し、hotcache.propertiesなどの名前を付けて$GG_HOME/dirprmディレクトリに保存します。ファイルには次のエントリが必要です。
25
Oracle Coherence GoldenGate HotCacheチュートリアル
このファイルに含まれるエントリを順番に説明します。
• gg.handlerlistプロパティの値はcggaです。この値には任意の名前を指定できますが、ハンドラ・タイプにも同じ名前を入力する必要があります。これには、gg.handler.cgga.typeという名前が付けられています。oracle.toplink.goldengate.CoherenceAdapterクラスは、GoldenGateカスタムJava APIを使用するカスタムJavaクラスです。このクラスはHotCacheです。
• goldengate.userexit.nochkptプロパティは、User Exitチェックポイント・ファイルの無効化に使用されます。この例では、User Exitチェックポイント・ファイルを無効化するように定義しています。
• goldengate.userexit.writersプ ロ パ テ ィ は 、 ラ イ タ ー の 名 前 を 指 定 し て い ま す 。GoldenGate Javaアダプタの呼出しを有効にするには、値をjvmにする必要があります。
• 最後のプロパティ(jvm.bootoption)には、HotCacheアダプタを正常に起動するために必要なすべてのJARファイルと-Dフラグを含める必要があります。
上記のファイルのエントリを確認し、各自のディレクトリ構造に従ってパスを変更します。
26
Oracle Coherence GoldenGate HotCacheチュートリアル
注:
• Java User Exitプロパティ・ファイルのクラスパスには、必ずパッケージ済みJPAアプリケーションを含めてください。システ
ム・プロパティ(-Dtoplink.goldengate.persistence-unit)の値は、persistence.xmlファイルの永続性ユニッ
ト名にする必要があります。
• 太字のエントリがデバッグに役立つでしょう。
Java Extractプロセスが起動すると、あらゆる問題の分析に非常に役立つ2つのログ・ファイルが作成されます。ファイルは両方とも$GG_HOMEの下に作成されます。1つ目のファイルには、Javaプロパティ・ファイルのパラメータgoldengate.log.lognameの定義に従い、cuserexitという接頭辞が付けられます。
2つ目のファイルはLog4J logファイルで、これも$GG_HOMEの下に作成されます。このファイルを取得するには、Javaプロパティ・ファイルで複数のLog4J -Dフラグを定義する必要があります。定義する内容は次のとおりです。
• -Dlog4j.configurationプロパティはLog4j構成ファイルを指します。GoldenGate Javaアダプタをインストールすると、$GG_JAVA_ADAPTER home/resources/classesの下にこのファイルが配置されます。$GG_JAVA_ADAPTERは、GoldenGate Javaアダプタの解凍先のディレクトリです。GoldenGate JavaアダプタにパッケージされているLog4j構成ファイルを使用する場合は、作成されるファイルの名前がdebug-ggue-11.1.1.0.0.006-log4j.logになります。
• -Dlog4j.debug=true
• -Dlog4j.logger.oracle.toplink.goldengate=DEBUG, stdout, rolling
他に、次のLog4jプロパティがプロパティ・ファイルに表示されます。
• log4j.logger.oracle.toplink.goldengate=WARN, stdout, rolling
6.4 Extractファイルの登録
Java ExtractファイルとJava User Exitプロパティ・ファイルの作成が終了したので、これらをGoldenGate Managerプロセスに登録する必要があります。
手順1:Extractファイルの登録の開始
クリーンなワークスペースで開始します。Managerプロセスを停止し、再起動してからステータスを確認します。
GGSCI (bhijazi-linux) 1> stop *
GGSCI (bhijazi-linux) 2> stop mgr
GGSCI (bhijazi-linux) 3> start mgr
Check that the manager is running :
GGSCI (bhijazi-linux) 4> status mgr
Manager is running (IP port bhijazi-linux.7809)
27
Oracle Coherence GoldenGate HotCacheチュートリアル
手順2:データベースへのログイン
次のコマンドを使用してデータベースにログインします。
GGSCI (bhijazi-linux) 5> dblogin userid ggowner, password ggowner
Successfully logged in to the database.
手順3:プライマリExtractファイルの登録
add extractコマンドを使用して、プライマリExtractであるcustextを登録します。
add extract custext, tranlog, begin now
このコマンドは、先ほど作成したcustextという名前のExtractを登録するよう、GoldenGate Managerプロセスに指示します。tranlogパラメータは、Extractプロセスがトランザクション・ログから変更を取得することを意味します。最後のパラメータ、begin nowは、Extractプロセスを開始したら、その時点のログから読取りを開始するようExtractに指示するためのチェックポイントを作成します。
図12.プライマリExtractの登録
手順4:Java Extractファイルの登録
add extractコマンドを使用して、Java Extractパラメータ・ファイルhcjavaueを登録します。
add extract hcjavaue, exttrailsource /home/oracle/ggtrails/customers/cu
こ の コ マ ン ド は 、 先 ほ ど 作 成 し た Java Extract を 追 加 す る よ う GoldenGate に 指 示 し ま す 。exttrailsourceパラメータは、このExtractプロセスで読み取るレコードのソースが、プライマリExtractによって作成されたファイルであることも示します。
図13.Java Extractファイルの登録
注:
上のadd extractコマンドで指定したファイル、/home/oracle/ggtrails/customers/cuが、プライマリExtractファイル
(custext.prm)のEXTTRAILパラメータに定義したファイルと正確に一致することが非常に重要です。
6.5 プライマリExtractファイルと証跡ファイルの関連付け
先ほど作成したプライマリExtractパラメータ・ファイルcustext.prmで、EXTTRAILパラメータを定義しました。このEXTRAIL証跡ファイルをcustext Extractと関連付ける必要があります。
28
Oracle Coherence GoldenGate HotCacheチュートリアル
手順1:プライマリExtractファイルと証跡ファイルの関連付け
add extractコマンドを使用して、証跡ファイルとプライマリExtractファイルを関連付けます。
add exttrail /home/oracle/ggtrails/customers/cu, extract custext,megabytes 50
図14.EXTRAIL証跡ファイルとcustext Extractとの関連付け
手順2:storage-enabled Coherenceノードの起動
プ ラ イ マ リ Extract プ ロ セ ス お よ び Java Extract プ ロ セ ス を 開 始 で き る よ う に す る に は 、storage-enabled Coherenceノードを起動する必要があります。
手順3:プライマリExtractプロセスの開始
start extract custextコマンドを入力してcustextというプライマリExtractを開始します。
GGSCI (bhijazi-linux) 8> start extract custext
図15.custext Extractの開始
手順4:プライマリのExtractプロセスのテスト
Extractプロセスが開始したことを確認するには、次のコマンドを入力します。
GGSCI (bhijazi-linux) 9> info extract custext
図16.Extractに関する情報の取得
ステータスがRUNNINGになっている必要があること以外で重要な点は、Log Read Checkpoint
の値です。これは、ExtractがOracle REDO Logから変更を取得していることを示しています。
29
Oracle Coherence GoldenGate HotCacheチュートリアル
SCN出力(最後の行)はシステム変更番号を表示します。これはOracle Databaseのクロックです。コミットするたびにクロックが増加します。SCN値は、データベース内の整合性のある時点を示すものです。
データベースに新しいレコードを挿入し、SCNがどのように増加するか確認します。SQLエディタを使用し、先ほど作成したcustomers表に新しいレコードを挿入します。続いて、レコードをコミットします。次のコマンドを実行すると、1つの新しい行がデータベースに作成されます。
insert into customers (custid,firstname,lastname,telephone) values
(2,‘John’,‘Smith’,‘222-222-2222’);
commit;
図17.データベースへのレコードの追加
再度、info extract custextコマンドを入力し、SCN番号を確認します。
GGSCI (bhijazi-linux) 10> info extract custext
図18.新しいSCN番号の確認
ご覧のとおり、SCNが増加しています。
最初のコミットで実行されることはもう1つあり、プライマリExtractプロセスによって証跡ファイルが作成され、取得したデータベース変更が証跡ファイルに書き込まれます。
GoldenGateには、Extractプロセスが取得した操作の数を種類別に表示するコマンドがあります。この非常に便利なコマンドを使ってみましょう。
GGSCI (bhijazi-linux) 9>stats extract custext total
30
Oracle Coherence GoldenGate HotCacheチュートリアル
図19.Extractの統計の実行
図から分かるとおり、1つの挿入操作が取得され、/home/oracle/ggtrails/customers/c証跡ファイルに出力されています。
プライマリExtractプロセスに伴う問題のトラブルシューティング
info extract custextコマンドの出力に、次のようなSTOPPEDメッセージまたはABENDEDメッセージが表示された場合は、Extractの開始に問題があったことを意味します。
プロセスの成否に関係なく、プロセスに関するレポートを表示するには、ステータスを確認する次のコマンドを使用します。
GGSCI (bhijazi-linux) 10 > view report custext
このコマンドを実行するとログ・ファイルが表示されます。出力内容を調べ、エラーの原因を確認します。通常はかなり詳細なエラー・メッセージが表示されるため、プロセスの開始が失敗した正確な理由を解明することができます。
手順5:Java Extractプロセスの開始
start extractコマンドを使用して、Java Extractプロセスhcjavaueを開始します。
GGSCI (bhijazi-linux) 11> start extract hcjavaue
31
Oracle Coherence GoldenGate HotCacheチュートリアル
Java Extractが正常に開始されたら、status allコマンドを実行してGoldenGateのステータスを確認できます。
GGSCI (bhijazi-linux) 1>status all
図20.すべてのExtractのステータスの実行
7. HotCacheのテスト
HotCacheのテストは、GoldenGateで監視している表に対してレコードの挿入/更新を実行し、Coherenceにエントリが作成されていることを確認するだけで実行できます。Coherenceをテストする場合は、5.4項"Coherenceのテスト"に書かれている手順を実行してください。
注:
• HotCacheアダプタによって作成されるキャッシュの名前は、デフォルトでは、表を表すJPAエンティティの非修飾クラス名
です。この例でのキャッシュ名はCustomerです。
8. HotCacheによる関係定義の使用
本書の執筆時点では、次のJPAアノテーションはHotCacheではサポートされていません。
• @OneToOne
• @OneToMany
• @ManyToMany
HotCache を 使 用 し て 関 係 を 実 装 す る に は 、 @Embeddable ア ノ テ ー シ ョ ン お よ び@ElementCollectionアノテーションを使用して関係を表現します。
8.1 OneToOne関係の実装
このシナリオを説明する前提として、OneToOne関係の2つの表(ResidentとResidentInfo)があるとします。
この関係を(HotCacheを念頭に置いて)JPAを使用してマッピングするには、両方の表の列が属性として表現されるJavaクラス(たとえば、Resident.java)を作成するのがもっとも簡単な方法です。次に例を示します。
32
Oracle Coherence GoldenGate HotCacheチュートリアル
表ResidentInfoには次のフィールドがあります。
• ID – Number // 主キー
• Address – Varchar2
表Residentには次のフィールドがあります。
• ID – Number // 主キーであり、ResidentInfo表で外部キーとして参照されます。
• Name – String
1つのエンティティを2つの表に分割するには、ResidentInfo表を指す@SecondaryTableアノテーションを使用します。
Residentクラスは次のようになります。
図21.ResidentクラスのJavaリスト
前述したとおり、両方の表のすべての列がこのクラスの属性として表現されています。ご覧のとおり、ResidentInfo表を指すために@SecondaryTableアノテーションが使用され、結合を定義するために両方の表のID列が使用されています。また、ResidentInfo表のフィールドを表す属性だけに@Columnアノテーションが使用されています。
8.2 OneToMany関係の実装
HotCacheの使用を念頭にOneToMany関係を実装する場合は、@ElementCollection JPAアノテーションと@Embeddable JPAアノテーションを使用する必要があります。
• @ElementCollectionは、Embeddableオブジェクト、またはBasic値(Stringのコレクションなど)に1対多関係を定義するときに使用できます。これは、@OneToManyアノテーションを使用する場合と似ています。ElementCollection値は必ず個別の表に格納されます。表の定義には@CollectionTableアノテーションまたは<collection-table>要素を使用します。表の名前は@CollectionTableアノテーションで定義し、コンポジット主キーの場合は@JoinColumnまたは@JoinColumnsで定義します。
33
Oracle Coherence GoldenGate HotCacheチュートリアル
• @Embeddedは、所有エンティティの固有部分として格納され、エンティティのIDを共有するインスタンスのクラスを定義します。埋込みオブジェクトの永続性プロパティまたはフィールドのそれぞれは、エンティティのデータベース表にマッピングされます。
これを念頭に置き、2つの表、OrdersとLineItemsがあり、1つの注文に複数のLineItemsを保持できると仮定します。
表Order:
• OraderID – Number // 主キー
• OrderTotal – Float
表LineItems:
• ItemID – Number // 主キー
• OraderID – Number // 主キー
• Name – String
• Price – Float
• Qty – Number
注:
• この表の主キーは、ItemIDとOrderIDからなるコンポジット・キーです。また、Order表のOrderIDはLineItems表の外
部キーとしてマッピングされています。
これらの表を表す2つのavaクラスを作成します。
LineItems.javaクラスは次のようになります。
図22.LineItems.javaクラスのJavaリスト
34
Oracle Coherence GoldenGate HotCacheチュートリアル
LineItemsクラスの次の機能に注意してください。
• @Embeddaleアノテーションは、このクラスが、親であるOrderクラスが存在しなければIDを持たない"依存"クラスであることを示します。
• 注文がなければLineItemsは存在せず、したがってIDもないため、@Idアノテーションは存在しません。
LineItems表にはorderidというフィールドがありますが、LineItemsクラスにこれを含める理由はありません。なぜなら、親クラスにorderidが定義されているため、親クラスによって自動的に挿入されるからです。
Orders.javaクラスは次のようになります。
図23.Orders.javaクラスのJavaリスト
ここで注目すべきことは、@ElementCollectionアノテーションを使用し、ターゲットの依存クラスがLineItemクラスであるOneToMany関係を持つことを示している点です。@CollectionTableアノテーションも、LineItemsがLineItemsという表に対して永続的である必要があることを示しています。
注:
• @CollectionTableアノテーションを省略すると、LineItemクラスはORDER_LINEITEM表に対して永続的である必要があ
ると見なされます。
9. GoldenGateとHotCacheのトラブルシューティング
この項では、このGoldenGateとHotCacheのプロジェクトで発生する問題を診断して修正する方法を説明します。
35
Oracle Coherence GoldenGate HotCacheチュートリアル
9.1 GoldenGate Extractプロセスのチェック
Extractプロセスが実行中なのに何も起こっていない場合は、Extractに関する詳細情報を取得できます。
GoldenGateのコマンドライン・インタフェースを使用し、次のコマンドを入力してcustext Extractに関する詳細情報を取得します。
info extract custext
図24.REDOログの確認
プライマリExtractのLog Read Checkpointフィールドの値がOracle REDO Logsになっていることを確認します。
次に、同じコマンドを入力します。ただし、今度はJava Extract hcjavaueに対して実行します。
info extract hcjavaue
図25.Java Extractのログの確認
Log Read Checkpoint行は、Java Extractファイルが消費している証跡ファイルを示しています。
次は、ファイル/home/oracle/ggtrails/customers/cu000000がファイル・システムに存在するかどうかを確認します。存在する場合は、新しいレコードを表に挿入し、ファイルが更新されるかどうかを確認します。
上に太字で示したファイルが、プライマリExtractパラメータ・ファイルに定義したファイルと一致していることが極めて重要です。
9.2 HotCacheプロパティ・ファイルの確認
• ロギングを有効にしておくことをお薦めします。3つのログ・ファイルを取得する必要があります。HotCacheがWindowsプラットフォーム上で問題に遭遇すると、単に画面が表示されなくなるようです。Coherenceログ・ファイル-Dtangosol.coherence.logシステム・プロパティをHotCacheプロパティ・ファイルに追加しておくことをお薦めします。
36
Oracle Coherence GoldenGate HotCacheチュートリアル
2つ目のログ・ファイルはUser Exitログ・ファイルです。このファイルを生成するには、次のパラメータをHotCacheプロパティ・ファイルに追加します。
goldengate.log.logname=任意の名前
goldengate.log.level=DEBUG
goldengate.log.tofile=true
3つ目のログ・ファイルはLog4jファイルです。GoldenGateのJavaアダプタには、非常に便利なdebug-log4j.properties が 含 ま れ て い ま す 。 フ ァ イ ル は$GG_HOME/ggjava/resources/classesディレクトリに生成されます。このファイルを生成するには、システム・プロパティ-Dlog4j.configuration=名前と、-Dlog4j.debug=trueを追加します。生成されるLog4jのデフォルト名はdebug-ggue-11.1.1.0.0.006-log4j.logですが、Log4jの構成ファイルで変更できます。
• storage-enabled CoherenceノードとHotCache Adapterの両方が同じCoherenceバージョンを使用していることを確認してください。
• No Persistence Provider for persistence-unit=xxxは、アダプタがpersistence.xml
ファイルを見つけられないことが原因で発生することがもっとも多い問題です。このファイルが、すべてのPOJOとともにアダプタのクラスパスに含まれていることを確認してください。
• java.lang.ClassNotFoundException: oracle.toplink.goldengate.coherence.
internal.CacheLoaderTypeProcessorという例外でJava Extractが失敗した場合は、完全なtoplink-grid.jarファイルとeclipselink.jarファイルをCoherence storage-enabledノードのクラスパスに追加する必要があります(必ず完全なパスで指定してください)。
• 前述したとおり、アダプタによって作成されるキャッシュの名前は、デフォルトでは、データベース表にマッピングされているJPAエンティティの非修飾クラス名です。Coherence構成ファイルでキャッシュ名を指定しておくか、キャッシュ名にワイルドカード(*)を使用するようにしてください。
• 異なるキャッシュ名を使用する場合は、@Propertyアノテーションまたは同等のXMLを使用します。次に例を示します。
@Property(name = "eclipselink.coherence.cache.name", value =
"CartProductListCache")
• ggjava_ue.dllモ ジ ュ ー ル ( Windows の 場 合 ) ま た は libggjava_ue.soモ ジ ュ ー ル( Linux/UNIX の 場 合 ) が 見 つ か ら な か っ た こ と を 示 す エ ラ ー が 表 示 さ れ た 場 合 は 、LD_LIBRARY_PATH環境変数が設定されていません。$LD_LIBRARY_PATHには$GG_HOMEが含まれている必要があります。また、ハードウェア(32ビットまたは64ビット)に応じて、$JAVA_HOME/jre/lib/amd64/server ( 64 ビ ッ ト の 場 合 ) 、 ま た は$JAVA_HOME/jre/lib/i386/server(32ビットの場合)を追加する必要があります。Windowsプ ラ ッ ト フ ォ ー ム の 場 合 は 、 必 ず $JAVA_HOME/jre/lib/i386/server ま た は$JAVA_HOME/jre/lib/amd64/serverを、同様に$PATH変数に追加してください。
37
Oracle Coherence GoldenGate HotCache チュートリアル
2014年2月
著者:Bassam Hijazi
共著者:Valarie Bedard、David Felcey、
Randy Stafford 編集者:Thomas Pfaeffle
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
海外からのお問い合わせ窓口:
電話:+1.650.506.7000
ファクシミリ:+1.650.506.7200
www.oracle.com.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.本文書は情報提供のみを目的として提供されており、記載内容は予告なく変
更されることがあります。本文書は、その内容に誤りがないことを保証するものではなく、また、口頭による明示または法律による黙示を問わ
ず、特定の目的に対する商品性もしくは適合性についての黙示的な保証を含め、いかなる他の保証や条件も提供するものではありません。オラ
クルは本文書に関するいかなる法的責任も明確に否認し、本文書によって直接的または間接的に確立される契約義務はないものとします。本文
書はオラクルの書面による許可を前もって得ることなく、いかなる目的のためにも、電子または印刷を含むいかなる形式や手段によっても再作
成または送信することはできません。
OracleおよびJavaはOracleおよびその子会社、関連会社の登録商標です。その他の名称はそれぞれの会社の商標です。
AMD、Opteron、AMDロゴおよびAMD Opteronロゴは、Advanced Micro Devicesの商標または登録商標です。IntelおよびIntel XeonはIntel
Corporationの商標または登録商標です。すべてのSPARC商標はライセンスに基づいて使用されるSPARC International, Inc.の商標または登録
商標です。UNIXはX/Open Company, Ltd.によってライセンス提供された登録商標です。1010