データベースに格納済みのグローバルセッション情報に対して同じセッションIDを持つリクエストが複数同時に送信された場合,デフォルトの設定では,リクエストは複数同時に処理できます。これによって,データベースセッションフェイルオーバ機能を使用することによる処理性能の低下は抑えられています。
ただし,この運用は,冗長化された複数のJ2EEサーバから同じセッションIDのグローバルセッション情報を同時に更新するような処理が発生しないことを前提とした運用です。複数のJ2EEサーバから同じセッションIDのグローバルセッション情報が同時に更新された場合は,グローバルセッション情報の整合性が失われるおそれがあります。このようなケースを許容できないシステムでは,グローバルセッション情報の整合性を確保するためのモードを有効にする必要があります。
グローバルセッション情報の整合性を保障するモードを完全性保障モードといいます。このモードを有効にした場合,グローバルセッションを更新するたびにデータベースにロックが設定されます。同じセッションIDの複数のリクエストが同時に送信された場合は,リクエストがシリアルに処理されるため,グローバルセッション情報が不整合な状態になることはありません。ただし,複数同時に実行できないこと,およびグローバルセッション情報の格納のたびにロックの設定・解除処理が発生することから,リクエスト処理性能に影響を及ぼす場合があります。
このため,データベースセッションフェイルオーバ機能を使用する場合は,システムの目的や特性に応じて,どちらのモードで運用するかを検討する必要があります。
完全性保障モードの有効・無効による主な違いを次の表に示します。
表6-2 完全性保障モードの有効・無効による主な違い
比較項目 | 完全性保障モード | |
---|---|---|
無効 | 有効 | |
適したシステムの特性 | 性能を重視するシステムに適しています。 | 性能が低下したとしても,確実なセッション情報の引き継ぎが必要なシステムに適しています。 |
リクエストの処理性能 | 同じセッションIDの複数のリクエストを同時に処理できるので,優れています。 | リクエストをシリアルに処理する必要があるため,性能が低下します。 |
グローバルセッション情報の完全性 | 同じセッションIDのグローバルセッション情報を同時に更新した場合は,保障されません。 | 保障されます。 |
データベースに障害が発生した場合の挙動 | J2EEサーバ上のセッション情報を使用して処理を継続します(データベースセッションフェイルオーバ機能の縮退運用)。 | エラーメッセージを出力して処理を停止します。 |
それぞれのモードでのリクエスト処理の流れを次の図に示します。
図6-3 完全性保障モードを無効にした場合のリクエスト処理の流れ(デフォルトの設定)
完全性保障モードが無効の場合,HTTPセッション作成処理の延長でデータベース上にグローバルセッション情報を作成する際にデータベースのロックが取得・解除されますが,一度コミットしたあとのセッション取得処理ではロックが取得されません。また,以降のグローバルセッション情報の更新処理では,データベースのロックの取得処理および解除処理は実施されません。
図6-4 完全性保障モードを有効にした場合のリクエスト処理の流れ
完全性保障モードが有効の場合,HTTPセッション作成処理の延長でデータベース上にグローバルセッション情報を作成する際に,データベースのロックが取得・解除されます。さらに,一度コミットしたあとのセッション取得処理で,再度ロックが取得されます。これによって,HTTPセッション作成後,Webアプリケーション実行中にJ2EEサーバまたはデータベースで障害が発生した場合にも,データベースに不整合が発生しないことが保障されます。また,以降のグローバルセッション情報の更新処理では,更新するたびにデータベースのロックを取得し,更新したあとで解除する処理が実施されます。
グローバルセッション情報のロック時の動作については,「6.8.5(1) ロック取得時のロック取得処理の呼び出し結果」を参照してください。
また,完全性保障モードの有効・無効の設定によって,使用できる機能が異なります。
完全性保障モードの有効・無効の設定別に,使用できるデータベースセッションフェイルオーバの機能を次の表に示します。
表6-3 使用できるデータベースセッションフェイルオーバの機能
項番 | 機能名 | 概要 | 完全性保障モードの設定別の使用可否 | 参照先 | |
---|---|---|---|---|---|
無効 | 有効 | ||||
1 | HTTPセッションの属性情報のサイズ見積もり | HTTPセッションに登録した属性をデータベースに格納する場合のサイズを見積もるための機能 | ○ | ○ | 6.5 |
2 | データベースセッションフェイルオーバ機能の抑止 | URLパスの拡張子,またはURIによってデータベースセッションフェイルオーバ機能の有効/無効を切り替える機能 | ○ | ○ | 6.6 |
3 | 同一セッションIDの同時実行 | 同じセッションIDを持つリクエストの同時実行を実現して,リクエスト処理性能への影響を軽減する機能 | ○ | × | 6.7.1 |
4 | HTTPセッションの参照専用リクエスト定義 | HTTPセッションを更新しないリクエストの場合にグローバルセッション情報を更新しないようにすることで,データベースアクセスによるリクエスト処理性能の低下を防止する機能 | ○ | × | 6.7.2 |
完全性保障モードを無効にした場合の動作の詳細,使用できる機能および注意事項については,「6.7 性能を重視したモードの選択(完全性保障モードの無効化)」を参照してください。
完全性保障モードの設定については,「6.12 J2EEサーバの設定」を参照してください。