BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

Web アプリケーションのアセンブルとコンフィグレーション

 Previous Next Contents Index PDF で侮ヲ  

Web アプリケーションにおけるセッションとセッション永続性の使用

この章では、セッションとセッションの永続性を設定する方法について説明します。

 


HTTP セッションの概要

セッション トラッキングを使用すると、複数のサーブレットか HTML ページにわたって、本来はステートレスであるユーザの状況を追跡できます。セッションの定義は、ある一定期間中に同じクライアントから出される一連の関連性のあるブラウザ リクエストです。セッション トラッキングは、ショッピング カート アプリケーションのように、全体として何らかの意味を持つ一連のブラウザ リクエスト (これらのリクエストをページとみなす) を結合します。

 


セッション管理の設定

WebLogic Server は、デフォルトによってセッション トラッキングを処理するよう設定されています。セッション トラッキングを使用する際にプロパティを設定する必要はありません。ただし、WebLogic Server がどのようにセッションを管理するかをコンフィグレーションすることは、最高のパフォーマンスを実現するためにアプリケーションをチューニングするときの重要な鍵となります。チューニングの内容は、以下のような要素によって異なります。

HTTP セッション プロパティ

WebLogic Server のセッション トラッキングは、WebLogic 固有のデプロイメント記述子である weblogic.xml のプロパティでコンフィグレーションします。WebLogic 固有のデプロイメント記述子の編集手順については、手順 4: セッション パラメータの定義を参照してください。

セッション属性の全リストについては、jsp-descriptorを参照してください。

WebLogic Server 7.0 では、一部のロード バランサでセッションを維持できなくなる セッション ID フォーマットの変更が行われました。

新しいサーバ起動フラグ -Dweblogic.servlet.useExtendedSessionFormat=true は、ロードバランシング アプリケーションでセッションの維持に必要な情報を保持します。 この拡張されたセッション ID フォーマットは、URL 書き換えがアクティブで、かつ起動フラグが true に設定されている場合には URL に組み込まれます。

セッション タイムアウト

HTTP セッションが期限切れになるまでの間隔を指定できます。セッションが期限切れになると、そのセッションに格納されたデータはすべて破棄されます。この間隔は、次のとおり web.xml または weblogic.xml に設定できます。

セッション クッキーのコンフィグレーション

WebLogic Server は、クライアント ブラウザによってサポートされる場合、クッキーを使用してセッション管理を行います。

WebLogic Server がセッション トラッキングに使用するクッキーは、デフォルトによって一時的なものとして設定されているため、セッションより長く存続することはありません。ユーザがブラウザを終了すると、クッキーは失われ、セッション有効期間が終了したものと見なされます。この動作はセッションの用途の基本であり、このようにセッションを使用することをお勧めします。

クッキーのセッション トラッキング属性は、WebLogic 固有のデプロイメント記述子である weblogic.xml でコンフィグレーションできます。セッションとクッキーに関連する属性の全リストについては、jsp-descriptorを参照してください。

WebLogic 固有のデプロイメント記述子の編集手順については、手順 4: セッション パラメータの定義を参照してください。

セッションより長く存続するクッキーの使用

長期間存続するクライアントサイド ユーザ データの場合、WebLogic Server アプリケーションは HTTP サーブレット API を介してブラウザに独自のクッキーを作成および設定し、HTTP セッションに関連付けられたクッキーは使用しようとはしません。WebLogic Server アプリケーションがクッキーを使用して特定のマシンのユーザの自動ログインを行う場合、新しいクッキーの存続期間を長く設定します。クッキーは、クライアント マシンだけから送ることができます。WebLogic Server アプリケーションは、そのユーザが複数の場所からアクセスする必要がある場合、サーバにデータを格納する必要があります。

ブラウザ クッキーの存続期間を直接セッションの長さに関連付けることはできません。クッキーがそれに関連付けられているセッションより早く期限切れになった場合、そのセッションは切り離されてしまいます。セッションがそれに関連付けられているクッキーより早く期限切れになった場合、サーブレットはそのセッションを見つけることができません。この場合、新しいセッションは request.getSession(true) メソッドが呼び出されるときに割り当てられます。セッションの使用は一時的なものに限定する必要があります。

