3.4.5 システム例外発生時のトランザクションの動作
EJB呼び出し時に,呼び出し先でシステム例外が発生したときの呼び出し元のトランザクションの挙動は,システム定義によって次のように変わります。
- 〈この項の構成〉
(1) 呼び出し元のトランザクションを呼び出し先が引き継ぐ場合(呼び出し先のトランザクション属性がCMTのRequired,Supports,Mandatoryの場合)
呼び出し先でシステム例外が戻ってきた場合,トランザクションはコンテナによってロールバックされます。この動作は,EJB仕様で規定されています。
(2) 呼び出し元のトランザクションを呼び出し先が引き継がない場合(呼び出し先のトランザクション属性がBMT,またはCMTのNotSupported,RequiresNew,Neverの場合)
呼び出し元,呼び出し先のトランザクションは,それぞれ次のように動作します。
- 呼び出し元のトランザクション
-
-
EJBのリモートインタフェースでのリモート呼び出し時
ライトトランザクションが無効の場合:
トランザクションはOTSによってロールバックにマークされます。
ライトトランザクションが有効の場合:
トランザクションはロールバックにマークされません。
-
EJBのリモートインタフェースでのローカル呼び出しの最適化時
usrconf.propertiesのejbserver.distributedtx.rollbackClientTxOnSystemExceptionキーの値によって動作が異なります。
trueの場合:
トランザクションはロールバックにマークされます。
falseの場合:
トランザクションはロールバックにマークされません。
-
EJBのローカルインタフェース呼び出し時
トランザクションはロールバックにマークされます。
-
- 呼び出し先のトランザクション
-
トランザクションはコンテナによってロールバックされます。この動作は,EJB仕様で規定されています。
なお,ローカル呼び出しの最適化については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(EJBコンテナ)」の「2.13.1 EJBのリモートインタフェースでのローカル呼び出しの最適化」を参照してください。