ログ出力の基本操作
高信頼性ログを出力するためには、ULogComposerオブジェクトを使用します。これはULogFactoryクラスを用いて参照します。
ポイント
ULogComposerを使用してログ書き込みを行った場合、printlnメソッドで指定したログ(ユーザログレコード)以外に、トランザクション情報レコードが書き込まれます。トランザクション情報レコードは、そのトランザクションでユーザログレコードの出力を行ったあとに、トランザクションが完了した場合に出力されます。
トランザクションは、コミットまたはロールバックといった完了操作が行われた場合、または、コネクションが切断された場合に完了します。トランザクションの完了操作により、業務データベースの操作をトランザクション情報レコードに記録することが可能です。業務データベースと同じコネクションを用いた場合は、業務データベースのトランザクションに連動した情報が出力できます。
なお、トランザクションの完了をせずにコネクションが切断された場合には暗黙のロールバックが発行されたものと見なしロールバック完了のトランザクション情報レコードが出力されます。
トランザクション情報レコードの構造やその具体的な利用方法については、以下のマニュアルを参照してください。
“Interstage Business Application Server運用ガイド(高信頼性ログ編)”の“ユーザログテーブルの運用”
ユーザログレコードは以下のいずれかのタイミングで確定されます。
ULogComposerオブジェクトのsyncメソッドまたはcloseメソッドが呼び出されたとき。
ULogComposerオブジェクトの取得に使用したConnectionオブジェクトのcommitメソッド、rollbackメソッドまたはcloseメソッドが呼び出されたとき。
トランザクションが完了せずにコネクションが切断されたとき。
《ログ定義ファイルの記述例》
<?xml version="1.0" encoding="UTF-8"?>
<logConfig>
<config> <version>7.1</version> </config>
<ulog name="ULog1" class="my.sample.MyULogComposer">
<param name="schema" value="MYSCHEMA"/> <!-- スキーマ名 -->
<param name="table" value="ULOG01"/> <!-- 表名 -->
</ulog>
</logConfig>《ビジネスクラスの記述例》
import java.sql.Connection;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import com.fujitsu.uji.DispatchContext;
import com.fujitsu.uji.GenericHandler;
import com.fujitsu.uji.ulog.ULogComposer;
import com.fujitsu.uji.ulog.ULogFactory;
public class SampleHandler extends GenericHandler
{
....
public void startup(DispatchContext context) {
// 任意のコネクションで出力します。
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.fujitsu.symfoware.jdbc2.jndisp.SYMContextFactory");
env.put(Context.PROVIDER_URL, "SYM:// ・・・ ");
InitialContext ctx = null;
DataSource ds = null;
Connection connection = null;
try {
// 高信頼性ログを出力するコネクションを取得します。
ctx = new InitialContext(env);
ds = (DataSource)ctx.lookup("jdbc/ ・・・ ");
connection = ds.getConnection();
// 高信頼性ログ出力クラスを取得します。
// getULogComposerの第2引数にはログの管理名を指定します。
// 管理名はログ定義ファイルのulogタグのname属性で指定した名前です。
ULogComposer myLogger = ULogFactory.getULogComposer(context, "ULog1", connection);
if(myLogger != null){
// 指定のコネクションを利用してデータベースへ出力します
myLogger.println(null, null, "someMethod start");
}
else{
// 高信頼性ログ出力クラスのオブジェクトがnullのため、
// ログの出力ができません
・・・
}
// 高信頼性ログの出力を終了する場合に、クローズをします
myLogger.close();
// コネクションをクローズします。
connection.close()
} catch(Exception exp) {
// 例外の処理を行います。
・・・
}
}
}ポイント
コネクションは、業務処理で用いるデータベースのコネクションと同じものを用いることも可能です。