7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Java][JTA][JSR-907] JTA 1.2 Transactionalアノテーションについて(JSR-907拾い読み)

Last updated at Posted at 2015-07-31

CDI管理ビーンに付けるだけでトランザクション処理してくれる@Transactionalアノテーションについてです。

JSR-907のドキュメントから拾い読みしてみました。

@Transactionalって何よ?

CDIのインターセプターです。CDIのインターセプターはAOP的なことをしてくれるやつです。

メソッドにつけると、そのメソッドの呼び出しに介入し、呼び出し前後にチョメチョメしたりなんだりできます。

@Transactionalのオプション

@Transactionalアノテーションで指定できるオプションについてです。

オプションは2つあります。

  • トランザクション内外で呼ばれた時の振る舞いを指定
  • 例外発生時の振る舞いを指定

トランザクション内外で呼ばれたときの振る舞い

トランザクション内外で、CDI管理ビーンのメソッドが呼ばれたときの振る舞いを設定できます。

TxType トランザクション外から 既存トランザクション内から 備考
TxType.REQUIRED 新しいトランザクションを開始 既存トランザクション内で実行 既定値
TxType.REQUIRED_NEW 新しいトランザクションを開始 既存トランザクションを一旦停止して新しいトランザクション内で実行
TxType.MANDATORY TransactionRequiredExceptionをネストしたTransactionalExceptionをスロー 既存トランザクション内で実行
TxType.SUPPORTS そのままトランザクション外で実行 既存トランザクション内で実行
TxType.NOT_SUPPORTED そのままトランザクション外で実行 既存トランザクションを一旦停止して、トランザクション外で実行
TxType.NEVER そのままトランザクション外で実行 InvalidTRansactionExceptionをネストしたTransactionalExceptionをスロー

例外発生時の振る舞い

既定では、チェック例外発生時にはロールバックしません。RuntimeExceptionを継承した例外ではロールバックします。

rollbackOn

ロールバックしたい例外を指定します。

以下の例は、あらゆるアプリケーション例外発生時にトランザクションをロールバックするようにマークします。

@Transactional(rollbackOn={Exception.class})

dontRollbackOn

ロールバックさせたくない例外を指定します。rollbackOndontRollbackOn両方を指定したときは、dontRollbackOnが優先します。

以下の例は、IllegalStateExceptionやこれを継承した例外発生時に、トランザクションをロールバックするマークを付けないようにします。

@Transactional(dontRollbackOn={IllegalStateException.class})
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?