ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

F.4.1 セション管理の基本的な方法を知りたい

Apcoordinatorでは、セション管理の仕組みを提供しています。セションは、クライアントごとに1個作成されます。同じクライアントから続けてリクエストがある場合、これらは同じセションに属します。異なるクライアントからのリクエストは別のセションとして区別されます。

Apcoordinatorでは、セションを表すクラスとしてセションクラスを使用します。ユーザ定義のセションクラスを作成することによって、クライアント別にデータを保持することができます。

ビジネスクラスをセションスコープとして宣言すると、ビジネスクラスのオブジェクトはセションごとに作成され、セションが終了するまで保存されます。したがって、クライアント別のデータをセションスコープのビジネスクラスに保持することもできます。

また、全てのセションに共通のデータを管理するクラスとして、アプリケーションクラスを使用します。ユーザ定義のアプリケーションクラスを作成することにより、全クライアントで共有するデータをアプリケーションクラスに保持することができます。

データの種類に応じて、データを保持するクラスを以下のように選択してください。

データの種類

データを保持するクラス

各クライアントごとに使用するデータで、1つのビジネスクラスだけで使用するもの

セションスコープのビジネスクラス

各クライアントごとに使用するデータで、複数のビジネスクラスで共有するもの

セションクラス

全クライアントで共有するデータ

アプリケーションクラス

注意

1台のクライアントで複数のブラウザを使用している場合、ひとつのセションとして実行されるか、ブラウザごとにセションが作成されるかは、ブラウザによって異なります。

ビジネスクラスをセションスコープとして宣言する

ビジネスクラスをセションスコープとして宣言するには、ビジネスクラスのinitメソッドをオーバライドし、trueを返却するようにします。

public class SampleHandler extends GenericHandler {
    public boolean init() {
        return true;
    }
    ....
}

セションスコープとして宣言したビジネスクラスは、最初にクラスが呼ばれたときに作成され、セションが終了するまで同じインスタンスが使われます。 ビジネスクラスのインスタンス変数は、クライアント別に用意するデータを保持する目的で使用できます。

セションスコープを持つビジネスクラスのインスタンスをセションから切り離すには、セションクラス (com.fujitsu.uji.SessionProfileクラス) のclearHandlersメソッドを呼び出してください。

ユーザ定義のセションクラスを作成する

ユーザ定義のセションクラスは以下のように作成します。

  1. com.fujitsu.uji.HttpSessionProfileクラスを継承して、セションクラスを作成します。また、クライアント別のデータを保持する変数を追加します。

    package sample;
    public class SampleSession extends com.fujitsu.uji.http.HttpSessionProfile {
        protected String userId = null;
    }

    この例では、ユーザIDを保持するための変数userIdを追加しています。

  2. ファクトリクラスを作成します。ファクトリクラスは、アプリケーションクラス、セションクラスのインスタンスを作成するクラスです。com.fujitsu.uji.Factoryインタフェースを実装する必要がありますが、com.fujitsu.uji.http.HttpFactoryクラスを継承して作成すると便利です。

  3. ファクトリクラスのnewSessionProfileメソッドを実装し、ユーザ定義のセションクラスを生成して返却するようにします。

    package sample;
    import com.fujitsu.uji.SessionProfile;
    public class SampleFactory extends com.fujitsu.uji.http.HttpFactory {
        public SessionProfile newSessionProfile() {
            return new SampleSession();
        }
    }
  4. ファクトリクラスのクラス名は初期化パラメタfactoryで指定します。初期化パラメタはWebアプリケーション環境定義ファイル (web.xml) のcontext-paramタグに記述します。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns=http://java.sun.com/xml/ns/j2ee
          xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
          xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
          version="2.4">
      <context-param>
        <param-name>factory</param-name>
        <param-value>sample.SampleFactory</param-value>
      </context-param>
      <jsp-config>
        <taglib>
          <taglib-uri>uji-taglib</taglib-uri>
          <taglib-location>/WEB-INF/ujiall.tld</taglib-location>
        </taglib>
      </jsp-config>
    </web-app>

セションクラスをセションから切り離す方法については、“F.4.5 明示的にセションを終了させたい”を参照してください。

ユーザ定義のアプリケーションクラスを作成する

ユーザ定義のアプリケーションクラスも、セションクラスと同様の手順で作成します。

  1. com.fujitsu.uji.ApplicationProfileクラスを継承してアプリケーションクラスを作成します。また、全クライアントで共有するデータを保持する変数を追加します。

    package sample;
    public class SampleApplication extends com.fujitsu.uji.ApplicationProfile {
       protected int accessCount = 0;
    }

    この例では、ユーザIDを保持するための変数userIdを追加しています。

  2. ファクトリクラスを作成します。そのnewApplicationProfileメソッドをオーバライドし、ユーザ定義のアプリケーションクラスを生成して返却するようにします。

    package sample;
    import com.fujitsu.uji.SessionProfile;
    public class SampleFactory extends com.fujitsu.uji.http.HttpFactory {
        public ApplicationProfile newApplicationProfile() {
            return new SampleApplication();
        }
    }
  3. ファクトリクラスのクラス名は初期化パラメタfactoryで指定します。初期化パラメタはWebアプリケーション環境定義ファイル (web.xml) のcontext-paramタグに記述します。

関連項目