5.6.1 セッションフェイルオーバ機能の抑止
セッションフェイルオーバ機能を有効にした場合,HTTPセッションを取得済みのリクエストを受け付けたときに,データベースへのアクセスや,HTTPセッションのシリアライズなどの処理が実施されます。静的コンテンツやHTTPセッションを必要としないコンテンツに対するリクエストであっても,HTTPセッションを取得済みのリクエストと同一のセッションIDが送信された場合には,セッションフェイルオーバ機能が動作してこれらの不要な処理が発生します。
これに対して,セッションフェイルオーバ機能を抑止するURLパターンをURIまたは拡張子で設定すると,設定したURLパターンのリクエストに対するセッションフェイルオーバ機能の処理が抑止されるため,不要な処理が発生しなくなり,処理性能が向上します。このように,セッションフェイルオーバ機能を設定している場合に,特定のURLパターンに対してだけセッションフェイルオーバを抑止する機能をセッションフェイルオーバ抑止機能といいます。
セッションフェイルオーバ抑止機能の有効・無効と実施される処理の違いを,データベースセッションフェイルオーバ機能を例に次の図に示します。
性能向上以外では,次のような目的でセッションフェイルオーバ抑止機能が使用できます。
完全性保障モードが有効の場合のデータベースセッションフェイルオーバ機能では,同一セッションIDのリクエストに対して,排他的に処理を実行します。例えば,PUSH配信をするために常駐するようなサーブレット/JSPなど,長時間処理が終了しないサーブレット/JSPをHTMLのフレームなどの一つから呼び出した場合,そのサーブレット/JSPの処理が終わるまで,同じフレームから送信されるすべてのリクエストは実行されません。これは,一つのフレームから送信されるリクエストはすべて同一のセッションIDを送信するリクエストになるためです。
このような状態を防ぐためには,HTTPセッションを使用していない特定のリクエストに対して,セッションフェイルオーバ機能を抑止する必要があります。
完全性保障モードを有効にしてデータベースセッションフェイルオーバ機能を使用している場合に,セッションフェイルオーバ抑止機能を有効または無効に設定したときに実施される処理の違いを次の図に示します。なお,図中のリクエスト1およびリクエスト2は,同一のセッションIDを送信するリクエストです。
セッションフェイルオーバ抑止機能の有効・無効は,J2EEサーバ単位またはWebアプリケーション単位に設定できます。
-
注意事項
セッションフェイルオーバ抑止機能について,注意事項を示します。
-
セッションフェイルオーバ抑止機能によってセッションフェイルオーバ機能が無効となったリクエスト処理内で,javax.servlet.http.HttpServletRequestインタフェースのgetSession()メソッドまたはgetSession(boolean create)メソッドを呼び出すと,com.hitachi.software.web.dbsfo.SessionOperationException例外がスローされます。このため,このメソッドを呼び出すリクエストに対しては,セッションフェイルオーバ抑止機能は適用できません。
com.hitachi.software.web.dbsfo.SessionOperationException例外についての詳細は,マニュアル「アプリケーションサーバ リファレンス API編」の「3.1 例外クラス」を参照してください。
-
セッションフェイルオーバ抑止機能によってセッションフェイルオーバ機能が無効となったリクエストは,HTTPセッションを使用するリクエストではないため,HTTPセッションのアクセス時刻が更新されません。これによって,次の影響があります。
・javax.servlet.http.HttpSessionインタフェースのgetLastAccessedTime()メソッドは,前回HTTPセッションを使用するリクエストが実行された時刻を返します。
・現在の時刻とHTTPセッションのアクセス時刻の差がタイムアウト時間を超えた場合,HTTPセッションはタイムアウトします。このため,HTTPセッション作成後に,セッションフェイルオーバ機能が無効になったリクエストだけを送信し続けると,HTTPセッションのタイムアウトが発生する場合があります。
-
JSPでは,デフォルトで暗黙的にHTTPセッションが作成されます。このため,HTTPセッションを必要としないJSPに対してセッションフェイルオーバ抑止機能を適用する場合は,明示的にpageディレクティブのsession属性を使用してHTTPセッションを作成しない設定にする必要があります。
-
Webコンテナが提供するログイン認証機能としてFORM認証を使用する場合,暗黙的にHTTPセッションが作成されます。セッションフェイルオーバの抑止機能によってセッションフェイルオーバ機能が無効となったリクエストでFORM認証を使用すると,HTTPセッションを作成できないため,com.hitachi.software.web.dbsfo.SessionOperationException例外が発生し,認証は行われません。ただし,すでにセッションが作成されている場合は,セッションフェイルオーバ抑止機能によってセッションフェイルオーバ機能が無効となったリクエストでも例外は発生しないで,認証は行われます。
-