メッセージ駆動型 Bean がクラスター内で接続する方法
エンタープライズ Bean (EJB) アプリケーションをアプリケーション・サーバー・クラスターにデプロイすると、 アプリケーションは、クラスター内の任意のサーバーで実行して、アプリケーションの高いアベイラビリティーおよびスケーラビリティーを提供できるようになります。 EJB アプリケーションがメッセージ駆動型 Bean (MDB) の場合は、クラスター内の任意のサーバーで実行することができ (高いアベイラビリティーを実現)、クラスター内の複数のアプリケーション・サーバーで同時に呼び出すことができます (スケーラビリティーを実現)。 この動作は、サービス統合バス・メンバーに対する MDB のロケーション、および MDB 自体の構成によって異なります。
デフォルトでは、MDB アプリケーションが、サービス統合バス・クラスター・バス・メンバーでもあるアプリケーション・サーバー・クラスターにデプロイされた場合、 その MDB アプリケーションは、クラスター内のサーバー上の 1 つ以上のメッセージング・エンジンに接続します。デフォルトの接続動作、およびメッセージ駆動型 Bean を含む任意の JMS アプリケーションに適用できる特別な接続制御については、 JMS アプリケーションをバス上のメッセージング・エンジンに接続する方法で説明しています。 ただし、そのトピックで説明されるこの構成オプションを使用すると、 メッセージ駆動型 Bean は、始動済みメッセージング・エンジンをホストしている、 クラスター内のサーバーでのみ駆動されます。
- クラスター内の処理能力を十分に利用するために、クラスター内のすべてのサーバーが MDB アプリケーションからのメッセージを受信できます。
- メッセージが順次処理されるように、一度に 1 つのサーバーのみが MDB アプリケーションからのメッセージを受信できます。

