トランザクション管理用のJAVA EEのAPI。よく分からんのでメモ、以下あってるかどうか未検証。
@TransactionAttributeアノテーションをメソッドかクラスに付けると、JTAに対応しているコンテナがよきに計らってくれる。以下、発生した例外はキャッチせずに上に投げる前提(Calleeで例外が発生した場合Callerも中断される、とする)
REQUIRED - トランザクション内で呼び出されればトランザクションを継続し、トランザクション外ならば作る
Callerがトランザクション内
Callerがトランザクション外
REQUIRES_NEW - トランザクション内で呼び出されても、新しくトランザクションを作る
Callerがトランザクション内
Callerがトランザクション外
NOT_SUPPORTED - 既にトランザクション内で呼び出されても、トランザクション外で実行する
Callerがトランザクション内
Callerがトランザクション外
Callerで例外 → ロールバックしない
Calleeで例外 → ロールバックしない
MANDATORY - トランザクション外で実行されるとエラー
Callerがトランザクション内
Callerで例外 - Caller, Callee共にロールバック
Calleeで例外 - Caller, Callee共にロールバック
Callerがトランザクション外
NEVER - トランザクション内で実行されるとエラー
Callerがトランザクション内
Callerがトランザクション外
Callerで例外 → ロールバックしない
Calleeで例外 → ロールバックしない
SUPPORTS - トランザクション内で呼び出されればトランザクションを継続、トランザクション外ならそのまま
Callerがトランザクション内
Callerがトランザクション外
Callerで例外 → ロールバックしない
Calleeで例外 → ロールバックしない