セッション管理サポート
WebSphere® Application Server は、 サーブレット API 仕様に記述されている javax.servlet.http.HttpSession インターフェースをサポートする機能を提供します。 この機能は、セッション管理 という見出しでグループにまとめられています。
セッション管理機能では、サーブレット 2.3 API 仕様に従って、Web モジュール単位によるセッション有効範囲をサポートしています。特定のセッションに関連付けられたデータにアクセスできるのは、 同一の Web モジュール内のサーブレットだけです。同じブラウザーからの複数の要求が、それぞれ固有の Web アプリケーションを指定すると、 その結果、セッション ID を共有する複数のセッションができます。セッション ID を共有するセッションはいずれも、 他のセッションに影響を及ぼさずに無効にすることができます。
それぞれの Web アプリケーションごとにセッション・タイムアウトを構成することができます。Web アプリケーションのタイムアウト値が 0 (デフォルト値) の場合は、 セッション管理機能の無効化タイムアウト値が使用されます。
HTTP クライアントがサーブレットと対話するとき、 一連のクライアント要求と関連付けられている状態情報は、 HTTP セッションとして表され、セッション ID によって識別されます。 セッション管理は、HTTP セッションの管理に責任を負い、 セッション・データにストレージを提供し、セッション ID を割り振り、 各クライアント要求と関連付けられているセッション ID を、 Cookies または URL 再書き込みを使用してトラッキングします。 セッション管理は、セッション関連の情報を、 以下のいくつかの方法で保管することができます。
- アプリケーション・サーバー・メモリー内に保管する (デフォルト)。 この情報は他のアプリケーション・サーバーとは共有できません。
- データベース内に保管する。 このストレージ・オプションは、データベース・パーシスタント・セッション と呼ばれます。
別の WebSphere Application Server インスタンス内に保管する。 このストレージ・オプションは、メモリー間セッション と呼ばれます。
最後の 2 つのオプションは、分散セッション と呼ばれます。 フェイルオーバー機能のために HTTP セッションを 使用する際に、分散セッションは不可欠となります。 アプリケーション・サーバーは、現在メモリー内にないセッション ID に関連した要求を受け取ると、 外部ストア (データベースまたはメモリー間) にアクセスすることにより、 必要なセッション状態を取得することができます。 分散セッション・サポートが使用可能にされていない場合、アプリケーション・サーバーは、 最初にセッションが作成されたサーバーとは別のサーバーに送信される HTTP 要求のセッション情報にはアクセスできません。 セッション管理は、キャッシング最適化を実装して、 特に連続した要求が同じアプリケーション・サーバーにルーティングされた場合に、 外部ストアへのアクセスのオーバーヘッドを最小化します。
セッション状態を外部ストアに保管すると、フォールト・トレランスの度合いも指定されます。 アプリケーション・サーバーがオフラインになると、 その現行セッションの状態は、引き続き外部ストアで使用可能です。 この可用性により、他のアプリケーション・サーバーが、そのセッションと関連付けられた後続のクライアント要求の処理を続行できるようになります。
セッション状態を外部ロケーションに保存しても、サーバー障害の場合にその状態が保持されることは保証されません。 例えば、サーバーが、セッションの状態を変更しているときに障害が発生した場合、 いくつかの情報が失われ、そのセッションを使用するその後の処理が影響を受けることがあります。 ただし、この状態に相当するのは、セッション情報を失うリスクのある非常に短い時間です。
セッション状態の外部ストアへの保存には、 外部ロケーションにあるセッション状態へのアクセスによって、貴重なシステム・リソース が使用されてしまう可能性があるという欠点があります。セッション管理は、セッション・データをサーバー・レベルでキャッシュすることにより、 システム・パフォーマンスを改善できます。 同じサーバーに送信される複数の連続する要求は、 キャッシュ内の必要な状態データを見つけることができ、 実際のセッション状態が外部ストア内でアクセスされる回数を削減するので、その結果として、 外部ロケーション・アクセスに関連したオーバーヘッドを削減します。
