10 イベント・ハンドラの構成
10.1 イベント・ハンドラの指定
トランザクション、操作およびメタデータ・イベントのJavaでの処理は次のようになります。
-
Oracle GoldenGate ReplicatまたはExtractプロセスがローカル証跡データを読み取り、トランザクション、操作およびデータベース・メタデータをJava配信モジュールに渡します。メタデータは、証跡自体のソース定義ファイルから取得できます。
-
Javaフレームワークがイベントを発行します。イベントは、オプションでカスタム・イベント・フィルタによってフィルタされます。
-
ハンドラ(イベント・リスナー)がこれらのイベントを処理し、トランザクション、操作およびメタデータを処理します。特定のタイプのターゲットにカスタム・フォーマッタが適用される場合があります。
既存のハンドラがいくつかあります。
-
様々な組込みビッグ・データ・ハンドラで、サポート対象のビッグ・データ・ターゲットにレコードを適用する方法については、「GoldenGate for Big Dataの概要」で、このタイプのハンドラの構成を参照してください。
-
MapMessage
を使用するか、TextMessage
をカスタマイズ可能なフォーマッタと組み合せて使用し、JMSプロバイダに送信するJMSメッセージ・ハンドラ。 -
JMSメッセージをOracleアドバンスト・キューイング(AQ)に送信する、専用のメッセージ・ハンドラ。
-
1つのファイルまたはローリング・ファイルに書き込むファイル・ライター・ハンドラ。
ノート:
ファイル・ライターはJMS
TextMessage
ハンドラと完全に同じフォーマッタを使用できるため、ファイル・ライター・ハンドラは開発ユーティリティとして特に有用です。ファイル・ライターを使用すると、JMSに実際にメッセージを送らずにJMS用のフォーマッタのテストとチューニングを簡単に行えます。
イベント・ハンドラはメインJavaプロパティ・ファイルを使用して構成できます。あるいは、オプションで別のプロパティ・ファイルから直接プロパティを読み込む場合もあります(ハンドラの実装によって異なります)。ハンドラのプロパティは次の構文を使用して設定されます。
gg.handler.{name}.someproperty=somevalue
これによって、プロパティ・ファイルでname
で識別されるハンドラ・インスタンスのプロパティsomeproperty
が値somevalue
に設定されます。このname
はプロパティ・ファイルで使用され、アクティブ・ハンドラを定義し、そのプロパティを設定します。これはユーザー定義です。
実装上のノート(Java開発者向け): 前述の例の後、ハンドラがインスタンス化されると、メソッドvoid
setSomeProperty
(String value)がハンドラ・インスタンスでコールされ、文字列値somevalue
が渡されます。JavaBean PropertyEditor
もハンドラに対して定義できます。この場合、文字列は、セッター・メソッドに対して適切な型に自動的に変換されます。たとえば、Javaアプリケーション・プロパティ・ファイルで次のような設定だとします。
# the list of active handlers: only two are active gg.handlerlist=one, two # set properties on 'one' gg.handler.one.type=file gg.handler.one.format=com.mycompany.MyFormatter gg.handler.one.file=output.xml # properties for handler 'two' gg.handler.two.type=jms_text gg.handler.two.format=com.mycompany.MyFormatter gg.handler.two.properties=jboss.properties # set properties for handler 'foo'; this handler is ignored gg.handler.foo.type=com.mycompany.MyHandler gg.handler.foo.someproperty=somevalue
タイプによってハンドラ・クラスが識別されます。他のプロパティは、作成されるハンドラのタイプによって異なります。別個のプロパティ・ファイルがハンドラ(JMSハンドラなど)の初期化に使用される場合、プロパティ・ファイルはクラスパスにあります。たとえば、プロパティ・ファイルが{
gg_install_dir
}/dirprm/foo.properties
にある場合、プロパティ・ファイルでgg.handler.
name
.properties=foo.properties
のように指定します。
10.2 JMSハンドラ
メインJavaプロパティ・ファイルは、アクティブ・ハンドラを識別します。JMSハンドラは、必要に応じてJMS固有の構成用の個別のプロパティ・ファイルを使用できます。これによって、複数のJMSハンドラが同時に稼働するよう構成できます。
いくつかのJMSプロバイダ(JBoss、TIBCO、Solace、ActiveMQ、WebLogic)用にサンプルが含まれています。使用している環境用の出発点として特定のJMSプロバイダに適したプロパティ・ファイルを選択できます。JMSプロバイダごとに設定は多少異なります。環境に特有の設定もあります。
Java JAR (ggjava
)のインストール・ディレクトリには、コア・アプリケーションJAR (ggjava.jar
)とそのその依存性がresources/lib/*.jar
に含まれています。リソース・ディレクトリはすべての依存性と構成を含み、クラスパス内にあります。
JMSクライアントJARがシステムにすでにある場合、コピーせずに直接参照し、クラスパスに追加できます。
次のタイプのJMSハンドラを指定できます。
-
jms - テキスト・メッセージをトピックまたはキューに送信します。メッセージはVelocityテンプレートを使用するか、Javaでフォーマッタを記述してフォーマットします。ファイルへの書込みの際、同じフォーマッタを
jms_text message
に使用できます。(jms_text
はjms
と同義です。) -
aq - テキスト・メッセージをOracleアドバンスト・キューイング(AQ)に送信します。
aq
ハンドラは、AQへの配信用に構成されたjms
ハンドラです。メッセージはVelocityテンプレートまたはカスタム・フォーマッタを使用してフォーマットできます。 -
jms_map - JMS MapMessageをトピックまたはキューに送信します。メッセージの
JMSType
を表の名前に設定します。メッセージの本体は次のメタデータとそれに続く列名と列値のペアで構成されます。-
GG_ID
- この操作を一意に識別するレコードの位置 -
GG_OPTYPE
- SQLのタイプ(挿入/更新/削除) -
GG_TABLE
- 操作が行われた表の名前 -
GG_TX_TIMESTAMP
– 操作のタイムスタンプ
-
10.3 ファイル・ハンドラ
ファイル・ハンドラは、実際のターゲットがJMSで、メッセージ形式がカスタムJavaまたはVelocityテンプレートを使用して開発されている場合にメッセージ形式の確認に使用されることが多くあります。ファイル・ハンドラを使用するプロパティ・ファイルを次に示します。
# one file handler active, using Velocity template formatting gg.handlerlist=myfile gg.handler.myfile.type=file gg.handler.myfile.rollover.size=5M gg.handler.myfile.format=sample2xml.vm gg.handler.myfile.file=output.xml
この例では、1つのハンドラを使用して、(JMSハンドラとファイル・ハンドラが同時に使用されることはある)output.xml
という名前のファイルに書き込みます。sample2xml.vm
という名前のVelocityテンプレートを使用します。テンプレートはクラスパスを使用して特定されます。
10.5 出力のフォーマット
前述のとおり、既存のJMSおよびファイル出力ハンドラはプロパティ・ファイルを使用して構成できます。各ハンドラには、設定可能な固有のプロパティがあります。たとえば、出力ファイルをファイル・ハンドラに設定したり、JMS宛先をJMSハンドラに設定できます。これらの両ハンドラでカスタム・フォーマッタも指定できます。同じフォーマッタを両方のハンドラに使用できます。カスタム・フォーマットのためにJavaコードを書くかわりに、Velocityテンプレートを指定できます。詳細は、「イベントのフィルタリング」を参照してください。