S2DAOのトランザクション

トランザクションの自動制御
Seasarでは、トランザクションを制御する(S2JTA)が実装されている。


初期設定では、AutoCommitがtureになっているため、
SQLを実行するとcommitが実行される。
そこで、トランザクションを独自で制御した場合には、
UserTransactionを使用する。


    public static void main(String[] args) {
      SingletonS2ContainerFactory.init();
      S2Container container = SingletonS2ContainerFactory.getContainer();
	
      DeptDao dao = (DeptDao)container.getComponent(DeptDao.class);
	
      //トランザクション取得
      UserTransaction ut = (UserTransaction)container.getComponent(UserTransaction.class);
	
      try {
        //トランザクション開始
        ut.begin();
        //更新前の情報を取得
        Dept d = dao.selectDeptWhere(10);
			
        d.setDept_name("MUSIC00");
        d.setLoc(null);
        //UPDATE
        dao.updateDeptUnlessNull(d);
        //コミット
        ut.commit();
      } catch(Exception e){
        //ロールバック
        try {
          ut.rollback();
        } catch (Exception e1){
          e1.printStackTrace();
        }
        e.printStackTrace();
      }
    }