―BEA WebLogic Server編―

清水徳雄
日本BEAシステムズ
プロフェッショナル・サービス
2001/4/10
Javaプログラミング
ワンポイントレクチャーについて

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

 第2回目はBEA WebLogic Server(以下WebLogic Server)におけるセッション(HttpSession)の扱いについての応用編をお送りします。

 本稿におけるコーディングは、すべてJSPを前提に記述しています。また、WebLogic Server 6.0になって変更された点については脚注の形で補足させていただきます。なお、本稿ではセッションとは何かといった説明や、セッションを扱うための基礎的なプログラミングの解説は割愛させていただきますのでご了承ください。

 1.URL rewritingによるセッション管理

 「WebLogic Serverのセッション管理(基礎編)」に引き続いて、まずは、URL rewriting について少し補足しましょう。Servlet 2.2からはWeb Application(編注)の導入に伴いcontext pathが追加になっています。context pathとはWeb Applicationごとに固有に付加されるprefix URLです。つまりURLは下記のような構成になります。

(編注:本稿ではJ2EE Servlet 2.2 仕様で規定されているWebアプリケーション向けのアプリケーション資源管理のフレームワークを「Web Application」と表記し、WebブラウザをクライアントとしたWebアプリケーションの一般名称を「Webアプリケーション」と表記しています)

●2.1 以前
http://domain[:port]/servlet-path/path-info?query-string
●2.2 以降
http://domain[:port]/context-path/servlet-path/path-info?query-string

 context pathは、Web Applicationのデプロイ時に変更される可能性があります。動的なページにURLを埋め込む際には、下記のようにコーディングすることでよりポータブルなコンテンツを作成することができます。

<a href="<%= response.encodeURL (request.getContextPath () + "/order/Submit.jsp") %>">注文を確定</a>

 この例で“/order/Submit.jsp”はWeb Applicationのdocument rootからの絶対パスです。一般にWeb Applicationではdocument rootからの絶対パスでURLを記述することをお勧めします。

 何らかの理由でcookieも使えず、かつformでmethod="get"を使用しなければならない場合にはsession idをhidden fieldで渡す必要があります。WebLogic Server 5.1に限定されますが、下記のようなコーディングでcookie.nameプロパティを取得しhidden fieldを生成することができます(*1)

<form action="/shoppingcart/AddCart.jsp" method="get">
    <input type="hidden" name=" <%= T3Services.getT3Services ().config ().getProperty ("weblogic.httpd.session.cookie.name") %>" value="<%= session.getId () %>"/>
    ...
</form>

 実際にはこういったコーディングは避け、T3Services...getProperty("...")の部分はユーティリティ関数(getSessionName () など)やカスタム・タグでラッピングして詳細を隠ぺいすべきでしょう。

クラスタリングの実現

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 記事ランキング

本日 月間