JBoss As 7でのトランザクション制御のサンプルプログラムをメモとして記載したいと思います。
単純なフローを記載すると
- トランザクション取得
- コネクションを取得
- SQL発行
- コミットor ロールバック
- コネクション閉じる
package test;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection con = null;
UserTransaction utx = null;
try {
utx = getUserTransaction(); //トランザクションの取得
utx.begin(); //トランザクション開始
con = getConnection(); //コネクション取得
//何かSQL
utx.commit();
} catch (Exception e) {
if (utx != null) {
try {
utx.rollback();
} catch (IllegalStateException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (SecurityException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (SystemException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
}
e.printStackTrace();
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
}
private UserTransaction getUserTransaction() throws NamingException {
UserTransaction utx = null;
InitialContext ctx = new InitialContext();
//アプリケーションが直接作成するスレッドなど、EE 以外のスレッド対してアクセス可能
utx = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
return utx;
}
private Connection getConnection() throws NamingException, SQLException {
Connection con = null;
DataSource ds = null;
InitialContext ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:jboss/datasources/XX");//XA-Datasourceを取得
con = ds.getConnection();
return con;
}
}
参考URLhttps://access.redhat.com/site/documentation/ja-JP/JBoss_Enterprise_Application_Platform/6/html/Migration_Guide/chap-Migrate_Your_Application.html#Review_the_JNDI_Namespace_Rules


0 コメント:
コメントを投稿