5.4.2 前提となる設定
セッションフェイルオーバ機能を使用するための前提となる設定について説明します。
(1) セッションフェイルオーバ機能共通の前提となる設定
データベースセッションフェイルオーバ機能を使用する場合,次の設定が必要です。
-
HttpSessionのサーバID付加機能によるセッションIDへのサーバID付加
HTTPセッションのセッションIDにサーバIDを付加する機能です。データベースセッションフェイルオーバ機能(完全性保障モード無効)を使用する場合は,この機能を有効にする必要があります。また,冗長化したJ2EEサーバごとに,異なるサーバID※を設定します。
HttpSessionのサーバID付加機能を無効にした場合,Webアプリケーションの開始時にKDJE34371-EまたはKDJE34404-Eのエラーメッセージがメッセージログに出力され,Webアプリケーションの開始に失敗します。冗長化したJ2EEサーバごとに異なるサーバID※を設定しなかった場合は,意図しないJ2EEサーバにグローバルセッション情報が引き継がれ,グローバルセッション情報の完全性が失われることがあります。
HttpSessionのセッションIDへのサーバIDの付加機能については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」の「2.7.6 セッションIDおよびCookieへのサーバIDの付加」を参照してください。
注※ 実行系と待機系による系切り替えシステムの場合,実行系と待機系の値は同じにしてください。
-
HTTPセッションのスティッキー(Sticky)の設定
負荷分散機を使用する環境でセッションフェイルオーバ機能を使用するには,HTTPセッションのスティッキーを設定する必要があります。
HTTPセッションのスティッキーを設定しない場合,HTTPセッションを保持したリクエストの振り分け先が固定されません。そのため,HTTPセッションを保持したリクエストを受け付けるたびにHTTPセッションの引き継ぎ処理が実施され,性能が劣化するおそれがあります。
-
ホストの時刻の設定
セッションフェイルオーバ機能を使用するには,システム内のJ2EEサーバが稼働するそれぞれのホストに同じ時刻を設定してください。
データベースに格納するセッション情報には,HTTPセッションの作成時刻や,最終アクセス時刻などの情報が含まれます。各ホストでの設定時刻が異なっている場合,セッション情報に自ホストの設定時刻と異なる情報が含まれます。そのため,セッションの引き継ぎが発生した場合にHTTPセッションの制御に問題が発生するおそれがあります。
(2) データベースセッションフェイルオーバ機能の前提となる設定
データベースセッションフェイルオーバ機能を使用する場合,次の設定が必要です。
-
HttpSessionオブジェクト数の上限値の指定
有効となるHttpSessionオブジェクト数の上限値を設定する機能です。この機能は,完全性保障モードを有効にする場合に設定します。
アプリケーション開始時に実施されるネゴシエーション処理に失敗した場合に,Webアプリケーションの開始処理を中止する設定にしているときは,上限値に1以上の有効な値を設定する必要があります。HttpSessionオブジェクト数の上限値を設定していない場合,アプリケーション開始時にKDJE34303-Eのエラーメッセージがメッセージログに出力され,アプリケーションの開始に失敗します。
ただし,ネゴシエーション処理に失敗した場合に,Webアプリケーションの開始処理を続行する設定にしているときは,HttpSessionオブジェクト数の上限値の設定は任意です。また,上限値に-1(無制限)を設定することもできます。HTTPSessionオブジェクト数の上限値に-1(無制限),またはデータベースのセッション情報格納テーブルのレコード数よりも大きな値を設定した場合,HttpSessionオブジェクト数がセッション情報格納テーブルのレコード数を超過したときの動作は,次のようになります。
- 完全性保障モードが無効の場合(任意)
-
該当するHTTPセッションは縮退して,リクエスト処理が続行されます。
- 完全性保障モードが有効の場合
-
KDJE34380-Eのエラーメッセージがメッセージログに出力され,該当するHTTPセッションは作成されません。
HttpSessionオブジェクト数の上限値の設定については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」の「2.7.5 HttpSessionオブジェクト数の上限値の設定」を参照してください。
ネゴシエーション処理については,「6.4.1 アプリケーション開始時の処理」を参照してください。
完全性保障モードについては,「5.5.1(4) データベースセッションフェイルオーバ機能の運用モード」を参照してください。
完全性保障モードが無効の場合のHTTPセッションの縮退については,「5.7.3 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例外がスローされます。
-
-
ユーザ指定名前空間機能
データベースセッションフェイルオーバ機能を使用する場合,ユーザ指定名前空間機能を利用して付与した別名でのJ2EEリソースのルックアップが前提となります。
このため,J2EEサーバのプロパティに次のパラメタを指定してラウンドロビン検索機能を使用している場合,データベースセッションフェイルオーバ機能は使用できません。
java.naming.factory.initial=com.hitachi.software.ejb.jndi.GroupContextFactory
このパラメタを指定している場合,Webアプリケーション開始時にKDJE34305-Eのエラーメッセージがメッセージログに出力され,Webアプリケーションの開始に失敗します。
J2EEサーバで動作するJ2EEアプリケーションでラウンドロビン検索が必要な場合は,InitialContextFactoryの実装を委譲しているクラスをJ2EEサーバのプロパティで指定しないで,各アプリケーションのInitialContext生成時に引数で指定する必要があります。ラウンドロビン検索機能については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「2.7 ラウンドロビンポリシーによるCORBAネーミングサービスの検索」を参照してください。