WebSphere Application Server Version 6.1 Feature Pack for Web Services   
             オペレーティング・システム: AIX , HP-UX, i5/OS, Linux, Solaris, Windows, Windows Vista, z/OS

             目次と検索結果のパーソナライズ化

EJB コンテナー用ステートフル・セッション Bean のフェイルオーバー

WebSphere Application Server バージョン 6.0 では、ステートフル・セッション Bean を使用するアプリケーションが予期しないサーバー障害によって制限されないことを前提に、アプリケーションを構成することができます。 このバージョンの製品では、データ複製サービス (DRS) およびワークロード管理 (WLM) の機能を使用して、ステートフル・セッション Bean フェイルオーバーを使用可能にすることができます。

EJB コンテナーにインストールされているステートフル・セッション Bean のすべてでフェイ ルオーバーを使用可能にしない方が良いため、EJB コンテナー設定は、アプリケーションまたは EJB モジュール・レベルのいずれかでオーバーライドすることができます。 これらのレベルのそれぞれで、フェイルオーバーを使用可能または使用不可にすることができます。 例えば、以下の状態について考えてみます。

管理コンソールからのステートフル・セッション Bean フェイルオーバーの使用可能化に関する情報については、EJB コンテナー・パネルでステートフル・セッション Bean のフェイルオーバーを使用可能または使用不可にする エンタープライズ・アプリケーション・パネルでステートフル・セッション Bean のフェイルオーバーを使用可能または使用不可にする およびEJB モジュール・パネルでステートフル・セッション Bean のフェイルオーバーを使用可能または使用不可にする を参照してください。

フェイルオーバーが使用可能な状態でのステートフル・セッション Bean 活動化ポリシー

WebSphere Application Server によって、 アプリケーション・アセンブラーはステートフル・セッション Bean に使用する活動化ポリシーを指定することができます。 EJB コンテナーが (DRS を使用してステートフル・セッション Bean データを複製して) フェイルオーバーのために準備するのは、ステートフル・セッション Bean が非活性化されているときのみであることを考慮することが重要です。 activate once ポリシーで Bean を構成する場合は、Bean は原則的に決して非活性化しません。 activate at transaction boundary ポリシーを構成する場合は、Bean が確保されているトランザクションが完了すると、 Bean は非活性化します。 役に立つステートフル・セッション Bean フェイルオーバーには、トランザクション境界ポリシーでの活動化が必要です。

フェイルオーバーを使用可能にすると、EJB コンテナーは、 ユーザーにすべてのステートフル・セッション Bean のデプロイメント記述子を編集させ、 Bean を再インストールさせるのではなく、Bean の構成済み活動化ポリシーを単純に無視します。 コンテナーは自動的にトランザクション境界ポリシーで活動化を使用します。

フェイルオーバーが使用可能な状態でのコンテナー管理の作業単位または Bean 管理の作業単位のステートフル・セッション Bean の使用

この場合、関連する「作業単位」は、 トランザクション およびアクティビティー・セッション です。 本製品は、コンテナー管理トランザクション (CMT)、Bean 管理トランザクション (BMT)、コンテナー管理アクティビティー・セッション (CMAS)、および Bean 管理アクティビティー・セッション (BMAS) のステートフル・セッション Bean フェイルオーバーをサポートします。ただし、コンテナー管理の場合では 、エンタープライズ Bean メソッド呼び出しの要求を送信してもサーバーに接続できない場合のみ、フェイルオーバ ーが準備されます。 また、要求がサーバーに送信され、応答した 後に、サーバー障害が発生すると、フェイルオーバーは発生しません。 要求または作業単位の途中で障害が発生した場合、WLM が別のサーバーに安全にフェイルオーバーするには、何らかの補正コードがアプリケーションで実行されます。この場合、アプリケーションは、Common Object Request Broker Architecture (CORBA) 例外およびマイナー・コードを受け取ります。これは、障害が作業単位の実行中に発生したため、透過的フェイルオーバーが行われなかったことを示します。 アプリケーションの作成にあたっては、CORBA 例外およびマイナー・コードのチェック、および障害の補正を念頭に置く必要があります。 補正コードが実行されると、アプリケーションは要求を再試行することができ、バックアップ・サーバー へのパスが存在する場合は、WLM が新しい要求をステートフル・セッション Bean の新しい 1 次サーバーへと転送します。

[AIX HP-UX Linux Solaris Windows] [i5/OS] 詳しくは、CORBA マイナー・コード を参照してください。

この内容は、Bean 管理の作業単位 (トランザクションまたはアクティビティー・セッション) についても同様です。 ただし、Bean 管理の作業には新たに考慮すべき点が他にもある可能性があります。

Bean 管理作業単位の場合、フェイルオーバー処理は、ステートフル・セッション Bean メソッドによって開始される BMT または BMAS が完了していないことを常時検出できるわけではありません。 このため、トランザクションまたはセッションの途中で作業単位に障害が発生しても、新規サーバーに対するフェイルオーバーが発生する可能性があります。 作業単位は暗黙的にロールバックされるため、WLM は、別のサーバーに透過的にフェイルオーバーするのが安全とみなしますが、実際には、補正コードが必要になる場合があります。このような事態が発生すると、EJB コンテナーは新規サーバーで検出し 、例外を開始します。 この例外は、次のシナリオで発生します。
  1. Bean 管理トランザクションまたはアクティビティー・セッション呼び出しを使用するステートフル・セッション Bean のメソッドは、SessionContext から取得した UserTransaction で始まります。 そのメソッドは開始済み作業単位で一部の処理を行いますが、メソッドの呼び出し元に戻るまでトランザクションまたはセッションを完了しません。
  2. ステップ 1 で開始したメソッドの呼び出し後に、EJB コンテナーはメソッドが開始した作業を中断します。 これは、Bean がステートフル・セッション Bean のとき、Bean 管理の作業単位の Enterprise JavaBeans 仕様が必要とするアクションです。
  3. クライアントはステートフル・セッション Bean でその他の幾つかのメソッドを開始します。 各呼び出しによって、EJB コンテナーは中断していたトランザクションまたはアクティビティー・セッションを再開し、メソッド呼び出しをディスパッチして、呼び出し元に戻る前に再度作業を中断します。
  4. クライアントは、ステップ 1 で開始したトランザクションまたはセッションを完了するステートフル・セッション Bean でメソッドを呼び出します。

