HTTPセッションの参照専用リクエストの定義では,HTTPセッションを更新しないリクエスト(参照専用リクエスト)をURIで設定すると,そのURIのリクエストに対してはHTTPセッションのシリアライズやデータベースアクセスの処理が抑止されます。
なお,HTTPセッションを更新だけでなく参照もしないリクエストの場合は,セッションフェイルオーバ機能の抑止を使用できます。参照専用リクエストとセッションフェイルオーバ機能の抑止の対象リクエストの両方に該当するリクエストの場合,セッションフェイルオーバ機能の抑止の対象リクエストとして処理されます。セッションフェイルオーバ機能の抑止については,「6.6 データベースセッションフェイルオーバ機能の抑止」を参照してください。
HTTPセッションの参照専用リクエストの定義は,J2EEサーバ単位に設定できます。J2EEサーバ単位の設定については,「6.12 J2EEサーバの設定」を参照してください。
●注意事項
HTTPセッションの参照専用リクエストの定義について,注意事項を示します。
- 参照専用リクエストで,WebアプリケーションがHTTPセッションを無効化するjavax.servlet.http.HttpSessionインタフェースのinvalidateメソッドを呼び出した場合,com.hitachi.software.web.dbsfo.SessionOperationException例外がスローされます。
- 参照専用リクエストの場合でも,HTTPセッションが存在しない初回のリクエストのときは,HTTPセッションが作成・更新・削除されます。この際,データベース上のグローバルセッション情報も更新されます。
HTTPセッションが存在する2回目以降のリクエストでは,WebアプリケーションがHTTPセッションを更新しても,データベース上のグローバルセッション情報は更新されません。そのため,グローバルセッションの引き継ぎが発生すると,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オブジェクトにセッションの属性情報として登録済みとします。