Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)


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」を参照してください。

なお,設定の優先順位は,次のとおりです。

  1. メソッド単位での設定

  2. インタフェース単位での設定

  3. Bean単位での設定

  4. J2EEサーバでの設定

Bean単位のトランザクションタイムアウトの設定は,J2EEアプリケーションに含まれるSession Bean,Entity BeanまたはMessage-driven Beanの属性(プロパティ)として設定します。J2EEアプリケーションの設定については,「3.15.13 実行環境での設定」を参照してください。

(2) トランザクションタイムアウト発生時のステートメントキャンセル

実行中のSQL処理が返ってこない状態でトランザクションタイムアウトが発生すると,ステートメントがキャンセルされます。

ステートメントのキャンセルを有効にする場合,DB ConnectorのCancelStatementプロパティにtrueを設定する必要があります。リソースアダプタの設定については,「3.15.13 実行環境での設定」を参照してください。