JavaとJavaEEプログラマのブログ

JavaEEを中心にしたをソフトウェア開発についてのブログ

EJB3.1入門〜トランザクション〜

1メソッドを1トランザクションとして扱う。
メソッドの開始直前にトランザクションが始まり、メソッド終了直後にコミットされる。

トランザクションロールバックされるのは以下の場合。

  • メソッド内からシステム例外(RemoteExceptionかRuntimeExceptionのサブクラス)・実行時例外(RuntimeExceptionのサブクラス)が投げられた時。
  • アプリケーション例外(@javax.ejb.ApplicationExceptionアノテーションが付加された例外)が投げられたとき。
@ApplicationException(rollback = true)
public class HogeException extends Exception{
}
	

おそらく、ほとんど使用されないロールバックは以下の方法。

  • SessionContext.setRollbackOnly() を使った方法。

setRollbackOnly() を呼び出すと、呼び出したメソッドが終了した時にロールバックが行われる。

@Stateless
public class Fuga {

	@Resource
	private SessionContext ctx;

	public void methodFoo(){
	
		if(true){
			ctx.setRollbackOnly();//methodFooが終了したときにロールバック。
		}

	}

}


1メソッド内で複数トランザクションを扱いたい場合などトランザクション境界を自分でコントロールしたい場合は@TransactionManagement(TransactionManagementType.BEAN) アノテーションを使ってメソッド内でトランザクションの開始〜コミットを記述する。
おそらく、あまり使わない。