/* 初期化処理 */
javax.transaction.UserTransaction ut = null;
javax.naming.Context ic = null;
// InitialContextの生成
try{
ic = new InitialContext(); (1)
} catch( NamingException e ) {
System.out.println( "error: new InitialContext()" );
System.exit(1);
}
// UserTransactionの獲得
try {
ut = (UserTransaction)ic.lookup(“java:comp/UserTransaction”); (2)
} catch( NamingException e ) {
System.err.println( "error: lookup UserTransaction" );
System.exit(1);
}
try {
ut.begin(); (3)
} catch (NotSupportedException e) {
System.err.println("The thread is already associated with a transaction ");
System.exit(1);
} catch(SystemException e) {
System.err.println("The system error has been encountered");
System.exit(1);
}
try {
// ビジネスロジックを記述します。 (4)
} catch(Throwable e) {
// ここでは、例として処理が失敗した場合にフラグをfalseに設定しています。
commitRequest = false;
}
if(commitRequest) { (5)
try {
ut.commit(); (6)
} catch(RollbackException e) {
System.err.println("The transaction has been rolled back rather than committed");
} catch(SystemException e) {
System.err.println("The system error has been encountered.");
}
} else {
try {
ut.rollback(); (7)
} catch(java.lang.IllegalStateException e) {
System.err.println("The current thread is not associated with a transaction.");
} catch(SystemException e) {
System.err.println("The system error has been encountered.");
}
}JNDIを使用するために、InitialContextを生成します。
JNDIからjavax.transaction.UserTransactionオブジェクトを獲得します。
javax.transaction.UserTransaction.beginメソッドでトランザクションを開始します。
ビジネス処理を記述します。
コミット可能かを確認して、トランザクションの状態を決定します。
トランザクションを確定終了させる場合は、commitメソッドでトランザクションをコミットさせます。
異常によりコミットすべきではない場合、rollbackメソッドでトランザクションをロールバックさせます。
ポイント
JNDIの詳細については、“第4章 JNDI”を参照してください。