Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 運用/監視/連携編


5.3.5 タイムアウト値の設定例と設定値の有効範囲

J2EEアプリケーション実行時間の監視機能を使用するときの,タイムアウト値の設定例と設定値の有効範囲について,Webアプリケーションの場合とEJBの場合に分けて説明します。

〈この項の構成〉

(1) Webアプリケーションの場合

Webアプリケーションの場合のタイムアウト値の設定について説明します。

(a) フィルタ/サーブレット/JSPへの呼び出し

フィルタ/サーブレット/JSP呼び出しのタイムアウト設定について,次の図に示します。

図5‒3 フィルタ/サーブレット/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メソッドに設定したタイムアウト値が適用されます。

サーブレットへの初回リクエストのタイムアウト設定について,次の図に示します。

図5‒4 サーブレットへの初回リクエストのタイムアウト設定

[図データ]

(c) フィルタを経由したサーブレット/JSPの初回リクエスト

フィルタを経由したサーブレットおよびJSPの初回リクエストのタイムアウト設定について,次の図に示します。

図5‒5 フィルタを経由したサーブレットの初回リクエストのタイムアウト設定

[図データ]

図5‒6 フィルタを経由した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メソッドが実行されるタイミングを次の表に示します。

表5‒9 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)についても同様に設定できます。

図5‒7 Stateless Session Beanのビジネスメソッド呼び出しのタイムアウト設定

[図データ]

ビジネスメソッドのタイムアウト値に設定した時間を超えると,タイムアウトが発生します。

なお,EJBのメソッド呼び出しの延長で呼び出されるコールバックは,業務処理の一部であるため,タイムアウト値を設定するときには,コールバックメソッドの実行時間を考慮してください。各メソッドで呼び出されるコールバックについては,「5.3.8(2) Enterprise Beanのメソッド呼び出し処理でのタイムアウト値の設定方法」を参照してください。