HTTPセッションの参照専用リクエストの定義機能とは,HTTPセッションを更新しないで参照だけするリクエスト(参照専用リクエスト)のURLパターンを設定することで,そのURLパターンのリクエストに対してHTTPセッションのシリアライズや,データベースまたはEADsサーバへのアクセスの処理を抑止する機能です。
この機能は,データベースセッションフェイルオーバ機能の完全性保証モードが無効の場合,およびEADsセッションフェイルオーバ機能の場合に使用できます。
EADsセッションフェイルオーバ機能を使用している場合に参照専用リクエストを定義したときの処理の流れを次の図に示します。なお,データベースセッションフェイルオーバ機能の場合,図中のグローバルセッション情報の格納先がデータベース上のセッション情報格納テーブルになります。
図5-14 参照専用リクエストの処理(EADsセッションフェイルオーバ機能)
![[図データ]](figure/zu050700.gif)
参照専用リクエストの処理では,セッションを参照するWebアプリケーションを実行後,レスポンスを返します。図中の破線の矢印で示した,HTTPセッションを更新するリクエストの場合に実行されるグローバルセッション情報の更新処理は実行されません。
なお,HTTPセッションを更新だけでなく参照もしないリクエストの場合は,セッションフェイルオーバ抑止機能を使用できます。参照専用リクエストとセッションフェイルオーバ抑止機能の対象リクエストの両方に該当するリクエストの場合,セッションフェイルオーバ抑止機能の対象リクエストとして処理されます。セッションフェイルオーバ抑止機能については,「5.6.1 セッションフェイルオーバ機能の抑止」を参照してください。
HTTPセッションの参照専用リクエストの定義機能は,J2EEサーバ単位またはWebアプリケーション単位に設定できます。
データベースセッションフェイルオーバ機能のJ2EEサーバ単位の設定については,「6.6 J2EEサーバの設定」を参照してください。
EADsセッションフェイルオーバ機能の場合のJ2EEサーバ単位の設定については,「7.5 J2EEサーバの設定」,Webアプリケーション単位の設定については「7.4 cosminexus.xmlでの定義」を参照してください。
●注意事項
HTTPセッションの参照専用リクエストの定義について,注意事項を示します。
- 参照専用リクエストでは,HTTPセッションを無効化できません。参照専用リクエストで,HTTPセッションを無効化するjavax.servlet.http.HttpSessionインタフェースのinvalidate()メソッドをWebアプリケーション内で呼び出した場合,com.hitachi.software.web.dbsfo.SessionOperationException例外またはcom.hitachi.software.web.eadssfo.SessionOperationException例外がスローされます。
- 参照専用リクエストの場合でも,HTTPセッションが存在しない初回のリクエストのときは,HTTPセッションが作成・更新・削除されます。この際,データベース上またはEADsサーバ上のグローバルセッション情報も更新されます。
HTTPセッションが存在する2回目以降のリクエストでは,WebアプリケーションがHTTPセッションを更新しても,データベース上またはEADsサーバ上のグローバルセッション情報は更新されません。そのため,グローバルセッションの引き継ぎが発生すると,HTTPセッションの属性情報は更新前の状態に戻ります。
- 参照専用リクエストの処理内で,HTTPセッションの有効期限の変更(javax.servlet.http.HttpSessionインタフェースのsetMaxInactiveInterval()メソッドの呼び出し)をした場合,グローバルセッションの有効期限は変更されません。そのため,グローバルセッションの引き継ぎが発生すると,有効期限は変更前の状態に戻ります。
- 参照専用リクエストの処理内で,HTTPセッションの属性情報の変更をした場合,グローバルセッション情報は変更されません。そのため,グローバルセッションの引き継ぎが発生すると,HTTPセッションの属性情報は変更前の状態に戻ります。なお,属性情報の変更とは次のことを指します。
- javax.servlet.http.HttpSessionインタフェースのsetAttribute()メソッドまたはputValue()メソッドで,HTTPセッションに新しい属性情報を登録する,または登録済みのセッション属性を置き換える。
- javax.servlet.http.HttpSessionインタフェースのremoveAttribute()メソッドまたはremoveValue()メソッドで,HTTPセッションに登録済みの属性情報を削除する。
- HTTPセッションに登録済みの属性情報の内容を変更する。
セッションの属性情報の内容を変更する場合の例を次に示します。
java.util.Hashtable table = (java.util.Hashtable)session.getAttribute("attr1");
table.put("key1", "value1"); |
この例では,sessionはHttpSessionオブジェクトを格納した変数です。java.util.Hashtableオブジェクトは,別のリクエストで「attr1」という名前でHttpSessionオブジェクトにセッションの属性情報として登録済みとします。