クッキーの最大存続時間は、weblogic.xml デプロイメント記述子のセッション記述子にある CookieMaxAgeSecs パラメータで設定できます。詳細については、手順 4: セッション パラメータの定義を参照してください。

セッションのログアウトと終了

ユーザ認証情報は、ユーザのセッション データと、Web アプリケーションの対象となるサーバまたは仮想ホストのコンテキストの両方に格納されます。ユーザのログアウトに多く使われる session.invalidate() メソッドでは、ユーザの現在のセッションのみが無効になり、ユーザの認証情報は有効なまま、サーバまたは仮想ホストのコンテキストに格納されます。サーバまたは仮想ホストが 1 つの Web アプリケーションだけをホストしている場合は、session.invalidate() メソッドを実行するとユーザはログアウトされます。

複数の Web アプリケーションで認証を使用するときには、複数の Java メソッドと戦略を使用できます。詳細については、『HTTP サーブレット プログラマーズ ガイド』の「複数のアプリケーションに対する単一のサインオンの実装」(を参照してください。

 


セッション永続性のコンフィグレーション

セッションの永続性を使用して、HTTP セッション オブジェクトにデータを永続的に格納し、WebLogic Server のクラスタ全体のフェイルオーバとロード バランシングを有効にします。アプリケーションが HTTP セッション オブジェクトにデータを格納するとき、データをシリアライズ可能にする必要があります。

セッションの永続性の実装は、以下の 5 つです。

最初の 4 つについてはここで説明します。インメモリ レプリケーションについては、『WebLogic Server クラスタ ユーザーズガイド』の「HTTP セッション ステートのレプリケーションについて」(を参照してください。

ファイル、JDBC、クッキーベース、およびメモリ (単一サーバ、非レプリケート) のセッション永続性には、共通のプロパティがいくつか存在します。以下の節で説明するとおり、各永続性メソッドはそれぞれ独自の属性セットを持っています。

セッション属性の一般的なプロパティ

この節では、ファイル システム、メモリ (単一サーバ、非レプリケート)、JDBC、およびクッキーベースの永続性に共通の属性について説明します。メモリ内に保持されるセッションの数は、WebLogic 固有のデプロイメント記述子である weblogic.xml<session-descriptor> 要素で次のプロパティを設定してコンフィグレーションできます。これらのプロパティは、セッション永続性を使用している場合にだけ適用できます。

CacheSize

メモリ内で一度にアクティブにできるキャッシュされたセッションの数を制限します。同時に大量のアクティブ セッションが発生することが見込まれる場合、これらのセッションでサーバの RAM を満たしたくはありません。仮想メモリとのスワッピングにより、パフォーマンスが低下する可能性があるからです。キャッシュが満杯になると、最も古いセッションは永続ストレージに格納され、必要になったときに自動的に呼び戻されます。永続性を使用しない場合、このプロパティは無視され、メイン メモリに保持可能なセッション数はソフトウェアによって制限されなくなります。デフォルトでは、キャッシュされるセッションの数は 1024 です。最小値は 16、最大値は Integer.MAX_VALUE です。空のセッションは 100 バイト未満のメモリしか使用しませんが、データの追加に応じて大きくなります。

SwapIntervalSecs

cacheEntries の制限に達したときに、WebLogic Server が最も古いセッションをキャッシュから永続ストレージにパージするまでの待ち時間です。

このプロパティを設定しない場合、デフォルトは 10 秒です。最小値は 1 秒、最大値は 604800 秒 (1 週間)です。

InvalidationIntervalSecs

WebLogic Server が、タイムアウトの無効なセッションに対してハウスクリーニング チェックを実行してから古いセッションを削除してメモリを解放するまでの待ち時間を秒単位で設定します。このパラメータは、<session-timeout> に設定された値より小さい値に設定します。このパラメータを使用すると、トラフィックの多いサイトで WebLogic Server の動作を最適化できます。

最小値は毎秒 (1) です。最大値は、週に 1 回 (604800 秒) です。このパラメータを設定しない場合、デフォルトは 60 秒です。

<session-timeout> を設定するには、Web アプリケーション デプロイメント記述子である web.xmlsession-config を参照してください。

メモリ ベース、単一サーバ、非レプリケート永続ストレージの使い方

メモリ ベース、単一サーバ、非レプリケート永続ストレージを使用するには、WebLogic 固有のデプロイメント記述子である weblogic.xml<session-descriptor> 要素にある PersistentStoreType プロパティを memory に設定します。メモリ ベースのストレージを使用する場合、すべてのセッション情報はメモリに格納され、WebLogic Server を終了して再起動すると失われます。

注意: WebLogic Server を実行するときに十分なヒープ サイズを割り当てないと、負荷がかかったときにサーバのメモリが足りなくなることがあります。

ファイルベースの永続ストレージの使い方

ファイルベースの永続ストレージをセッション用にコンフィグレーションするには、次の手順に従います。

  1. デプロイメント記述子ファイル、weblogic.xml<session-descriptor> 要素の PersistentStoreType プロパティを file に設定します。

  2. WebLogic Server がセッションを格納するディレクトリを設定します。PersistentStoreDirを参照してください。

    この属性値を明示的に設定しなかった場合、WebLogic Server によって一時ディレクトリが自動的に作成されます。

    ファイルベース永続性をクラスタで使用する場合、この属性を、クラスタ内のすべてのサーバがアクセスできる共有ディレクトリに明示的に設定しなければなりません。このディレクトリは手動で作成する必要があります。

データベースの永続ストレージとしての使い方 (JDBC 永続性)

JDBC の永続性は、この目的のために提供されたスキーマを使ってデータベース テーブルにセッション データを格納します。JDBC ドライバを備えたデータベースはすべて使用できます。データベース アクセスは、接続プールを使ってコンフィグレーションします。

JDBC ベースの永続ストレージをセッション用にコンフィグレーションするには、次の手順に従います。

  1. WebLogic 固有のデプロイメント記述子である weblogic.xml<session-descriptor> 要素の PersistentStoreType プロパティを jdbc に設定します。

  2. WebLogic 固有のデプロイメント記述子、weblogic.xmlPersistentStorePool プロパティを使用して、JDBC 接続プールが永続ストレージ用に使用されるよう設定します。WebLogic Server Administration Console で定義される接続プールの名前を使用します。

    データベース接続プールの設定の詳細については、「JDBC 接続の管理」を参照してください。

  3. 許可を持っているユーザに対応する接続用 ACL を設定します。データベース接続の詳細については、「JDBC 接続の管理」を参照してください。

  4. JDBC ベースの永続性のための wl_servlet_sessions というデータベース テーブルを設定します。データベースに接続する接続プールは、このテーブルの読み取り/書き込みアクセス権を保有する必要があります。次の表は、このテーブルを作成するときに使用するカラム名とデータ型を示しています。

    カラム名

    wl_id

    最大 100 文字の可変長の英数字カラム。

    例 : Oracle VARCHAR2(100)
    主キーは次のように設定する。

    wl_id + wl_context_path.

    wl_context_path

    最大 100 文字の可変長の英数字カラム。

    例 : Oracle VARCHAR2(100)。このカラムは主キーの一部として使用する (wl_id カラムの説明を参照)。

    wl_is_new

    1 文字のカラム。例 : Oracle CHAR(1)

    wl_create_time

    20 桁の数値カラム。例 : Oracle NUMBER(20)

    wl_is_valid

    1 文字のカラム。例 : Oracle CHAR(1)

    wl_session_values

    ラージ バイナリ カラム。例 : Oracle LONG RAW

    wl_access_time

    20 桁の数値カラム。例 : NUMBER(20)

    wl_max_inactive_interval

    整数カラム。例 : Oracle Integer。セッションが無効になるまでのクライアント リクエストの間隔の秒数。時間値が負の場合は、セッションがタイムアウトしないことを示す。


     

Oracle DBMS を使用している場合、次の SQL 文を使って wl_servlet_sessions テーブルを作成できます。

create table wl_servlet_sessions
( wl_id VARCHAR2(100) NOT NULL,
wl_context_path VARCHAR2(100) NOT NULL,
wl_is_new CHAR(1),
wl_create_time NUMBER(20),
wl_is_valid CHAR(1),
wl_session_values LONG RAW,
wl_access_time NUMBER(20),
wl_max_inactive_interval INTEGER,
PRIMARY KEY (wl_id, wl_context_path) );

SqlServer2000 を使用している場合は、次の SQL 文を使って wl_servlet_sessions テーブルを作成します。

create table wl_servlet_sessions
( wl_id VARCHAR2(100) NOT NULL,
wl_context_path VARCHAR2(100) NOT NULL,
wl_is_new VARCHAR(1),
wl_create_time DeCIMAL,
wl_is_valid VARCHAR(1),
wl_session_values IMAGE,
wl_access_time DECIMAL,
wl_max_inactive_interval INTEGER,
PRIMARY KEY (wl_id, wl_context_path) );

前述の SQL 文のいずれかを、使用する DBMS に合わせて変更します。

注意: ユーザは、JDBConnectionTimeoutSecs 属性が設定されたセッション データのロードに失敗するまで、JDBC セッション永続性が接続プールからの JDBC 接続を待つ最大の期間をコンフィグレーションできます。詳細については、JDBConnectionTimeoutSecsを参照してください。

クッキーベースのセッション永続性の使用

クッキーベースのセッション永続性は、ユーザのブラウザのクッキーにすべてのセッション データを格納することで、セッション永続性のステートレスなソリューションを提供します。クッキーベースのセッション永続性が最も役に立つのは、セッションに大量のデータを格納する必要がないときです。クッキーベースのセッション永続性は、クラスタ フェイルオーバ ロジックが必要ないので、WebLogic Server のインストール環境をより簡単に管理できます。セッションが格納されるのはブラウザ内であって、サーバ上ではありません。WebLogic Server の起動と停止は、セッションを失わずに行うことができます。

クッキーベースのセッション永続性には、次に示すいくつかの制限事項があります。

クッキーベースのセッション永続性を設定するには、次の手順に従います。

  1. weblogic.xml<session-descriptor> 要素で、PersistentStoreType パラメータを cookie に設定します。

  2. 必要な場合は、PersistentStoreCookieName パラメータを使ってクッキーに名前を設定します。デフォルトは WLCOOKIE です。

 


URL 書き換えの使い方

状況によっては、ブラウザまたは無線デバイスがクッキーを受け入れないこともあります。この場合、クッキーによるセッション トラッキングを行うことができません。URL 書き換えを使用すると、ブラウザがクッキーを受け入れないことを WebLogic Server が検出したときに、こうした状況を自動的に置き換えることができます。URL 書き換えでは、セッション ID を Web ページのハイパーリンクにエンコードし、サーブレットはそれらをブラウザに送り返します。ユーザが以後これらのリンクをクリックすると、WebLogic Server は URL アドレスからその ID を抽出し、サーブレットが getSession() メソッドを呼び出すと適切な HttpSession を見つけ出します。

WebLogic 固有のデプロイメント記述子である weblogic.xml<session-descriptor> 要素に URLRewritingEnabled 属性を設定することで、URL 書き換えを有効にします (この属性のデフォルト値は、true です)。URLRewritingEnabledを参照してください。

URL 書き換えのコーディングに関するガイドライン

URL 書き換えをサポートするためにどのように URL をコードで処理するかについては、いくつかのガイドラインがあります。

URL 書き換えと Wireless Access Protocol (WAP)

WAP アプリケーションを作成する場合、WAP プロトコルはクッキーをサポートしていないため、URL を書き換える必要があります。また、一部の WAP デバイスでは、URL の長さが 128 文字 (パラメータも含む) に制限されます。これにより、URL 書き換えによって転送できるデータ サイズが制限されます。パラメータ用の領域を大きくするために、WebLogic Server でランダムに生成されるセッション ID のサイズを制限できます。IDLengthを参照してください。

 

Back to Top Previous Next