6.4.2 リクエスト実行時の処理
ここでは,リクエスト実行時のグローバルセッションの作成,更新,削除およびグローバルセッションの引き継ぎについて説明します。
Webアプリケーション内で処理が実行されると,処理の延長でグローバルセッション情報に対しての処理が発生します。Webアプリケーション内で実行される処理の例と,例に対応したリクエスト実行時のグローバルセッション情報に対して実行される処理,および参照先を次の表に示します。
表6-11 Webアプリケーション内での処理の例とグローバルセッション情報に対して実行される処理の対応
項番 | Webアプリケーション内で実行される処理の例 | グローバルセッション情報に対して実行される処理 | 参照先 |
---|
1 | ログイン | グローバルセッション情報の作成 | (1) |
2 | 業務の実行(ページ遷移/更新) | グローバルセッション情報の更新 | (2) |
3 | ログアウト | グローバルセッション情報の削除 | (3) |
4 | タイムアウトによるログアウト | 有効期限切れによるグローバルセッション情報の削除 | 6.4.3 |
5 | 別のJ2EEサーバにグローバルセッションを引き継いでの業務の実行 (J2EEサーバでの障害発生時) | グローバルセッション情報を使用したセッション情報の引き継ぎ | (4) |
グローバルセッション情報操作中に障害が発生した場合の処理結果については,「6.4.6 グローバルセッション情報操作中の障害発生時の動作」を参照してください。
- <この項の構成>
- (1) グローバルセッション情報の作成
- (2) グローバルセッション情報の更新
- (3) グローバルセッション情報の削除
- (4) グローバルセッション情報を使用したセッション情報の引き継ぎ
(1) グローバルセッション情報の作成
J2EEサーバ上で新規にHTTPセッションが作成されると,データベース上にグローバルセッション情報が作成されます。
グローバルセッション情報の作成で実行される処理の流れを次の図に示します。
図6-2 グローバルセッション情報の作成(データベースセッションフェイルオーバ機能)
![[図データ]](figure/zu060410.gif)
- HTTPセッションが必要なリクエストを受け付けると,新規にHTTPセッションが作成されます。HTTPセッションの作成のタイミングは,Webアプリケーション内で,javax.servlet.http.HttpServletRequestインタフェースのgetSession()メソッド,またはgetSession(true)メソッドを使用してHttpSessionオブジェクトを新規に取得したときです。
次のような場合もHttpSessionオブジェクトが作成されるため,新規にHTTPセッションが作成されます。
- Form認証を使用した場合
- JSPでpageディレクティブのsession属性にtrueを指定した場合
- JSPでpageディレクティブのsession属性の指定を省略した場合
- HTTPセッション作成処理の延長でデータベース上にグローバルセッション情報が作成されます。作成されたグローバルセッション情報は,セッション情報格納テーブルに格納されます。
グローバルセッション情報は,作成と同時にロックされます。
- グローバルセッション情報の作成に伴って,空きレコード情報が更新されます。
- 作成されたグローバルセッション情報は一度コミットされます。
完全性保障モードが有効の場合,改めてロックが取得されます。これは,HTTPセッション作成後に,Webアプリケーション実行中のJ2EEサーバ,またはデータベースの障害発生によって,セッション情報格納テーブルと空きレコード情報テーブルの間で不整合を発生させないためです。
- Webアプリケーションでの処理が終了すると,HTTPセッションが更新されます。
- HTTPセッションの更新処理の延長で,グローバルセッション情報が更新されます。完全性保障モードが有効の場合,更新が完了すると,ロックが解除されます。
- 注意
- グローバルセッション情報の数が上限に達していた場合の動作
- グローバルセッション情報作成時に,データベース上のグローバルセッション情報の数が上限に達していた場合,HTTPセッションを縮退します。HTTPセッションの縮退については,「5.7.3 HTTPセッションの縮退」を参照してください。
- 完全性保障モードが有効の場合にデータベース上のグローバルセッション情報の数が上限に達していたときは,java.lang.IllegalStateExceptionがスローされ,HTTPセッションの取得に失敗します。
- また,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグでwebserver.session.max.throwHttpSessionLimitExceededExceptionパラメタにtrueが設定された場合,java.lang.IllegalStateExceptionの代わりにcom.hitachi.software.web.session.HttpSessionLimitExceededExceptionがスローされます。HttpSessionLimitExceededExceptionについては,マニュアル「アプリケーションサーバ リファレンス API編」の「3.1 例外クラス」を参照してください。
(2) グローバルセッション情報の更新
Webアプリケーション実行中にセッションが更新されると,J2EEサーバでHTTPセッションが更新されます。それに伴って,データベース上のグローバルセッション情報も更新されます。
グローバルセッション情報の更新で実行される処理の流れを次の図に示します。
図6-3 グローバルセッション情報の更新(データベースセッションフェイルオーバ機能)
![[図データ]](figure/zu060510.gif)
- HTTPセッションが存在するリクエストを受信します。
完全性保障モードが有効の場合,Webアプリケーション実行前にデータベース上のグローバルセッション情報がロックされます。
- Webアプリケーションでのセッションの更新に伴って,HTTPセッションが更新されます。
- HTTPセッションの更新によって,データベース上のグローバルセッション情報が最新の情報に更新されます。
完全性保障モードが有効の場合,ロックが解除されます。
グローバルセッション情報のロック時の動作については,「6.4.5(1) ロック取得時のロック取得処理の呼び出し結果」を参照してください。
(3) グローバルセッション情報の削除
Webアプリケーション内でのセッションの削除処理で,javax.servlet.http.HttpSessionインタフェースのinvalidate()メソッドを実装して明示的にHTTPセッションを削除すると,その処理の延長でデータベース上のグローバルセッション情報が削除されます。
グローバルセッション情報の削除で実行される処理の流れを次の図に示します。
図6-4 グローバルセッション情報の削除(データベースセッションフェイルオーバ機能)
![[図データ]](figure/zu060610.gif)
- HTTPセッションの削除が必要なリクエストを受信します。
完全性保障モードが有効の場合,Webアプリケーション実行前にデータベース上のグローバルセッション情報がロックされます。
- Webアプリケーションでのセッションの削除に伴って,HTTPセッションが削除されます。
- HTTPセッションの削除によって,データベース上のグローバルセッション情報および空きレコード情報が削除されます。
完全性保障モードが有効の場合,ロックが解除されます。
(4) グローバルセッション情報を使用したセッション情報の引き継ぎ
受信したリクエストに関連づけられたHTTPセッションがJ2EEサーバ上に存在しない場合,データベース上のグローバルセッション情報を使用してHTTPセッションが再作成されます。これによってセッションが引き継げます。
グローバルセッション情報を使用したセッション情報の引き継ぎで実行される処理の流れを次の図に示します。
図6-5 グローバルセッション情報を使用したセッション情報の引き継ぎ(データベースセッションフェイルオーバ機能)
![[図データ]](figure/zu060810.gif)
- 受信したリクエストに関連づけられたHTTPセッションがJ2EEサーバ上に存在しない場合,データベース上のグローバルセッション情報を呼び出して,J2EEサーバ上にHTTPセッションが再作成されます。
再作成されたHTTPセッションによってセッションが引き継がれ,Webアプリケーションでセッションの更新処理が実行されます。セッションの更新処理の延長上で,HTTPセッションが更新されます。
- HTTPセッションの更新に伴って,グローバルセッション情報が更新されます。
なお,グローバルセッション情報の引き継ぎができた場合,KDJE34321-Iのメッセージがメッセージログに出力されます。クライアントから受信したセッションIDに対応するグローバルセッション情報がデータベース上に存在しないためにグローバルセッション情報の引き継ぎができなかった場合,KDJE34325-Wのメッセージがメッセージログに出力されます。