6.7.1 完全性保障モード無効時の動作

ここでは,完全性保障モードが無効の場合の動作について説明します。

<この項の構成>
(1) 同一セッションIDの同時実行
(2) Webアプリケーション開始時のグローバルセッション情報の引き継ぎ
(3) HTTPセッションの縮退

(1) 同一セッションIDの同時実行

同じセッションIDを持つ複数のリクエストが,冗長化された複数のJ2EEサーバ,または一つのJ2EEサーバに送信された場合に,複数のリクエストを同時に実行します。この機能は完全性保障モードが無効の場合に必ず有効になる機能です。

複数のリクエスト処理を同時に実行するため,グローバルセッション情報のロック,およびロックの解除は行われません。

●注意事項

同一セッションIDの同時実行で複数のリクエスト処理を同時に実行する場合,Webアプリケーションが発行するServlet APIの処理順序は不定となります。

同じHTTPセッションに対して,属性を登録するリクエスト(javax.servlet.http.HttpSessionインタフェースのsetAttributeメソッド)とセッションを無効化するリクエスト(javax.servlet.http.HttpSessionインタフェースのinvalidateメソッド)を同時に送信したり,セッションを無効化するリクエストを二重に送信したりすると,Servlet APIの処理順序によっては,すでに無効化されたHTTPセッションに対して属性の登録や無効化をしてしまう場合があります。この場合,Servlet APIはjava.lang.IllegalStateException例外をスローします。このため,Servlet APIでjava.lang.IllegalStateException例外がスローされることを考慮してWebアプリケーションを実装してください。

(2) Webアプリケーション開始時のグローバルセッション情報の引き継ぎ

WebアプリケーションやJ2EEサーバを停止した場合,またはJ2EEサーバが障害でプロセスダウンした場合,J2EEサーバ上のHTTPセッションは破棄されます。このときのグローバルセッション情報は,Webアプリケーションを再び開始すると,J2EEサーバ上に自動的に引き継がれます。グローバルセッション情報の引き継ぎ処理の流れを次に示します。

  1. データベースから引き継ぐグローバルセッション情報のセッションIDのリストを取得する。
    Webアプリケーションの開始時,データベースから引き継ぐグローバルセッション情報のセッションIDのリストを取得します。
  2. グローバルセッション情報の引き継ぎ処理を実行する。
    セッションIDのリストを取得できた場合,KDJE34344-Iのメッセージをメッセージログに出力し,グローバルセッション情報の引き継ぎ処理を開始します。
    ネットワーク障害などの理由でデータベースからセッションIDのリストを取得できなかった場合,KDJE34345-Wのエラーメッセージをメッセージログに出力し,Webアプリケーションの開始を中止します。
    グローバルセッション情報の引き継ぎ処理では,リストに含まれているセッションIDのグローバルセッション情報を一つずつデータベースからJ2EEサーバ上に引き継ぎます。
  3. 引き継ぎ処理を終了する。
    セッションIDのリストにあるすべてのグローバルセッション情報の引き継ぎが完了した時点で,KDJE34349-Iのメッセージをメッセージログに出力します。

なお,次の条件の場合,グローバルセッション情報は引き継がれません。

項番条件動作
1ネットワーク障害などの理由でデータベースから引き継ぐグローバルセッション情報のセッションIDのリストを取得できなかった場合。KDJE34345-Wのメッセージをメッセージログに出力して,グローバルセッション情報の引き継ぎ処理を終了します。
2引き継ぐグローバルセッション情報が,すでにJ2EEサーバ上に存在する場合(リクエストの受信でJ2EEサーバ上にすでに引き継がれている)。KDJE34347-Iのメッセージをメッセージログに出力して,グローバルセッション情報の引き継ぎ処理はスキップします。
3引き継ぐグローバルセッション情報が,すでに冗長化された別のJ2EEサーバに引き継がれている場合。KDJE34348-Iのメッセージをメッセージログに出力して,グローバルセッション情報の引き継ぎ処理はスキップします。
4ネットワーク障害などの理由でデータベースからグローバルセッション情報を取得できなかった場合。KDJE34346-Wのメッセージをメッセージログに出力して,グローバルセッション情報の引き継ぎ処理はスキップします。
5J2EEサーバ上のHTTPセッション数が,HttpSessionオブジェクト数の上限値の指定機能で設定した上限値に達したために引き継げなかった場合。KDJE34370-Wのメッセージをメッセージログに出力して,グローバルセッション情報の引き継ぎ処理はスキップします。
6グローバルセッション情報のデシリアライズに失敗した場合。KDJE34328-Eのメッセージをメッセージログに出力して,グローバルセッション情報を引き継がないで,データベースから削除します。
7HttpSessionのサーバID付加機能で設定したサーバIDを変更した場合。KDJE34348-Iのメッセージをメッセージログに出力して,グローバルセッション情報の引き継ぎ処理をスキップします。

(3) HTTPセッションの縮退

データベースで次の障害が発生した場合,処理を中断しないで,J2EEサーバ上のHTTPセッションを使用してリクエスト処理を続行します。これをHTTPセッションの縮退といいます。

それぞれの障害でHTTPセッションが縮退した場合の動作を次の表に示します。

発生した障害縮退の動作縮退時に出力されるメッセージ縮退が解除されるタイミング縮退したHTTPセッションの引き継ぎ
グローバルセッション情報の作成時にデータベースに空きレコードがない。J2EEサーバ上のHTTPセッションだけを作成する。KDJE34367-W以降のHTTPセッションの操作時にデータベースに空きレコードがあり,グローバルセッション情報を作成できた場合。データベースにグローバルセッション情報が存在しないため,引き継がれない。
グローバルセッション情報の操作時にデータベース障害が発生した。J2EEサーバ上のHTTPセッションだけを操作する。KDJE34368-W以降のHTTPセッションの操作時にデータベースアクセスに成功した場合。
  • データベースにグローバルセッション情報が存在しない場合:引き継がれない。
  • データベースにグローバルセッション情報が存在する場合:古いグローバルセッション情報が引き継がれるときがある。

注※ 発生した障害ごとに,初めて縮退したときに出力されるメッセージです。それ以降は,縮退したHTTPセッションがすべてなくなってから,再び縮退するまで出力されません。なお,縮退したHTTPセッションがすべてなくなった場合は,メッセージKDJE34369-Iが出力されます。