3.15.8 トランザクションタイムアウトとステートメントキャンセル
トランザクションタイムアウト機能とは,トランザクションの開始時点からの経過時間を監視し,指定された時間が経過した時点※でトランザクションをロールバックする機能です。監視期間は,トランザクションの開始完了時点から,トランザクションの決着開始時点までです。トランザクションタイムアウトが発生したあと,該当するトランザクションでのJTA,およびJDBCインタフェースへのアクセスは例外が通知されます。
トランザクションタイムアウト機能は,アプリケーションサーバが管理するトランザクションの場合に有効です。
なお,BMT,サーブレット,またはJSPの場合,トランザクションタイムアウトが発生したあと,該当するトランザクションに対してUserTransaction.commit/rollbackを発行すると,JTA,およびJDBCインタフェースにアクセスできるようになります。
注※ タイムアウトしたかどうかを1秒ごとに確認するため,トランザクションタイムアウトの設定時刻に対して最大1秒の誤差が発生します。
(1) トランザクションタイムアウトの設定
トランザクションタイムアウトの設定は,J2EEサーバ,UserTransactionインタフェース,またはEJBのCMT属性で設定できます。
(a) J2EEサーバでの設定
J2EEサーバでの設定は,J2EEサーバのプロパティをカスタマイズして設定します。J2EEサーバの動作設定のカスタマイズについては,「3.15.13 実行環境での設定」を参照してください。
(b) UserTransactionインタフェースでの設定
UserTransactionインタフェースのsetTransactionTimeoutメソッドを使用して,デフォルト値から変更できます。
(c) EJBのCMT属性での設定
EJBのCMT属性で設定するには,サーバ管理コマンドを使用して設定します。設定単位は,Bean単位,インタフェース単位,およびメソッド単位の三つから選択できます。設定が有効になるメソッドは,次のどちらかです。
-
トランザクション属性が「Required」に設定され,EJBコンテナがトランザクションを開始するメソッド
-
トランザクション属性が「RequiresNew」に設定されたメソッド
クライアントから伝播するトランザクションで動作するSupports属性およびMandatory属性の場合,トランザクションを使用しないNotSupported属性およびNever属性の場合は,タイムアウトの設定は無効になります。なお,トランザクション属性については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(EJBコンテナ)」の「2.7.3 CMT」を参照してください。
なお,設定の優先順位は,次のとおりです。
-
メソッド単位での設定
-
インタフェース単位での設定
-
Bean単位での設定
-
J2EEサーバでの設定
Bean単位のトランザクションタイムアウトの設定は,J2EEアプリケーションに含まれるSession Bean,Entity BeanまたはMessage-driven Beanの属性(プロパティ)として設定します。J2EEアプリケーションの設定については,「3.15.13 実行環境での設定」を参照してください。
(2) トランザクションタイムアウト発生時のステートメントキャンセル
実行中のSQL処理が返ってこない状態でトランザクションタイムアウトが発生すると,ステートメントがキャンセルされます。
ステートメントのキャンセルを有効にする場合,DB ConnectorのCancelStatementプロパティにtrueを設定する必要があります。リソースアダプタの設定については,「3.15.13 実行環境での設定」を参照してください。