このシナリオは、スティッキー Bean 管理の作業単位を想定しています。 トランザクションまたはアクティビティー・セッションは、複数のステートフル・セッション Bean メソッドのために待機します。 アプリケーションがスティッキー BMT または BMAS を使用し、スティッキー作業単位が完了した後と、他のスティッキー作業単位が開始する前にサーバーで障害が発生すると、フェイルオーバーが成功しています。 ただし、スティッキー・トランザクションまたはアクティビティー・セッションが完了する 前に サーバーに障害が発生すると、フェイルオーバーは成功していません。 その代わり、フェイルオーバー処理がステートフル・セッション Bean 要求を新規サーバーに送付したときに、アクティブ・スティッキー・トランザクションまたはアクティビティー・セッション中に障害が発生したことを EJB コンテナーが検出します。 その時、EJB コンテナーは例外を開始します。

原則的に、これは、トランザクションまたはアクティビティー・セッションが依然としてアクティブな場合、コンテナー管理および Bean 管理の作業単位両方のフェイルオーバーが失敗していることを意味します。 唯一の大きな違いは、発生する例外です。

アプリケーション設計に関する考慮事項

ステートフル・セッション Bean フェイルオーバー処理を使用する アプリケーションを設計する際に、以下のことを考慮する必要があります。
  • 上記のセクションで説明した可能性を回避するため、Bean 管理トランザクション (BMT) ではなくコンテナー管理トランザクション (CMT) を使用するように、アプリケーションを作成してステートフル・セッション Bean を構成することが推奨されます。
  • 即時フェイルオーバーをが必要であり、ご使用のアプリケーションが HTTP セッションか、または他のステートフル・セッション Bean に参照を保管するステートフル・セッション Bean のいずれかを作成する場合、管理者は必ず HTTP セッションおよびステートフル・セッション Bean が同じデータ複製サービス (DRS) 複製ドメインを使用するよう構成する必要があります。
  • 同じステートフル・セッション Bean にローカル参照とリモート参照を使用してはいけません。

    通常、特定の 1 次キーを持つ ステートフル・セッション Bean インスタンスは、ある時間の特定の瞬間に単一のサーバーにのみ存在することができます。 フェイルオーバーによって、Bean があるサーバーから別のサーバーへ移動する可能性はありますが、 同時に複数のサーバーに存在することは決してありません。 ただし、同じ Bean インスタンス (同じ 1 次キー) が複数のサーバーに同 時に存在することが可能な珍しいシナリオがあります。 それが起こると、Bean のコピーのそれぞれが他の Bean に気付かず、同じ 状態データを持つように 2 つのインスタンス間に同期が起こりません。 従って、アプリケーションは予測不能な結果を受け取ります。

    重要: これを回避するために、フェイルオーバーが使用可能な状態では、ご使用のアプリケーションは同じステートフル・セッション Bean インスタンスにローカル (EJBLocalObject) およびリモート (EJBObject) 参照の両方を取得するべきではないことを覚えている必要があります。

z/OS ユーザーのみ [z/OS]

WebSphere Application Server Network Deployment for z/OS でのステートフル・セッション Bean フェイルオーバーは、 WebSphere Application Server Network Deployment 製品でのフェイルオーバーとは少し異なります。z/OS ユーザーは、 ここで述べるフェイルオーバーの解決策に加えて、管理対象外サーバー内でのサーバント間のフェイルオーバーも使用可能にしておいてください。 詳しくは、以下を参照してください。

z/OS 製品には制御領域およびサーバント領域があり、 Network Deployment 製品にはそのような領域がないため、 z/OS に固有のフェイルオーバー・シナリオが 1 つ考えられます。それは、1 つのサーバント領域から 別のサーバント領域へのフェイルオーバー (コントローラーの損失を伴わないサーバントの損失) です。

現在、z/OS で HFS ベースの技法を使用しているユーザーは、その選択の継続を希望する場合があります。

非管理対象 z/OS サーバーでは、サーバント間のステートフル・セッション Bean フェイルオーバーを使用可 能にすることができます。 フェイルオーバーは、指定された非管理対象サーバーのサーバント間でのみ発生します。 非管理対象 z/OS サーバーにサーバントが 1 つしかない場合は、 フェイルオーバーを使用可能にしても効果はありません。 フェイルオーバーが使用可能になっている非管理対象 z/OS サーバーは、 別の非管理対象 z/OS サーバーに対してはフェイルオーバーしません。 管理対象外サーバーでフェイルオーバーを使用可能にするには、 非管理対象サーバーでのサーバントのフェイルオーバーの使用可能化 を参照してください。




サブトピック
ステートフル・セッション Bean フェイルオーバー設定 (アプリケーション)
ステートフル・セッション Bean のフェイルオーバー設定 (EJB モジュール)
概念トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 4:10:06 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.wsfep.multiplatform.doc/info/ae/ae/cejb_sfsbf.html