Cosminexus 機能解説
ここでは,リクエスト実行時のグローバルセッションフェイルオーバ用フィルタの処理と,グローバルセッション情報の格納,更新,削除処理について説明します。
セッションフェイルオーバ用フィルタでは,リクエスト実行前には,グローバルセッション情報をロックし,必要に応じて引き継ぎ処理をします。また,リクエスト処理後には,グローバルセッション情報を格納または更新して,ロックを解除します。
異なるJ2EEサーバから同じグローバルセッション情報を同時に更新されることを抑止するため,セッションフェイルオーバ用フィルタでは,SFOサーバ上のグローバルセッション情報のロックをします。
グローバルセッション情報にロックを設定することによって,J2EEアプリケーションでのダブルクリックなどによって二重送信されたリクエストが別のJ2EEサーバに送信された場合の誤動作も防止できます。
なお,ロックの解除待ちには,タイムアウトを設定できます。解除待ちでタイムアウトした場合,該当するグローバルセッション情報は使用できなくなります。このとき,セッションは破棄され,新規リクエストとしてJ2EEアプリケーションを呼び出します。
セッション情報の引き継ぎ処理では,新規にHttpSessionオブジェクトを生成し,セッション情報を登録します。Servlet仕様で提供されているセッションに関する次の三つのリスナをJ2EEアプリケーションで定義している場合,リスナへの通知が実施されます。
呼び出されるリスナの種類について,システム内で発生するイベントごとに次の表に示します。
表12-8 呼び出されるリスナの種類
システム内で発生するイベント | 呼び出されるリスナ | HttpSessionオブジェクト,およびグローバルセッションへの操作 |
---|---|---|
ログイン | HttpSessionListener |
|
J2EEアプリケーション内でのセッションの使用 | HttpSessionAttributeListener HttpSessionBindingListener |
|
ログアウト | HttpSessionListener HttpSessionAttributeListener HttpSessionBindingListener |
|
障害発生によるグローバルセッション情報の引き継ぎ |
|
|
ほかのサーバに引き継がれたHttpSessionオブジェクトの有効期限切れ |
|
グローバルセッションは,HTTPセッションと同時に生成されます。グローバルセッションが生成されると,グローバルセッション情報も生成されます。このとき,HttpSessionオブジェクトに対してセッション情報が未登録である場合も,グローバルセッション情報は生成されます。ただし,セッション情報が未登録であるという情報が生成されます。
J2EEアプリケーションでHttpSessionオブジェクトの作成後,グローバルセッション情報がSFOサーバに格納されるまでの処理について,次の図に示します。
図12-24 グローバルセッション情報の格納処理
J2EEアプリケーションでセッションを使用し,グローバルセッション情報が更新されると,SFOサーバ内のグローバルセッション情報も更新する必要があります。
なお,グローバルセッション情報の更新中は,グローバルセッション情報にロックが掛かります。ロックが掛かると,ほかのJ2EEサーバからのグローバルセッション情報の操作ができなくなります。
グローバルセッション情報の更新処理について,次の図に示します。
図12-25 グローバルセッション情報の更新処理
J2EEアプリケーション内で,javax.servlet.http.HttpSessionインタフェースのinvalidateメソッドが呼び出される場合の,明示的なグローバルセッション情報の削除の処理について,次の図に示します。
図12-26 グローバルセッション情報の明示的な削除
クライアント上のグローバルセッションIDのHTTP Cookie情報が削除されるのは,レスポンスがコミットされていなかった場合だけです。J2EEアプリケーションからセッションフェイルオーバ用フィルタに処理が戻った時点で,すでにレスポンスがコミットしている場合は,クライアント上のグローバルセッションIDのHTTP Cookie情報は削除されません。この場合,次に送信するリクエストにグローバルセッション情報がCookieとして付けられた時点で,HTTP Cookie情報の削除処理が実施されます。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.