|
|
WebOTX Manual V12.1 (第3版) 目次を表示 |
import jakarta.ejb.SessionContext;
import jakarta.transaction.UserTransaction;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
InitialContext ic = new InitialContext();
UserTransaction utx = (UserTransaction)ic.lookup("java:comp/UserTransaction");
DataSource ds = (DataSource)ic.lookup("DB/sample");
UserTransaction utx = ctx.getUserTransaction();
// 以下、トランザクション処理
utx.begin();
try {
// 業務処理
Connection con = ds.getConnection();
// コネクション(con)を利用したデータベース更新をここで行なう
con.close();
utx.commit();
} catch (Exception e) {
// 例外処理
if (con != null) con.close();
utx.rollback();
}
// セッションBeanのsetSessionContextメソッド内で渡されたSessionContextを // フィールド変数(sessionContext)として保持しておく SessionContext ctx = sessionContext; UserTransaction utx = ctx.getUserTransaction();
この場合、トランザクション開始前にJDBCコネクションを取得したり、トランザクション完了後にJDBCコネクションをクローズすることができます。
InitialContext ic = new InitialContext();
UserTransaction utx = (UserTransaction)ic.lookup("java:comp/UserTransaction");
EJBアプリケーションに限り、トランザクション開始前にJDBCコネクションを取得したり、トランザクション完了後にJDBCコネクションをクローズすることができます。
InitialContext ic = new InitialContext();
UserTransaction utx = (UserTransaction)ic.lookup("UserTransaction");
この場合、トランザクション開始前にJDBCコネクションを取得したり、トランザクション完了後にJDBCコネクションをクローズすることはできません。
utx.begin();
DataSource ds = (DataSource)ic.lookup("DB/sample");
Connection con = ds.getConnection();
// コネクション(con)を利用したデータベース更新をここで行なう
con.close();
Memo
データベースのアクセス方法の詳細については、
JDBCアプリケーションの開発
を参照してください。
try {
// 業務処理
utx.commit();
} catch (Exception e) {
// 例外処理
utx.rollback();
}
トランザクションの基本的な流れについては以上です。以下ではその他のUserTransactionインタフェースのメソッドについて説明します。
utx.setTransactionTimeout(30);
utx.begin();
try {
// 業務処理
// 30秒以内に業務処理が終わらない場合自動的にロールバックする
try {
// 業務処理
} catch (Exception e) {
// 例外処理
utx.setRollbackOnly();
}
utx.commit();
int status = utx.getStatus();返却される値とその意味は次の通りです。
| 状態(値) | 意味 |
|---|---|
| STATUS_ACTIVE(0) | トランザクション開始後のアクティブな状態 |
| STATUS_COMMITTED(3) | コミットが完了した状態 |
| STATUS_COMMITTING(8) | トランザクションのコミット処理中 |
| STATUS_MARKED_ROLLBACK(1) | ロールバック用にマークされた状態 (setRollbackOnly()の結果として) |
| STATUS_NO_TRANSACTION(6) | トランザクションが開始されていない状態 |
| STATUS_PREPARED(2) | プリペアが完了した状態 |
| STATUS_PREPARING(7) | プリペアの処理中 |
| STATUS_ROLLEDBACK(4) | トランザクションの結果がロールバックと決定された状態 |
| STATUS_ROLLING_BACK(9) | ロールバック処理中 |
| STATUS_UNKNOWN(5) | トランザクションの結果が不明な状態 |