Java EE アプリケーションは一般に、大量のセッション状態データを保持しています。Web ショッピングカートは、セッション状態の古典的な例です。アプリケーションはまた、頻繁に必要になるデータをセッションオブジェクトにキャッシュすることもできます。実際、ユーザーとの対話が多いほぼすべてのアプリケーションには、セッション状態の保持が必要になります。
HADB ソフトウェアは、Sun Java System Application Server の Application Server スタンドアロン配布 で提供されます。Sun Java System Application Server の利用可能な配布については、『Sun Java System Application Server 9.1 Installation Guide』の「Distribution Types and Their Components」を参照してください。HADB 機能はエンタープライズプロファイルでのみ利用可能です。プロファイルの詳細については、『Sun Java System Application Server 9.1 管理ガイド』の「使用法プロファイル」を参照してください。
HADB を使用している場合、asadmin configure-ha-persistence を使用して、Web コンテナの可用性を有効化および設定します。このコマンドの詳細については、configure-ha-persistence(1) を参照してください。
あるいは、asadmin set コマンドを使用して、設定の availability-service.web-container-availability.availability-enabled プロパティーを true に設定し、次に configure-ha-persistence を使用して必要に応じてプロパティーを設定します。
セッション状態データの格納にインメモリーレプリケーションを使用している場合、Web コンテナ可用性の有効化およびプロパティーの設定は asadmin set コマンドを使用して行う必要があります。configure-ha-persistence コマンドは HADB に対してのみ使用できます。
たとえば、set コマンドを使用して次のように指定します。ここで、config1 は設定の名前です。
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849 config1.availability-service.web-container-availability.availability-enabled="true" asadmin configure-ha-persistence --user admin --passwordfile secret.txt --type ha --frequency web-method --scope modified-session --store jdbc/hastore --property maxSessions=1000:reapIntervalSeconds=60 cluster1 |
ツリーコンポーネントで、目的の設定を選択します。
「可用性サービス」をクリックします。
「Web コンテナの可用性」タブを選択します。
「可用性サービス」ボックスにチェックマークを付けて、可用性を有効にします。無効にするには、このボックスのチェックマークを外します。
次の節の 「可用性の設定」の説明に従って、ほかの設定を変更します。
サーバーインスタンスを再起動します。
HADB ソフトウェアは、Sun Java System Application Server の Application Server スタンドアロン配布 で提供されます。Sun Java System Application Server の利用可能な配布については、『Sun Java System Application Server 9.1 Installation Guide』の「Distribution Types and Their Components」を参照してください。HADB 機能はエンタープライズプロファイルでのみ利用可能です。プロファイルの詳細については、『Sun Java System Application Server 9.1 管理ガイド』の「使用法プロファイル」を参照してください。
「可用性サービス」の「Web コンテナの可用性」タブを使用すると、次の可用性設定を変更できます。
持続性のタイプ: 可用性が有効化されている Web アプリケーションのセッションの持続性メカニズムを指定します。使用できる値は、memory (持続性なし)、file (ファイルシステム)、replicated (ほかのサーバー上のメモリー)、および ha (HADB) です。
ha セッション持続性を使用するには、HADB を設定し、有効にしておく必要があります。設定の詳細については、configure-ha-cluster(1)を参照してください。
Web コンテナの可用性が有効である場合、デフォルトの持続性タイプは、次の表に示すとおりプロファイルによって異なります。
プロファイル |
持続性タイプ |
---|---|
開発者 |
memory |
クラスタ |
replicated |
エンタープライズ |
ha |
セッションの持続性が必要となる本稼動環境では、ha または replicated を使用します。memory および file の持続性タイプは、高可用性セッション持続性を提供しません。
Web コンテナの可用性を無効にする場合、デフォルトの持続性タイプは memory です。
持続性の頻度: セッション状態を格納する頻度を指定します。持続性のタイプが ha または replicated の場合にのみ適用できます。指定できる値は次のとおりです。
web-method - セッション状態は、各 Web 要求の終了時に、クライアントに応答を返信する前に格納されます。このモードでは、障害発生時にセッション状態を完全に更新するための最良の保証が得られます。これはデフォルトの設定です。
time-based - セッション状態が、reapIntervalSeconds ストアプロパティーによって設定された頻度でバックグラウンドに格納されます。このモードでは、セッション状態が必ずしも完全に更新される保証は得られません。ただし、各要求後に状態が格納されないので、パフォーマンスが大幅に向上します。
持続性の範囲: 格納するセッションオブジェクトの範囲と、セッション状態を格納する頻度を指定します。持続性のタイプが ha または replicated の場合にのみ適用できます。使用できる値は次のとおりです。
session - 常にすべてのセッション状態が格納されます。このモードでは、セッションデータを分散可能な Web アプリケーションに正しく格納するための最良の保証が得られます。これはデフォルトの設定です。
modified-session - セッション状態が変更された場合、すべてのセッション状態が格納されます。HttpSession.setAttribute() または HttpSession.removeAttribute() が呼び出された場合に、セッションが変更されたと見なします。属性が変更されるたびに、必ず setAttribute() を呼び出す必要があります。これは Java EE 仕様の要件ではありませんが、このモードを正しく動作させるために必要になります。
modified-attribute - 変更されたセッション属性だけが格納されます。このモードを正しく動作させるには、次のガイドラインに従う必要があります。
セッション状態が変更されるたびに、setAttribute() を呼び出します。
属性間で相互参照しないようにします。別個の各属性キーにあるオブジェクトグラフを直列化し、別々に格納します。別個の各キーにあるオブジェクト間に相互参照がある場合は、正常な直列化および直列化復元は行われません。
複数の属性間、または少なくとも読み取り専用属性と変更可能な属性間でセッション状態を分散します。
シングルサインオン状態: シングルサインオン状態の持続性を有効にするには、このボックスにチェックマークを付けます。無効にするには、このボックスのチェックマークを外します。詳細については、「セッションフェイルオーバーでのシングルサインオンの使用」を参照してください。
HTTP セッションストア: セッションの持続性のために HADB への接続に使用する JDBC リソースを変更した場合、HTTP セッションストアを変更できます。詳細については、configure-ha-cluster(1)を参照してください。
個々の Web アプリケーションの可用性の有効化と設定を行うには、アプリケーション配備記述子ファイル sun-web.xml を編集します。アプリケーションの配備記述子の設定は、Web コンテナの可用性の設定より優先されます。
session-manager 要素の persistence-type 属性によって、アプリケーションが使用するセッション持続性のタイプが決定されます。高可用性セッション持続性を有効にするには、この要素を ha または replicated に設定する必要があります。
sun-web.xml ファイルの詳細については、『Sun Java System Application Server 9.1 Application Deployment Guide』の「The sun-web.xml File」を参照してください。
<sun-web-app> ... <session-config> <session-manager persistence-type=ha> <manager-properties> <property name=persistenceFrequency value=web-method /> </manager-properties> <store-properties> <property name=persistenceScope value=session /> </store-properties> </session-manager> ... </session-config> ...
単一のアプリケーションサーバーインスタンスにおいて、ユーザーがあるアプリケーションによって一度認証されると、同じインスタンス上で動作しているほかのアプリケーションに対する個別の再認証は必要ありません。これをシングルサインオンといいます。詳細については、『Sun Java System Application Server 9.1 Developer’s Guide』の「User Authentication for Single Sign-on」を参照してください。
HTTP セッションがクラスタ内のほかのインスタンスにフェイルオーバーした場合でも、シングルサインオンが機能し続けるようにするには、シングルサインオン情報が HADB に対して持続される必要があります。シングルサインオン情報を持続させるには、最初にサーバーインスタンスと Web コンテナの可用性を有効にし、次にシングルサインオン状態のフェイルオーバーを有効にします。
HADB ソフトウェアは、Sun Java System Application Server の Application Server スタンドアロン配布 で提供されます。Sun Java System Application Server の利用可能な配布については、『Sun Java System Application Server 9.1 Installation Guide』の「Distribution Types and Their Components」を参照してください。HADB 機能はエンタープライズプロファイルでのみ利用可能です。プロファイルの詳細については、『Sun Java System Application Server 9.1 管理ガイド』の「使用法プロファイル」を参照してください。
「Web コンテナの可用性の設定」で説明するように、シングルサインオン状態のフェイルオーバーは、管理コンソールの「Web コンテナの可用性」タブで有効にすることができます。asadmin set コマンドを使用して、設定の availability-service.web-container-availability.sso-failover-enabled プロパティーを true に設定することもできます。
たとえば、set コマンドを使用して次のように指定します。ここで、config1 は設定の名前です。
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849 config1.availability-service.web-container-availability. sso-failover-enabled="true"
単一の名前とパスワードの組み合わせによってアクセス可能なアプリケーションは、シングルサインオングループを構成します。シングルサインオングループに属するアプリケーションに対応する HTTP セッションでは、1 つのセッションがタイムアウトになった場合でも、ほかのセッションは無効化されず、引き続き有効となります。これは、1 つのセッションがタイムアウトしてもほかのセッションの可用性に影響を与えるべきではないからです。
この動作の当然の結果として、あるセッションがタイムアウトして、セッションを実行していた同じブラウザウィンドウから対応するアプリケーションにアクセスを試みる場合、再度認証を行う必要はありません。ただし、新しいセッションが作成されます。
シングルサインオングループに属するショッピングカートアプリケーションの例を挙げます。このグループにはほかに 2 つのアプリケーションが含まれます。ほかの 2 つのアプリケーションのセッションタイムアウト値は、ショッピングカートアプリケーションのセッションタイムアウト値を上回るものと仮定します。ショッピングカートアプリケーションのセッションがタイムアウトして、セッションを実行していた同じブラウザウィンドウからショッピングカートアプリケーションの実行を試みる場合、再度認証を行う必要はありません。ただし、以前のショッピングカートは失われていて、新しいショッピングカートを作成する必要があります。ほかの 2 つのアプリケーションは、ショッピングカートアプリケーションを実行していたセッションのタイムアウト後も変わらず動作し続けます。
同様に、ほかの 2 つのアプリケーションのどちらかに対応するセッションがタイムアウトしたとします。セッションを実行していた同じブラウザウィンドウからアプリケーションに接続している間は、再度認証を行う必要はありません。
この動作は、セッションがタイムアウトした場合にのみ当てはまります。シングルサインオンが有効になっていて、HttpSession.invalidate() を使用してセッションの 1 つを無効にする場合、シングルサインオングループに属するすべてのアプリケーションのセッションが無効になります。シングルサインオングループに属する任意のアプリケーションへのアクセスを試みる場合、再認証が必要であり、アプリケーションにアクセスするクライアントに対して新しいセッションが作成されます。