WebSphere Application Server バージョン 6.0 では、ステートフル・セッション Bean を使用するアプリケーションが予期しないサーバー障害によって制限されないことを前提に、アプリケーションを構成することができます。 このバージョンの製品では、データ複製サービス (DRS) およびワークロード管理 (WLM) の機能を使用して、ステートフル・セッション Bean フェイルオーバーを使用可能にすることができます。
管理コンソールからのステートフル・セッション Bean フェイルオーバーの使用可能化に関する情報については、EJB コンテナー・パネルでステートフル・セッション Bean のフェイルオーバーを使用可能または使用不可にする 、エンタープライズ・アプリケーション・パネルでステートフル・セッション Bean のフェイルオーバーを使用可能または使用不可にする およびEJB モジュール・パネルでステートフル・セッション Bean のフェイルオーバーを使用可能または使用不可にする を参照してください。
WebSphere Application Server によって、 アプリケーション・アセンブラーはステートフル・セッション Bean に使用する活動化ポリシーを指定することができます。 EJB コンテナーが (DRS を使用してステートフル・セッション Bean データを複製して) フェイルオーバーのために準備するのは、ステートフル・セッション Bean が非活性化されているときのみであることを考慮することが重要です。 activate once ポリシーで Bean を構成する場合は、Bean は原則的に決して非活性化しません。 activate at transaction boundary ポリシーを構成する場合は、Bean が確保されているトランザクションが完了すると、 Bean は非活性化します。 役に立つステートフル・セッション Bean フェイルオーバーには、トランザクション境界ポリシーでの活動化が必要です。
フェイルオーバーを使用可能にすると、EJB コンテナーは、 ユーザーにすべてのステートフル・セッション Bean のデプロイメント記述子を編集させ、 Bean を再インストールさせるのではなく、Bean の構成済み活動化ポリシーを単純に無視します。 コンテナーは自動的にトランザクション境界ポリシーで活動化を使用します。
この場合、関連する「作業単位」は、 トランザクション およびアクティビティー・セッション です。 本製品は、コンテナー管理トランザクション (CMT)、Bean 管理トランザクション (BMT)、コンテナー管理アクティビティー・セッション (CMAS)、および Bean 管理アクティビティー・セッション (BMAS) のステートフル・セッション Bean フェイルオーバーをサポートします。ただし、コンテナー管理の場合では 、エンタープライズ Bean メソッド呼び出しの要求を送信してもサーバーに接続できない場合のみ、フェイルオーバ ーが準備されます。 また、要求がサーバーに送信され、応答した 後に、サーバー障害が発生すると、フェイルオーバーは発生しません。 要求または作業単位の途中で障害が発生した場合、WLM が別のサーバーに安全にフェイルオーバーするには、何らかの補正コードがアプリケーションで実行されます。この場合、アプリケーションは、Common Object Request Broker Architecture (CORBA) 例外およびマイナー・コードを受け取ります。これは、障害が作業単位の実行中に発生したため、透過的フェイルオーバーが行われなかったことを示します。 アプリケーションの作成にあたっては、CORBA 例外およびマイナー・コードのチェック、および障害の補正を念頭に置く必要があります。 補正コードが実行されると、アプリケーションは要求を再試行することができ、バックアップ・サーバー へのパスが存在する場合は、WLM が新しい要求をステートフル・セッション Bean の新しい 1 次サーバーへと転送します。
詳しくは、CORBA マイナー・コード およびz/OS 以外のすべてのプラットフォームのワークロード管理 (WLM) を参照してください。
この内容は、Bean 管理の作業単位 (トランザクションまたはアクティビティー・セッション) についても同様です。 ただし、Bean 管理の作業には新たに考慮すべき点が他にもある可能性があります。
このシナリオは、スティッキー Bean 管理の作業単位を想定しています。 トランザクションまたはアクティビティー・セッションは、複数のステートフル・セッション Bean メソッドのために待機します。 アプリケーションがスティッキー BMT または BMAS を使用し、スティッキー作業単位が完了した後と、他のスティッキー作業単位が開始する前にサーバーで障害が発生すると、フェイルオーバーが成功しています。 ただし、スティッキー・トランザクションまたはアクティビティー・セッションが完了する 前に サーバーに障害が発生すると、フェイルオーバーは成功していません。 その代わり、フェイルオーバー処理がステートフル・セッション Bean 要求を新規サーバーに送付したときに、アクティブ・スティッキー・トランザクションまたはアクティビティー・セッション中に障害が発生したことを EJB コンテナーが検出します。 その時、EJB コンテナーは例外を開始します。
原則的に、これは、トランザクションまたはアクティビティー・セッションが依然としてアクティブな場合、コンテナー管理および Bean 管理の作業単位両方のフェイルオーバーが失敗していることを意味します。 唯一の大きな違いは、発生する例外です。
通常、特定の 1 次キーを持つ ステートフル・セッション Bean インスタンスは、ある時間の特定の瞬間に単一のサーバーにのみ存在することができます。 フェイルオーバーによって、Bean があるサーバーから別のサーバーへ移動する可能性はありますが、 同時に複数のサーバーに存在することは決してありません。 ただし、同じ Bean インスタンス (同じ 1 次キー) が複数のサーバーに同 時に存在することが可能な珍しいシナリオがあります。 それが起こると、Bean のコピーのそれぞれが他の Bean に気付かず、同じ 状態データを持つように 2 つのインスタンス間に同期が起こりません。 従って、アプリケーションは予測不能な結果を受け取ります。