9.4.5.2.1 Javaでのカスタム・フォーマッタのコーディング
前述の例では、同じフォーマッタ(com.mycompany.MyFormatter
)を使用するJMSハンドラとファイル出力ハンドラを示しています。次の例は、このフォーマッタの実装方法の例です。
例9-14 カスタム・フォーマットの実装
package com.mycompany.MyFormatter; import oracle.goldengate.datasource.DsOperation; import oracle.goldengate.datasource.DsTransaction; import oracle.goldengate.datasource.format.DsFormatterAdapter; import oracle.goldengate.datasource.meta.ColumnMetaData; import oracle.goldengate.datasource.meta.DsMetaData; import oracle.goldengate.datasource.meta.TableMetaData; import java.io.PrintWriter; public class MyFormatter extends DsFormatterAdapter {
public MyFormatter() { } @Override public void formatTx(DsTransaction tx,
DsMetaData meta, PrintWriter out)
{
out.print("Transaction: " ); out.print("numOps=\'" + tx.getSize() + "\' " ); out.println("ts=\'" + tx.getStartTxTimeAsString() + "\'"); for(DsOperation op: tx.getOperations()) { TableName currTable = op.getTableName(); TableMetaData tMeta = dbMeta.getTableMetaData(currTable); String opType = op.getOperationType().toString(); String table = tMeta.getTableName().getFullName(); out.println(opType + " on table \"" + table + "\":" ); int colNum = 0; for(DsColumn col: op.getColumns()) {
ColumnMetaData cMeta = tMeta.getColumnMetaData( colNum++ ); out.println( cMeta.getColumnName() + " = " + col.getAfterValue() ); }
} @Override public void formatOp(DsTransaction tx,
DsOperation op, TableMetaData tMeta, PrintWriter out)
{
// not used...
}
}
フォーマッタは、トランザクション全体のフォーマット(コミット後)、または各操作のフォーマット(受信後、コミット前)の方法を定義します。フォーマッタが操作モードの場合、formatOp
(...)がコールされます。そうではない場合、トランザクション・コミット時にformatTx
(...)がコールされます。
このカスタム・フォーマッタをコンパイルして使用するには、Java用Oracle GoldenGate JARをクラスパスに含め、コンパイルした.class
ファイルをgg_install_dir
/dirprm
に配置します。
javac -d gg_install_dir/
dirprm
-classpath ggjava/ggjava.jar MyFormatter.java
結果のクラス・ファイルは、resources/classes
に(正しいパッケージ構造で)配置されます。
gg_install_dir
/dirprm/com/mycompany/MyFormatter.class
あるいは、カスタム・クラスをJARに含めることもできます。この場合、JARファイルをユーザー・イグジット・プロパティを使用してJVMクラスパスに含める(jvm.bootoptions
プロパティでjava.class.path
を使用)か、Javaアプリケーション・プロパティ・ファイルを設定してカスタムJARを含めます。
# set properties on 'one' gg.handler.one.type=file gg.handler.one.format=com.mycompany.MyFormatter gg.handler.one.file=output.xml gg.classpath=/path/to/my.jar,/path/to/directory/of/jars/*
親トピック: カスタム・フォーマット