2013年6月4日火曜日

JBoss As 7でのXA-Datasourceを使ったトランザクション制御

JBoss As 7でのトランザクション制御のサンプルプログラムをメモとして記載したいと思います。

単純なフローを記載すると

  1. トランザクション取得
  2. コネクションを取得
  3. SQL発行
  4. コミットor ロールバック
  5. コネクション閉じる
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

Written By : // 13:10
Category:

0 コメント:

コメントを投稿

 

About

このブログは筆者の備忘録として色々記載しています。

Blog Archive

Powered by Blogger.