MDB 接続動作: 単一クラスター・バス・メンバー内
- メッセージ駆動型 Bean は、始動済みメッセージング・エンジンをホスティングする、クラスター・バス・メンバー内のサーバーでのみ駆動されます。
これはデフォルト・オプションです。メッセージ駆動型 Bean が クラスター・バス・メンバーにデプロイされると、メッセージング・エンジンがローカルで開始されている サーバー内の MDB エンドポイントのみを、有効なメッセージによって駆動できます。
図 2 では、クラスター・バス・メンバーに 3 つのサーバーが含まれています。server1 と server2 にはそれぞれ、アクティブなメッセージング・エンジンおよびフェイルオーバーのメッセージング・エンジンが含まれています。 これら 2 つの各サーバーで実行されている MDB エンドポイントは、それぞれのローカル・メッセージング・エンジンに接続しています。 server3 は、始動済みのメッセージング・エンジンはホストしていませんが、2 つのフェイルオーバー・メッセージング・エンジンをホストしています。そのサーバーは、アクティブな MDB エンドポイントを持たず、メッセージのコンシュームに利用できません。
図 2. 始動済みメッセージング・エンジンをホストするクラスター・バス・メンバー内のサーバーで駆動される MDB (設定 1)また、この構成は、MDB アプリケーション、およびバス宛先上のメッセージ (メッセージング・エンジンがクラスター内のサーバー間でフェイルオーバーできる場合) の高いアベイラビリティーを提供します。
図 3 では、前の図と同じクラスター・バス・メンバーが示されています。server1 のメッセージング・エンジンは、server2 にフェイルオーバーしています。 そのため、server2 には現在、2 つのアクティブなメッセージング・エンジンが含まれており、server2 で実行されている MDB エンドポイントは、両方のローカル・メッセージング・エンジンに接続されています。 3 番目のサーバーは、始動済みメッセージング・エンジンをホストしておらず、 アクティブな MDB エンドポイントを持たず、メッセージのコンシュームに利用できません。
図 3. 始動済みメッセージング・エンジンをホストするクラスター・バス・メンバー内のサーバーで駆動される MDB (設定 2)この構成は、アクティベーション・スペックで「常にすべてのサーバーで MDB を活動化する」オプションを選択しなければ使用可能になります。
- クラスター・バス・メンバーのすべてのサーバーで、メッセージ駆動型 Bean からメッセージを受信可能
始動済みのローカル・メッセージング・エンジンがあるかどうかにかかわらず、 メッセージ駆動で利用できる MDB エンドポイントをすべてのクラスター・サーバーに設定できます。 始動されたメッセージング・エンジンがないサーバー内の MDB エンドポイントは、クラスター内の他のサーバーの 1 つにあるいずれかのメッセージング・エンジンに直接接続されます。この方式によって、 クラスターで使用可能なすべてのリソースを、宛先に送信されるメッセージの処理に使用できるようになります。
図 4 では、クラスター・バス・メンバーに 3 つのサーバーが含まれています。2 つのサーバーには、 アクティブなメッセージング・エンジンが含まれています。これら 2 つの各サーバーに含まれる MDB エンドポイントは、それぞれのローカル・メッセージング・エンジンに接続しています。 始動済みメッセージング・エンジンをホスティングしていない 3 番目のサーバーでは、 クラスター内で使用可能なメッセージング・エンジン全体のワークロードのバランスをとります。 3 番目のサーバー内の MDB エンドポイントは、 他の 2 つのいずれかのサーバーで実行中のメッセージング・エンジンに接続されています。
図 4. クラスター・バス・メンバーのサーバーで、メッセージ駆動型 Bean からメッセージを受信この構成を選択するには、アクティベーション・スペックで「常にすべてのサーバーで MDB を活動化する」オプションを選択します。
注: この構成は、 駆動される MDB エンドポイントから見て、 クラスター内のすべてのサーバーで、クラスター・バス・メンバーのメッセージング・エンジンからメッセージを受信可能の構成 (このトピックでも説明しています) と同じ効果をもたらします。
MDB 接続動作: クラスターと別のバス・メンバー間
- クラスター内のすべてのサーバーで、クラスター・バス・メンバーのメッセージング・エンジンからメッセージを受信可能
バス・メンバーではないクラスターに MDB アプリケーションをデプロイした場合、MDB は、JMS アプリケーションをバス上のメッセージング・エンジンに接続する方法で説明されている接続ルールに従って、 クラスター内のすべてのアプリケーション・サーバーからバスに接続しようとします。 この結果通常、クラスター内のすべての MDB エンドポイントが、バス・メンバー内のアクティブなメッセージング・エンジンからのメッセージによって、同時に駆動されます。 この方式によって、クラスターで使用可能なすべてのリソースを、クラスター・バス・メンバーの宛先に送信されるメッセージの処理に使用できるようになります。
図 5 では、クラスターに 3 つのサーバーが含まれ、それぞれのサーバーに MDB エンドポイントがあります。クラスター・バス・メンバーには 2 つのサーバーが含まれ、その一方がアクティブなメッセージング・エンジンがホストしています。 クラスター内の 3 つの MDB エンドポイントはそれぞれ、 クラスター・バス・メンバー内のアクティブなメッセージング・エンジンに接続されています。
注: この構成ではすべてのメッセージング・エンジンに対して接続を確立できない可能性があるため、未接続のメッセージング・エンジンが存在する場合があります。その結果、孤立メッセージが発生することがあります。 MDB で使用されるアクティベーション・スペックがサーバー・スコープに設定されていれば、このような状況が発生する可能性は軽減されます。図 5. クラスター内のすべてのサーバーで、クラスター・バス・メンバーのメッセージング・エンジンからメッセージを受信注: この構成は、駆動される MDB エンドポイントから見て、 クラスター・バス・メンバーのすべてのサーバーで、メッセージ駆動型 Bean からメッセージを受信可能の構成 (このトピックでも説明しています) と同じ効果をもたらします。- クラスター内の 1 つのサーバーのみが、メッセージをクラスター・バス・メンバーのメッセージング・エンジンから受信することができます
同時に単一のサーバーで宛先のメッセージを順次処理するには、同時にメッセージによって単一の MDB エンドポイントのみが駆動されるようにシステムを構成します。 このパターンでは、他の MDB エンドポイントとメッセージング・エンジンは、server1 が停止した場合にメッセージの処理を引き継ぐことができるように事実上待機状態になっています。
図 6 では、クラスターに 3 つのサーバーが含まれ、それぞれのサーバーに MDB エンドポイントがあります。また、クラスター・バス・メンバーには 2 つのサーバーが含まれ、その一方にアクティブなメッセージング・エンジンがあります。 クラスター内の 3 つの MDB エンドポイントのうち 1 つのみが、 クラスター・バス・メンバーで稼働しているアクティブなメッセージング・エンジンに接続されています。
図 6. 1 つのサーバーがメッセージをクラスター・バス・メンバーのメッセージング・エンジンから受信この構成を選択するには、すべての非バス・クラスター・サーバーの MDB エンドポイントが、クラスター・バス・メンバーのメッセージング・エンジンからのメッセージで駆動されるようにアクティベーション・スペックを設定します。そして、クラスター・バス・メンバーの宛先で「排他的受信」オプションを設定します。 MDB エンドポイントの 1 つがメッセージング・エンジンに接続すると、エンジンによって他の使用可能なすべての MDB エンドポイントの接続が防がれ、同じ MDB エンドポイントを介してメッセージを処理し続けます。
MDB によってメッセージを順次処理するには、さらなる構成が必要になることがあります。宛先でのメッセージの順次処理について詳しくは、メッセージの順序付けを参照してください。