2.22.2 セッションマネージャの指定
セッションマネージャは,ユーザ定義プロパティで指定します。ユーザ定義プロパティを次に示します。
webserver.sessionManager.<コンテキストルート名>.className=<セッションマネージャのクラス名>
セッションマネージャは,war単位に指定します。<コンテキストルート名>にwarのコンテキストルートを指定します。<セッションマネージャのクラス名>に使用するライブラリのセッションマネージャを指定します。コンテキストルート名が「/examples」の場合の設定例を次に示します。
webserver.sessionManager./examples.className=de.javakaffee.web.msm.MemcachedBackupSessionManager
webserver.sessionManager.<コンテキストルート名>.classNameで指定できる値は,de.javakaffee.web.msm.MemcachedBackupSessionManagerとなります。それ以外の値を指定した場合は,アプリケーションの起動に失敗します。
サーバ単位でセッションマネージャを指定する場合は,コンテキストルート名にはアスタリスクを指定します。設定例を次に示します。
webserver.sessionManager.*.className=de.javakaffee.web.msm.MemcachedBackupSessionManager
war単位の指定とサーバ単位の指定を同時に指定することもできます。その場合は,war単位で指定したセッションマネージャを優先します。それ以外のwarはアスタリスクで指定したセッションマネージャが指定されます。
- 〈この項の構成〉
(1) セッションマネージャの指定機能のバックグラウンド処理
セッションマネージャを指定した場合,ライブラリ側のバックグラウンド処理の実装によっては,セッションのタイムアウト処理やバックアップ処理が実行されます。ライブラリ側のバックグラウンド処理が実行されるようにするためには,Webコンテナ側でスレッドを作成する必要があります。
スレッドは,J2EEサーバ用ユーザプロパティファイルのwebserver.sessionManager.backgroundProcessor.threadsのプロパティに,スレッド数を指定することで作成できます。設定例を次に示します。
webserver.sessionManager.backgroundProcessor.threads=2
この値のデフォルト値は0です。スレッド数はサーバ単位での指定であり,セッションマネージャを指定したすべてのアプリケーションで使い回されます。セッションマネージャの指定機能の使用の有無に関係なく,指定した数のスレッドが作成されます。この値を-1にした場合または不正な値を指定した場合,デフォルト値が使用されます。スレッドが作成されない場合,指定されたセッションマネージャのバックグラウンド処理は実行されません。
- 注意事項
-
スティッキーセッションを無効にしてmemcached session managerを使用する場合,バックグラウンド処理でセッションのタイムアウト処理やバックアップ処理は実行されません。memcached session managerでスティッキーセッションを無効にする場合は,J2EEサーバ用ユーザプロパティファイルのwebserver.sessionManager.backgroundProcessor.threadsのプロパティに0(デフォルト値)を設定してください。
指定されたセッションマネージャのバックグラウンド処理を実行する場合,実行間隔を指定できます。バックグラウンド処理は,J2EEサーバ用ユーザプロパティファイルのwebserver.sessionManager.backgroundProcessor.delayのプロパティに指定した実行間隔(秒単位)を6倍した間隔で実行されます。10を指定した場合,60秒間隔でバックグラウンド処理が実行されます。設定例を次に示します。
webserver.sessionManager.backgroundProcessor.delay=10
この値のデフォルト値は10です。実行間隔はサーバ単位での指定になり,セッションマネージャを指定したすべてのアプリケーションで同じ値を使用します。この値を0以下にした場合,バックグラウンド処理は実行されません。不正な値を指定した場合,デフォルト値が使用されます。
(2) HttpSessionオブジェクト数の上限値の指定
指定されたセッションマネージャのHttpSessionオブジェクト数の上限値を指定できます。上限値はmaxActiveSessionsプロパティに指定します。設定例を次に示します。classNameと同じように,コンテキストルート名にアスタリスクを指定できます。
webserver.sessionManager./examples.maxActiveSessions=-1
HttpSessionオブジェクト数の上限値を設定した場合の動作は,cosminexus.xmlの<war>タグ内の<http-session>-<http-session-max-number>を設定した場合と同じ動作になります。cosminexus.xmlに上限値を設定した場合は,警告メッセージを出力してcosminexus.xmlの設定を無視します。
(3) セッションマネージャのプロパティの指定
classNameとmaxActiveSessionsはアプリケーションサーバで用意するプロパティですが,指定されたセッションマネージャのプロパティを指定することもできます。webserver.sessionManager.<コンテキストルート名>.propertiesのあとに,セッションマネージャのプロパティ名を指定します。指定できるプロパティは各セッションマネージャを参照してください。propertiesのコンテキストルート名にはアスタリスクは指定できません。
webserver.sessionManager.<コンテキストルート名>.properties.<プロパティ名>=<値>
memcached session managerの指定例を次に示します。プロパティの詳細はmemcached session managerのドキュメントを参照してください。
webserver.sessionManager./examples.properties.memcachedNodes=node1:11211 webserver.sessionManager./examples.properties.sticky=false webserver.sessionManager./examples.properties.sessionBackupAsync=false
(4) セッションフェイルオーバ機能との関係
アプリケーションサーバのセッションフェイルオーバ機能の前提となる設定と,セッションマネージャの指定機能の関係を次に示します。
(a) アプリケーションサーバのセッションフェイルオーバ機能の前提となる設定
-
HTTPセッションのスティッキー(Sticky)の設定
アプリケーションサーバのセッションフェイルオーバ機能はスティッキーセッションを使用することが前提となっています。スティッキーセッションを使用することで,リクエストを処理するインスタンスを限定して性能劣化を防ぎます。
セッションマネージャの指定機能を使用したクラウド環境では,インスタンスのスケールインおよびスケールアウトのために,スティッキーセッションは使用しないことを前提とします。グローバルセッションをインメモリ製品に保存することで,性能劣化を防ぎます。スティッキーセッションは通常,負荷分散機とライブラリ側で設定します。
-
ホストの時刻の設定
システム内のJ2EEサーバが稼働するそれぞれのノードは同じ時刻を設定します。時刻が異なる場合の動作は保証しません。
(b) アプリケーションサーバのデータベースセッションフェイルオーバ機能の前提となる設定
-
HttpSessionオブジェクト数の上限値の指定
アプリケーションサーバのデータベースセッションフェイルオーバ機能の場合,cosminexus.xmlの<http-session>-<http-session-max-number>で指定します。セッションマネージャの指定機能では,maxActiveSessionsで指定します。設定例を次に示します。
webserver.sessionManager./examples.maxActiveSessions=-1
-
完全性保証モード
完全性保証モードでは,グローバルセッション情報がロックされます。ロックされた場合にライブラリの動作が保証できないため,完全保証モードは無効にしてください。デフォルトは無効です。
-
デフォルトの実行待ちキュー,Webアプリケーション単位の実行待ちキュー,およびURLグループ単位の実行待ちキューの設定
データベースセッションフェイルオーバの設定の注意事項なので,セッションマネージャの指定機能は関係ありません。
(5) memcached session managerの設定
(a) 使用するファイル
セッションマネージャの指定機能では,ライブラリとしてmemcached session managerを使用します。ライブラリを使用するために必要なファイルを次に示します。memcached session managerの詳細に関しては,開発元のドキュメントを参照してください。
ファイル |
バージョン |
CCCサポートバージョン |
入手先 |
---|---|---|---|
memcached-session-manager-2.3.2.jar |
2.3.2 |
11-10 |
memcached session managerの開発元のサイトから,サポートしているバージョンを入手してください。 |
memcached-session-manager-tc9-2.3.2.jar |
2.3.2 |
11-10 |
|
elasticache-java-cluster-client-1.1.2.jar (memcached AWS用クライアント) |
1.1.2 |
11-10 |
memcached session managerの機能を使用する場合に,上記以外のファイルが必要になる場合があります。詳細は開発元のドキュメントを参照してください。
(b) ファイルの設定
アプリケーションサーバで,memcached session managerに接続する場合,(a)にあるファイルを,J2EEサーバ用オプション定義ファイルに定義します。また,ライブラリの設定をJ2EEサーバ用ユーザプロパティファイルに設定します。設定例を次に示します。ライブラリの設定のclassNameには,memcached session managerのセッションマネージャを指定します。memcachedNodesには接続先を設定します。stickyには,スティッキーセッションを有効にしないため,falseを指定します。また,sessionBackupAsyncにはfalseを指定し,Explicitヒープも無効にします。
- J2EEサーバ用オプション定義ファイルの例
add.class.path=C:\lib\elasticache-java-cluster-client-1.1.2.jar add.class.path=C:\lib\memcached-session-manager-2.3.2.jar add.class.path=C:\lib\memcached-session-manager-tc9-2.3.2.jar add.jvm.arg=-XX:-HitachiUseExplicitMemory
- J2EEサーバ用ユーザプロパティファイルの例
webserver.sessionManager./examples.className=de.javakaffee.web.msm.MemcachedBackupSessionManager webserver.sessionManager./examples.properties.memcachedNodes=node1:11211 webserver.sessionManager./examples.properties.sticky=false webserver.sessionManager./examples.properties.sessionBackupAsync=false
(6) memcached session managerの注意事項
-
アプリケーションサーバのセッションマネージャを使用した場合,一定間隔でタイムアウト監視をします。ただし,セッションマネージャの指定機能でスティッキーセッションを無効にした場合,セッションをWebコンテナで管理せずmemcachedで管理するため,アプリケーションサーバではタイムアウト監視をしません。タイムアウト監視をしないときのタイムアウトしたセッションの破棄については,管理しているmemcachedの仕様に依存します。memcachedの仕様については,memcachedのドキュメントやFAQを参照してください。
-
Webアプリケーションをリロードする場合,リロード実行前に生成したセッション情報を引き継いで,リロード後も継続して利用します。セッションマネージャの指定機能でスティッキーセッションを無効にする場合は,セッションをWebコンテナで管理しません。そのため,リロードを実行しても,セッション情報ファイルにセッション情報は出力されません。Webアプリケーションのリロード時のセッション情報の引き継ぎについては,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「17.8.8(2) Webアプリケーションのリロード時のセッション情報の引き継ぎ」を参照してください。
-
セッションマネージャの指定機能を使用した場合,稼働統計のSessionCount.HighWaterMark,LowWaterMark,Currentは常に0になります。
-
セッションマネージャの指定機能でスティッキーセッションを無効にする場合,Webコンテナでセッションを管理しません。そのため,HttpSessionオブジェクト数の上限値を超えたセッションを作成しようとしても,例外にならないことがあります。リクエストの処理中は,Webコンテナ内にセッションを保持するため,HttpSessionオブジェクト数の上限値を超えたリクエストを同時に処理しようとした場合に,例外が発生します。HttpSessionオブジェクト数の上限値が0の場合,セッションを使用するリクエストがあった場合に,例外が発生します。HttpSessionオブジェクト数の上限値については,「2.7.5 HttpSessionオブジェクト数の上限値の設定」を参照してください。
-
セッションマネージャの指定機能を使用する場合,memcachedノードがダウンしてセッション情報を保存できないときにアプリケーションが動作すると,セッションはリクエスト終了時に保存されず,破棄されます。そのため,memcachedノードがダウンしてセッション情報が保存できない状況にならないように,アプリケーションの運用には注意してください。
-
memcached session managerのスティッキーセッションの設定のデフォルト値はスティッキー有効(sticky=true)ですが,アプリケーションサーバで使用する場合のデフォルト値はスティッキー無効(sticky=false)になります。アプリケーションサーバでmemcached session managerを使用する場合,スティッキー有効にするためには明示的にsticky=trueを指定してください。
-
memcachedは,メモリがいっぱいのとき,更新内容の古いデータを新しいデータで上書きするため,セッションが期限切れになる前にセッションが削除されるおそれがあります。そのため,memcachedにメモリを割り当てる場合は,memcachedのメモリがいっぱいにならないように注意してください。
-
スティッキーセッションを無効にする場合,実際のセッションに加えて,SessionValidityInfoオブジェクトがmemcachedに格納されます。セッションとSessionValidityInfoの合計が,1セッションで使用するデータサイズになります。これらの実際の格納サイズは,セッションのシリアライズの方法によって異なります。そのため,memcachedのメモリを見積もるときは,セッションが格納されている状態で,コマンド等でこれらのサイズを確認してください。サイズの統計コマンドの実行例を次に示します。
# telnet localhost 11211 stats sizes STAT 128 7 STAT 704 7 END
-
セッションの有効期限が切れても,memcachedのデータは削除されません。詳細はmemcachedのFAQを参照してください。
-
memcached session managerのJMXStatisticsは,アプリケーションサーバでは使用できません。
-
同一セッションでは,セッションを生成したリクエストとは別のリクエストでjavax.servlet.http.HttpSessionインタフェースのsetMaxInactiveIntervalメソッドを呼び出しても,HTTPセッションの有効期限は変更されません。setMaxInactiveIntervalメソッドの呼び出しは,セッションを生成したリクエストと同じリクエストで実施してください。
-
memcached session managerのプロパティのsessionBackupAsyncにtrue(デフォルト値)が指定されている場合,2台以上のJ2EEサーバを構成した環境でアプリケーションからセッションを取得したとき(javax.servlet.http.HttpServletRequestインタフェースのgetSessionメソッドを呼び出したとき)に,セッションの存在に関係なく,nullが返ることがあります。そのため,sessionBackupAsyncにはfalseを指定してください。