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/*
親トピック: カスタム・フォーマット