―BEA WebLogic Server編―

   WebLogic Serverのセッション管理(応用編)

  3. セッションのタイムアウト

 セッションのタイムアウト時間は次のプロパティで設定することができます(*3)。() 内はデフォルト値です。

weblogic.httpd.session.timeoutSecs (3600)

  セッション・オブジェクトの有効期限(秒単位)を設定します。この時間アクセスのないセッション・オブジェクトはサーバのパトロール処理によって自動的に無効化されます。

 Web Applicationでは、デプロイメント・ディスクリプタ(web.xml)でもセッションのタイムアウト時間を設定することができます。ただし、web.xmlで設定するタイムアウト時間は分単位ですので注意してください。

<session-config>
    <session-timeout>60</session-timeout>
</session-config>

  タイムアウトした、あるいは無効化(invalidate)されたセッション・オブジェクトのチェックを行うパトロール処理のインターバルを、秒単位で指定します。例えば以下のように指定します。

weblogic.httpd.session.invalidationIntervalSecs (60)

 セッションのタイムアウト時に、セッションで保持しているオブジェクトの後始末を行いたい場合があります。これを行うには、javax.servlet.http.HttpSessionBindingListener インターフェイスを利用します。このインターフェイスを実装したオブジェクトを HttpSessionにsetAttribute()すると、オブジェクトのvalueBound()が呼び出されます。同様に、removeAttribute()するとvalueUnbound()が呼び出されます。

public interface HttpSessionBindingListener
{
  void valueBound (HttpSessionBindingEvent event);
  void valueUnbound (HttpSessionBindingEvent event);
}

 valueUnbound()はセッションがタイムアウトした場合にも呼び出されるので、タイムアウト時の後処理をvalueUnbound()メソッド内に記述しておけばよいわけです。タイムアウト時のvalueUnbound()は、invalidationIntervalSecsで説明したパトロール処理のタイミングで呼び出されます。

 このHttpSessionBindingListenerインターフェイスの呼び出しには、長い間クラスタ環境下で不具合があったのですがSP9でようやく改修される予定です。

 次回は「Web Applicationのデプロイメント」と題して、web.xmlやweblogic.xml について今度はWebLogic Server 6.0ベースで解説する予定です。


BEA WebLogic Server編「WebLogic Serverのセッション管理(応用編)」
  1. URL rewritingによるセッション管理
  2. クラスタリングの実現(session replication)
3. セッションのタイムアウト

本稿に関するご質問やご意見は下記のメールアドレスまでお願いします。

info@atmarkit.co.jp

 今後の予定
WebLogic Serverのセッション管理(基礎編)
WebLogic Serverのセッション管理(応用編)
Web Applicationのデプロイメント

Web Application TIPS

Web Applicationのセキュリティ

JSPカスタム・タグ
EJB 2.0 のデプロイメント
WebLogic Server固有のEJB設定項目 (1)
WebLogic Server固有のEJB設定項目 (2)

Javaプログラミング・ワンポイントレクチャー INDEX



脚注:WebLogic Server 6.0での変更点

(*1) 前回、Cookieの場合session id名が “JSESSIONID” になったと説明しましたが、URL rewriting の場合 session id はリクエスト・パラメータとしてではなく、servlet 2.2 仕様に準拠した、';'をセパレータに“jsessionid”という名前でエンコードされるようになりました。

/order/Submit.jsp;jsessionid=OqXn3Ab9!-3044480099678014536!-926997315!7001!7002!-2679308213499512072!-926997316!7001!7002

 このため、formでmethod="get"を使用する場合もsession idをhidden fieldで渡す必要がなくなりました。つまり、以下のように素直に encodeURL()を使用すればよいわけです。

<form action="<%= response.encodeURL (request.getContextPath () + "/order/Submit.jsp") %>" method="get">
    ...
</form>

(*2) クラスタの設定は、管理サーバ(Administration Server)上で一括して管理されるようになりました。

(*3)
このようなセッション関係の設定はすべてweblogic.xml(WebLogic Server固有のWeb Applicationデプロイメント・ディスクリプタ)で行うよう変更されています(http://www.beasys.co.jp/e-docs/wls60e/programming/weblogic_xml.html)。

(*4)
Webサーバの代わりに、スティッキング機能を備えたスイッチやロード・バランサーなどのハードウェアを前に立ててクラスタリングさせることもできるようになりました (in-cluster routing)。

(*5)
(*1)のエンコードされたURLの例はクラスタリングした場合のものですが、5.1に比べコンパクト(クラスタ情報だけで約85bytes)になったのがお分かりいただけると思います。

 



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間