2.7.5 HttpSessionオブジェクト数の上限値の設定
アプリケーションサーバでは,有効となるHttpSessionオブジェクト数に,上限値を設定できます。
HttpSessionオブジェクトの上限値は,J2EEアプリケーションに含まれるWebアプリケーションの属性(プロパティ)として設定します。J2EEアプリケーションの設定については,「2.7.7 cosminexus.xmlでの定義」を参照してください。
- 注意事項
-
Webアプリケーションにセッションフェイルオーバ機能を適用している場合,次の設定にしているときは,HttpSessionオブジェクト数の上限値の設定が必要です。
-
アプリケーション開始時のネゴシエーション処理に失敗したときに,Webアプリケーションの開始処理を中止する設定(簡易構築定義ファイルのwebserver.dbsfo.negotiation.high_levelキー)
この場合,HttpSessionオブジェクト数の上限値を設定していないと,セッション情報の引き継ぎを行うWebアプリケーションの開始時にエラーとなり,Webアプリケーションを開始できません。アプリケーション開始時のネゴシエーション処理に失敗したときに,Webアプリケーションの開始処理を続行する設定にしている場合は,HttpSessionオブジェクト数の上限値の設定は任意です。
セッションフェイルオーバ機能については,マニュアル「アプリケーションサーバ 機能解説 拡張編」の「5.2 セッションフェイルオーバ機能の概要」を参照してください。
セッションフェイルオーバ機能のWebアプリケーション開始時のネゴシエーション処理については,マニュアル「アプリケーションサーバ 機能解説 拡張編」の「6.4.1 アプリケーション開始時の処理」を参照してください。
簡易構築定義ファイル,および指定するパラメタの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「4.3 簡易構築定義ファイル」を参照してください。
-
- 〈この項の構成〉
(1) 上限値を設定する対象になるHttpSessionオブジェクト
上限値を設定する対象になるのは,有効なHttpSessionオブジェクトです。
有効なHttpSessionオブジェクトとは,javax.servlet.http.HttpServletRequestクラスのgetSessionメソッドで取得したHttpSessionオブジェクトのうち,次の二つの条件を満たすオブジェクトを指します。
-
タイムアウトしていないオブジェクト
-
invalidateメソッドが呼ばれていないオブジェクト
(2) HttpSessionオブジェクト数が上限値を超えた場合の動作(例外の発生)
HttpSessionオブジェクト数の上限値を設定していると,設定した上限値を超えてHttpSessionオブジェクトを生成しようとした場合にjavax.servlet.http.HttpServletRequestクラスのgetSessionメソッドで例外が発生します。設定に応じて,次のどちらかの例外が発生します。
-
java.lang.IllegalStateException
-
java.lang.IllegalStateExceptionの派生クラスであるcom.hitachi.software.web.session.HttpSessionLimitExceededException
どちらの例外をスローするかは,J2EEアプリケーションのパラメタで設定します。J2EEアプリケーションの設定については,「2.7.8(1) J2EEサーバの設定」を参照してください。
WebコンテナでのHttpSessionオブジェクト生成は,次のタイミングで実行されます。
-
JSP実行時
pageディレクティブのsession属性に「true」を指定した場合,またはsession属性を省略している場合に,JSPを実行したときを指します。
-
FORM認証を必要とするURLへのアクセス時
設定した上限値を超えてHttpSessionオブジェクトの生成処理が発生すると,次のように動作します。
-
JSP実行時に上限値を超えた場合
JSPのユーザコードが実行される前に,java.lang.IllegalStateExceptionまたはcom.hitachi.software.web.session.HttpSessionLimitExceededExceptionがスローされます。
-
FORM認証を必要とするURLへのアクセス時に上限値を超えた場合
ログイン用ページにリクエストが転送される前に,java.lang.IllegalStateExceptionまたはcom.hitachi.software.web.session.HttpSessionLimitExceededExceptionがスローされます。
- ポイント
-
com.hitachi.software.web.session.HttpSessionLimitExceededExceptionクラスを使用する場合は,J2EEアプリケーションの開発時に<Application Serverのインストールディレクトリ>/CC/lib/ejbserver.jarをクラスパスに追加して,Javaプログラムをコンパイルしてください。
(3) HttpSessionオブジェクト数が上限値を超えた場合の動作(メッセージの出力)
HttpSessionオブジェクト数の上限値を設定していると,設定した上限値を超えてHttpSessionオブジェクトを生成しようとした場合にKDJE39225-Eのメッセージがログに出力されます。
KDJE39225-Eは,HTTPセッションを使用するリクエストが実行されるたびに出力されるため,同じメッセージでログが埋まってしまうおそれがあります。同じメッセージが繰り返し出力されるのを抑止するために,KDJE39225-Eのインターバル(出力間隔)を設定できます。必要に応じて,インターバルを設定してください。このインターバルはWebアプリケーション単位に適用されます。
メッセージの出力インターバルの設定については,「2.7.8(1) J2EEサーバの設定」を参照してください。