ここでは,トランザクションタイムアウトの設定について説明します。トランザクションタイムアウトは,データベースシステムなどEISとのトランザクションに設定します。DB Connectorを使用してデータベースにアクセスするときのトランザクションタイムアウトについて説明します。
トランザクションタイムアウトを設定する場合は,システム全体のタイムアウトのうち,EJBコンテナとデータベースのトランザクション(図の10のポイント)について意識する必要があります。なお,この番号は,図8-9または図8-10と対応しています。
図8-13 EISとのトランザクションで意識するタイムアウトのポイント
![[図データ]](figure/zu061300.gif)
トランザクションタイムアウトが発生すると,アプリケーションサーバによって,次の処理が実行されます。
- 実行中のトランザクションはロールバックされます。
- トランザクションに参加しているコネクションはクローズされ,コネクションプールから削除されます。
- ポイント
- トランザクションのタイムアウトは,CMTの場合とBMTの場合で設定方法が異なります。
- CMTの場合
CMTの場合,トランザクションのタイムアウトは,usrconf.propertiesで定義するか,またはEnterprise Bean,インタフェース,もしくはメソッドの属性として設定できます。Enterprise Bean,インタフェースまたはメソッドの属性は,サーバ管理コマンドで設定します。
usrconf.propertiesの定義は,プロセス全体に影響します。Enterprise Bean,インタフェースまたはメソッドの属性に設定したタイムアウトは,該当するEnterprise Bean,インタフェースまたはメソッドが使用するトランザクションの範囲だけに影響します。また,この指定は,usrconf.propertiesの定義よりも優先されます。
このため,プロセス全体に設定したい標準的な値をusrconf.propertiesに定義して,呼び出す業務によって細かく設定したい値はEnterprise Bean,インタフェース,またはメソッドの属性として設定することをお勧めします。
- BMTの場合
BMTの場合,トランザクションのタイムアウトは,usrconf.propertiesまたはJTAのAPI(javax.transaction.UserTransaction#setTransactionTimeoutメソッド)に指定できます。
usrconf.propertiesの定義は,プロセス全体に影響します。APIに指定したタイムアウトは,APIを発行したトランザクションの範囲だけに影響します。また,APIの指定は,usrconf.propertiesの定義よりも優先されます。
このため,プロセス全体に設定したい標準的な値をusrconf.propertiesに定義して,呼び出す業務によって細かく設定したい値は適宜APIを使用して設定することをお勧めします。
トランザクションタイムアウトが発生した場合,ユーザアプリケーションに例外は通知されません。ただし,メッセージKDJE31002-WがログファイルとJ2EEサーバのコンソールに出力されます。また,トランザクションタイムアウトが発生したあとで,ユーザアプリケーションから該当するトランザクションを使用してJTAインタフェースまたはJDBCインタフェースを使用しようとすると,例外が通知されます。