5.3.5 タイムアウト値の設定例と設定値の有効範囲
J2EEアプリケーション実行時間の監視機能を使用するときの,タイムアウト値の設定例と設定値の有効範囲について,Webアプリケーションの場合とEJBの場合に分けて説明します。
- 〈この項の構成〉
(1) Webアプリケーションの場合
Webアプリケーションの場合のタイムアウト値の設定について説明します。
(a) フィルタ/サーブレット/JSPへの呼び出し
フィルタ/サーブレット/JSP呼び出しのタイムアウト設定について,次の図に示します。
各場所のタイムアウト値は,呼び出しの順序を考慮して適切に設定する必要があります。例えば,図中Aの範囲のdoFilterメソッドのタイムアウト値は,メソッドの開始から終了までの処理時間の監視に適用されます。このため,BまたはCの処理時間がAのタイムアウト値に設定した時間に達してしまうと,その時点でタイムアウトされてしまいます。例を次に示します。
- 処理中にタイムアウトが発生する例
-
図中のA,B,Cのそれぞれのタイムアウト値として次の表に示す時間が設定されていることとします。
表5‒7 タイムアウト値の設定例1 場所
設定したタイムアウト値
図中A(フィルタのdoFilterメソッド)
240秒
図中B(サーブレット)
180秒
図中C(JSP)
120秒
このような設定の場合に,AからBへの処理,およびBからCの処理で次の時間が掛かったとします。
-
AからBへの処理:120秒
-
BからCへの処理:60秒
このとき,Cでの処理が60秒以上掛かると,図中Aのタイムアウト値の240秒に達してしまうため,処理が完了する前にタイムアウトが発生します。
-
-
設定時の注意事項
アップロード,ダウンロードを実施するサーブレット/JSP内の処理の延長では,クライアントとの通信が発生する場合があります。この場合,アップロード中,ダウンロード中はサーブレット/JSPの処理中として扱われるため,メソッドの実行時間が監視されます。
このため,アップロード,ダウンロードを実施するサーブレット/JSPは,クライアントとの通信遅延などを考慮してタイムアウトを設定する必要があります。特に,ダウンロードについては,ブラウザでダウンロード確認用のダイアログを表示して,クライアントに,ダウンロードの確認を求める場合があります。この場合,ダウンロードするデータ量によっては,クライアント上でユーザがダウンロード確認用のダイアログで操作をするまで,ダウンロードが完了しない(サーブレット/JSPの処理が完了しない)ことがあるので注意してください。
なお,フィルタを経由する場合は,該当するフィルタに関しても同様の注意が必要です。
(b) サーブレットへの初回リクエスト
サーブレットへの初回アクセス時には,サーブレットのserviceメソッドに設定したタイムアウト値が有効になります。
ただし,DD(web.xml)の<load-on-startup>タグを設定していないサーブレット/JSPの場合,初回リクエスト時には,initメソッドが実行されます。このとき,initメソッドには,該当するサーブレット/JSPのserviceメソッドに設定したタイムアウト値が有効になります。
また,サーブレット/JSPがserviceメソッドの処理で利用できないことを示す,javax.servlet.UnavailableExceptionをスローした場合に実行されるdestroyメソッドにも,該当するサーブレット/JSPのserviceメソッドに設定したタイムアウト値が適用されます。
サーブレットへの初回リクエストのタイムアウト設定について,次の図に示します。
(c) フィルタを経由したサーブレット/JSPの初回リクエスト
フィルタを経由したサーブレットおよびJSPの初回リクエストのタイムアウト設定について,次の図に示します。
フィルタの処理の延長で,サーブレット/JSPが呼び出される場合のフィルタのタイムアウト値は,フィルタの延長で呼び出されるサーブレット/JSPのタイムアウト値を考慮して設定する必要があります。
例えば,図5-6の場合,図中Aの範囲のフィルタのタイムアウト値は,フィルタの処理時間に適用されます。このため,BまたはCの処理時間がAのタイムアウト値に設定した時間に達してしまうと,その時点でタイムアウトされてしまいます。図5-6の場合の例を次に示します。
- 処理中にタイムアウトが発生する例
-
図中のA,B,Cのそれぞれのタイムアウト値として次の表に示す時間が設定されていることとします。
表5‒8 タイムアウト値の設定例2 場所
設定したタイムアウト値
図中A(フィルタ)
240秒
図中BおよびC(サーブレット)
180秒
このような設定の場合に,フィルタでの処理,およびサーブレットでの処理で次の時間が掛かったとします。
-
フィルタでの処理:60秒
-
サーブレットのinitメソッドで処理:120秒
このとき,サーブレットのserviceメソッドでの処理が60秒以上掛かると,図中Aのタイムアウト値の240秒に達してしまうため,サーブレットのserviceメソッドの処理が完了する前にタイムアウトが発生します。
-
また,DD(web.xml)の<servlet>タグを定義していて,<load-on-startup>タグを設定していないサーブレット/JSPの場合で,初回リクエストをフィルタのdoFilterメソッドの延長で実行するとき,サーブレット/JSPのinitメソッドが実行されます。initメソッドが実行されるタイミングを次の表に示します。
対象 |
<servlet>タグの定義 |
<load-on-startup>タグの定義 |
initメソッドの実行されるタイミング |
---|---|---|---|
サーブレット |
あり |
なし |
doFilterメソッドが呼び出される前 |
なし |
なし |
doFilterメソッドの延長 |
|
JSP |
あり |
なし |
doFilterメソッドの延長 |
なし |
なし |
doFilterメソッドの延長 |
このとき,initメソッドのタイムアウト値には,次のどちらかの値が適用されます。
-
フィルタのタイムアウト値≧Webアプリケーションのタイムアウト値の場合
該当するサーブレット/JSPのserviceメソッドに設定したタイムアウト値が有効になります。
-
フィルタのタイムアウト値<Webアプリケーションのタイムアウト値の場合
フィルタに設定したタイムアウト値が有効になります。
(2) EJBの場合
Stateless Session Beanのビジネスメソッド呼び出しのタイムアウト設定について,次の図に説明します。なお,ほかのBeanの種類(Stateful Session Bean,Entity Bean,Message-driven Bean)についても同様に設定できます。
ビジネスメソッドのタイムアウト値に設定した時間を超えると,タイムアウトが発生します。
なお,EJBのメソッド呼び出しの延長で呼び出されるコールバックは,業務処理の一部であるため,タイムアウト値を設定するときには,コールバックメソッドの実行時間を考慮してください。各メソッドで呼び出されるコールバックについては,「5.3.8(2) Enterprise Beanのメソッド呼び出し処理でのタイムアウト値の設定方法」を参照してください。