Communications Server は、HTTP セッションデータおよびステートフルセッション Bean (SFSB) セッションデータのフェイルオーバーを通して、高可用性セッション持続性を提供します。フェイルオーバーとは、サーバーインスタンスまたはハードウェアに障害が発生しても、別のサーバーインスタンスが分散セッションを引き継ぐことを意味します。
分散セッションは、次の条件が満たされた場合に、複数の Sun GlassFish Communications Server インスタンスで動作できます。
各サーバーインスタンスが、同じセッション状態データにアクセスする。Communications Server では、HTTP セッションおよびステートフルセッション Bean のデータを格納するための、次のタイプの高可用性ストレージが用意されています。
クラスタ内の別のサーバーにおけるインメモリーレプリケーション。インメモリーレプリケーションは、クラスタプロファイルではデフォルトで有効です。
インメモリーレプリケーションを使用するには、「グループ管理サービス (GMS)」 を有効にする必要があります。GMS の詳細については、「グループ管理サービス」を参照してください。
クラスタ内の複数のサーバーインスタンスが異なるマシンに配置されている場合は、次の前提条件が満たされていることを確認してください。
GMS およびインメモリーレプリケーションが正常に機能することを保証するには、すべてのマシンが同じサブネット上に存在している必要があります。
インメモリーレプリケーションが正常に機能することを保証するには、クラスタ内のすべてのマシンのシステムクロックができるだけ厳密に同期している必要があります。
各サーバーインスタンスに、同じ分散可能な Web アプリケーションが配備されていること。web.xml 配備記述子ファイルの web-app 要素に、distributable 要素が含まれている必要があります。
Web アプリケーションが、高可用性セッション持続性を使用していること。分散可能でない Web アプリケーションが、高可用性セッション持続性を使用するように設定されていると、サーバーはログファイルにエラーを書き込みます。
Web アプリケーションは、--availabilityenabled オプションが true に設定された deploy または deploydir コマンドを使用して配備されている必要があります。これらのコマンドの詳細については、deploy(1)および deploydir(1)を参照してください。
セッションが処理を継続すると、ファイルを開くための参照やネットワーク接続はすべて失われます。アプリケーションは、この制限を念頭においてコード化する必要があります。
フェイルオーバーをサポートする分散セッションには、特定のオブジェクトしかバインドできません。サーブレット 2.4 仕様とは異なり、Sun GlassFish Communications Server は、フェイルオーバーがサポートされていないオブジェクト型が分散セッションにバインドされると IllegalArgumentException をスローしません。
フェイルオーバーをサポートする分散セッションには、次のオブジェクトをバインドできます。
すべての EJB コンポーネントに対するローカルホームおよびオブジェクト参照。
共存ステートレスセッション Bean、ステートフルセッション Bean、またはエンティティー Bean の参照。
分散ステートレスセッション Bean、ステートフルセッション Bean、またはエンティティー Bean の参照。
InitialContext および java:comp/env に対する JNDI コンテキスト。
UserTransaction オブジェクト。ただし、失敗したインスタンスが再起動されない場合は、準備されたグローバルトランザクションはすべて失われ、正しくロールバックまたはコミットされない可能性もあります。
直列化可能な Java 型。
フェイルオーバーをサポートする分散セッションには、次のオブジェクト型をバインドできません。
JDBC データソース
Java Message Service (JMS) の ConnectionFactory および Destination オブジェクト
JavaMail™ セッション
接続ファクトリ
管理対象オブジェクト
Web サービス参照
一般に、これらのオブジェクトに対して、フェイルオーバーは機能しません。ただし、オブジェクトが直列化可能な場合など、フェイルオーバーが機能する場合もあります。