第 2 章「クライアントプログラミングモデル」で説明した一般的な JMS クライアントプログラミングモデルのほかに、さらに JMS クライアントに特化したプログラミングモデルがあり、J2EE プラットフォームアプリケーションのコンテキストで使用されます。この特殊なクライアントは、メッセージ駆動型 Beans と呼ばれ、EJB 2.0 以降の仕様 (http://java.sun.com/products/ejb/docs.html) で指定されている Enterprise JavaBeans (EJB) コンポーネント のシリーズの 1 つです。
メッセージ駆動型 Beans は非同期メッセージングを行います。その他の EJB コンポーネント (セッション Beans とエンティティー Beans) は、標準的な EJB インタフェースを通じて同時に呼び出す必要があります。ただし、多くのエンタープライズアプリケーションは、サーバーサイドコンポーネントがサーバーリソースを結びつけずに相互に通信するために、非同期メッセージングを必要とします。サーバーサイドコンポーネントがアプリケーションイベントに応答する必要のあるアプリケーションでは、メッセージのプロデューサにしっかり結合していなくても、メッセージを受信してコンシュームできる EJB コンポーネントが必要になります。エンタープライズアプリケーションでは、負荷が増加する場合、この機能を拡張する必要があります。
メッセージ駆動型 Beans (MDB) は、サポートするコンポーネントに分散サービスを提供する特殊な EJB コンテナによってサポートされる EJB コンポーネントです。
JMS メッセージ駆動型 Beans は、JMS MessageListener インタフェースを実装する EJB です。MDB 開発者がプログラミングした onMessage メソッドは、MDB コンテナがメッセージを受信したときに呼び出されます。onMessage() メソッドは、標準的な MessageListener オブジェクトの onMessage() メソッドがコンシュームするのと同じように、メッセージをコンシュームします。ほかの EJB コンポーネントの場合とは異なり、メソッドを MDB でリモートに呼び出しません。そのため、これと関連付けられているホームまたはリモートのインタフェースはありません。MDB は単一の送信先からのメッセージをコンシュームできます。図 5–1 にあるように、スタンドアロン JMS アプリケーション、JMS コンポーネント、EJB コンポーネント、および Web コンポーネントにより、メッセージをプロデュースできます。
特殊な EJB コンテナが MDB をサポートします。このコンテナは、MDB のインスタンスを作成し、メッセージの非同期コンシュームを行うようにインスタンスを設定します。コンテナは、メッセージサービスを使用したコネクションの設定 (認証を含む)、特定の送信先に関するセッションのプールの作成、プールされたセッション間のメッセージ分散の管理を行います。コンテナは MDB インスタンスのライフサイクルを制御するため、受信メッセージの読み込みに対応できるように、MDB インスタンスのプールを管理します。
メッセージコンシュームを設定するときにコンテナによって使用されるコネクションファクトリと送信先の属性を指定する配置記述子は、MDB に関連付けられています。また、配置記述子には、コンテナを設定するために配置ツールによって必要とされるほかの情報も含まれます。各コンテナでは、1 つの MDB のインスタンスをサポートします。