データベースセッションフェイルオーバ機能を使用するためには,次の設定が必要です。
- Webクライアントが保持する無効なセッションIDの削除
HTTPセッション無効化時にWebクライアントに保持されているHTTP Cookieの情報を削除し,無効化済みのHTTPセッションに対するセッションIDの送信を抑止する機能です。データベースセッションフェイルオーバ機能を使用するには,この機能を有効にする必要があります。
HTTPセッションのセッションIDを示すHTTP Cookieの削除を無効にしている場合,Webアプリケーション開始時にKDJE34339-Eのエラーメッセージがメッセージログに出力され,Webアプリケーションの開始に失敗します。HTTPセッションのセッションIDを示すHTTP Cookieの削除については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」の「2.7.4 Webクライアントが保持する無効なセッションIDの削除」を参照してください。
- HttpSessionのサーバID付加機能によるセッションIDへのサーバID付加
HTTPセッションのセッションIDにサーバIDを付加する機能です。完全性保障モードを無効にしている場合は,この機能を有効にする必要があります。また,冗長化したJ2EEサーバごとに,異なるサーバIDを設定します。
HttpSessionのサーバID付加機能を無効にした場合,Webアプリケーションの開始時にKDJE34371-Eのエラーメッセージがメッセージログに出力され,Webアプリケーションの開始に失敗します。冗長化したJ2EEサーバごとに異なるサーバIDを設定しなかった場合は,意図しないJ2EEサーバにグローバルセッション情報が引き継がれ,グローバルセッション情報の完全性が失われることがあります。
HttpSessionのセッションIDへのサーバIDの付加機能については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」の「2.7.6 セッションIDおよびCookieへのサーバIDの付加」を参照してください。
- HttpSessionオブジェクト数の上限値の指定機能
有効となるHttpSessionオブジェクト数の上限値を設定する機能です。
アプリケーション開始時に実施されるネゴシエーション処理に失敗した場合に,Webアプリケーションの開始処理を中止する設定にしているときは,上限値に1以上の有効な値を設定する必要があります。HttpSessionオブジェクト数の上限値を設定していない場合,アプリケーション開始時にKDJE34303-Eのエラーメッセージがメッセージログに出力され,アプリケーションの開始に失敗します。
ただし,ネゴシエーション処理に失敗した場合に,Webアプリケーションの開始処理を続行する設定にしているときは,HttpSessionオブジェクト数の上限値の設定は任意です。また,上限値に-1(無制限)を設定することもできます。HTTPSessionオブジェクト数の上限値に-1(無制限),またはデータベースのセッション情報格納テーブルのレコード数よりも大きな値を設定した場合,HttpSessionオブジェクト数がセッション情報格納テーブルのレコード数を超過したときの動作は,次のようになります。
- 完全性保障モードが無効の場合
- 該当するHTTPセッションは縮退して,リクエスト処理が続行されます。
- 完全性保障モードが有効の場合
- KDJE34380-Eのエラーメッセージがメッセージログに出力され,該当するHTTPセッションは作成されません。
HttpSessionオブジェクト数の上限値の設定については,マニュアル「Cosminexus アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」の「2.7.5 HttpSessionオブジェクト数の上限値の設定」を参照してください。
ネゴシエーション処理については,「6.8.1 アプリケーション開始時の処理」を参照してください。
完全性保障モードが無効の場合のHTTPセッションの縮退については,「6.7.1(3) HTTPセッションの縮退」を参照してください。
- HTTPセッションのスティッキー(Sticky)の設定
負荷分散機を使用する環境でデータベースセッションフェイルオーバ機能を使用するには,HTTPセッションのスティッキーを設定する必要があります。
HTTPセッションのスティッキーを設定しない場合,HTTPセッションを保持したリクエストの振り分け先が固定されません。そのため,HTTPセッションを保持したリクエストを受け付けるたびにHTTPセッションの引き継ぎ処理が実施され,性能が劣化するおそれがあります。
- ホストの時刻の設定
データベースセッションフェイルオーバ機能を使用するには,システム内のJ2EEサーバが稼働するそれぞれのホストに同じ時刻を設定してください。
データベースに格納するセッション情報には,HTTPセッションの作成時刻や,最終アクセス時刻などの情報が含まれます。各ホストでの設定時刻が異なっている場合,セッション情報に自ホストの設定時刻と異なる情報が含まれます。そのため,セッションの引き継ぎが発生した場合にHTTPセッションの制御に問題が発生するおそれがあります。
- デフォルトの実行待ちキュー,Webアプリケーション単位の実行待ちキュー,URLグループ単位の実行待ちキューの設定
Webアプリケーション単位の同時実行スレッド数の制御機能が有効の場合,デフォルトの実行待ちキュー,Webアプリケーション単位の実行待ちキュー,URLグループ単位の実行待ちキューの空きが不足したときに,クライアントに503エラーを返すかどうかを簡易構築定義ファイルのwebserver.dbsfo.thread_control_queue.enabledパラメタに設定します。なお,デフォルトでは,クライアントに503エラーを返します。
クライアントに503エラーを返さない設定にした場合,その実行待ちキューサイズには十分に大きな値を設定してください。
クライアントに503エラーを返す設定にした場合,web.xmlで指定するエラーページで次に示すHTTPセッションの更新をしないでください。
- HTTPセッションの作成
WebアプリケーションがHTTPセッションを作成した場合,javax.servlet.http.HttpServletRequestインタフェースのgetSessionメソッドの呼び出し元に,com.hitachi.software.web.dbsfo.SessionOperationException例外がスローされ,HTTPセッションは作成されません。
- HTTPセッションの有効期限の変更(javax.servlet.http.HttpSessionインタフェースのsetMaxInactiveIntervalメソッドの呼び出し)
WebアプリケーションがHTTPセッションの有効期限を変更した場合,データベース上のグローバルセッションの有効期限は変更されません。グローバルセッションの引き継ぎが発生すると,有効期限は変更前の状態に戻ります。
- HTTPセッションの属性情報の変更
WebアプリケーションがHTTPセッションの属性情報を変更した場合,データベース上のグローバルセッション情報は変更されません。グローバルセッションの引き継ぎが発生すると,属性情報は変更前の状態に戻ります。
- HTTPセッションの無効化(javax.servlet.http.HttpSessionインタフェースのinvalidateメソッドの呼び出し)
Webアプリケーションがjavax.servlet.http.HttpSessionインタフェースのinvalidateメソッドを呼び出した場合,com.hitachi.software.web.dbsfo.SessionOperationException例外がスローされます。