Message-driven Beanは、JMSメッセージまたはリソースアダプタのメッセージを受信して処理するEJBアプリケーションです。
EJBコンテナは、Message-driven Beanが対象とする宛先にメッセージが到着すると、そのメッセージを受信してMessage-driven Beanのインスタンスを呼び出してビジネスロジックを実行します。
Message-driven Beanに記述されたメッセージリスナーメソッド(JMSの場合はonMessageメソッド)でメッセージを処理します。Message-driven Beanは、Session BeanまたはJava Persistence APIを呼び出すか、DBMSが提供するデータベース操作命令(JDBCドライバ)を直接呼び出してデータベース処理を行います。
Message-driven Bean のインスタンスは、プールで管理されます。プールの詳細については、「6.5.3 Enterprise Beanインスタンスのプーリング」を参照してください。
以下にMessage-driven Beanの位置づけを示します。以下はJMSメッセージを受信する場合の構成図です。
Message-driven Beanはメッセージを受信する対象としてJMSからメッセージを受信するか、リソースアダプタからメッセージを受信するか選択できます。
JMSからメッセージを受信する場合
JMSからメッセージを受信する場合、Message-driven Beanがメッセージ受信対象とする定義済みの以下の2つを指定する必要があります。
JMS接続ファクトリ
JMS送信先リソース
以下にそれぞれの指定方法について説明します。
JMS接続ファクトリの指定
JMSプロバイダにアクセスするには、JMS接続ファクトリが必要です。Message-driven Beanが対象とするJMS接続ファクトリを指定することで、JMS接続ファクトリのコネクションプールをチューニングできます。JMS接続ファクトリを指定しなかった場合には、コネクションプールのチューニング項目がデフォルト設定のJMS接続ファクトリが内部的に使用されます。
Message-driven Beanが対象とするJMS接続ファクトリを指定するには、JMS接続ファクトリのJNDI名をInterstage EJB application deployment descriptor (glassfish-ejb-jar.xml)ファイルの<ejb><mdb-connection-factory>タグに指定します。
定義詳細については、「3.2.1.3 Interstage EJB application deployment descriptor (glassfish-ejb-jar.xml)」を参照してください。JMS接続ファクトリの作成方法とチューニング機能については、「4.15.5 JMSのメッセージを送受信する準備」を参照してください。
JMS送信先リソースの指定
Message-driven Beanが使用するJMS送信先リソースのJNDI名を指定します。
JMS送信先リソースの作成については、「4.15.5 JMSのメッセージを送受信する準備」を参照してください。
Message-driven Beanが使用するJMS送信先リソースの指定場所を、以下に示します。
定義の優先度 | 指定場所 | 使用パターン |
---|---|---|
1 | glassfish-ejb-jar.xmlファイルの<ejb>の<jndi-name> | EJB 2.1以前のEJBアプリケーションを使用する場合、または以下の定義を修正せずに上書きしたい場合。 |
2 | ejb-jar.xmlファイルの<message-driven-bean>の<mapped-name> | アノテーションを使用しない、または上書きしたい場合。 |
3 | ソース内の@MessageDrivenのmappedName属性 | 開発時にアノテーションを採用し運用環境上のJNDI名が既知の場合。 |
サブスクライバ識別名の指定
Message-driven BeanがPublish/Subscribeモデルの場合は、サブスクライバの永続性をdeployment descriptor(ejb-jar.xml)ファイルの<message-driven><subscription-durability>タグに指定できます。サブスクライバの永続性の詳細については、EJB規約を参照してください。
サブスクライバの永続性を「Durable」に指定する場合は、サブスクライバの識別名をInterstage EJB application deployment descriptor (glassfish-ejb-jar.xml)ファイルの<ejb><jms-durable-subscription-name>タグに指定します。定義詳細については、「3.2.1.3 Interstage EJB application deployment descriptor (glassfish-ejb-jar.xml)」を参照してください。
注意
IJServerクラスタを複数プロセス構成で運用する場合の注意事項
IJServerクラスタを複数プロセス構成で運用すると、Message-driven Beanは複数のセッションを使用してメッセージを受信するため、複数メッセージを並行に処理するためにメッセージ順序性は保証されません。
Publish/Subscribeモデルでは複数の受信者に対して同一のメッセージが配信されますが、IJServerクラスタを複数プロセス構成で運用する場合は、Topicからのメッセージを1つのプロセスで動作しているMessage-driven Beanにのみ送信します。
サブスクライバの永続性を「Durable」に指定する場合の注意事項
サブスクライバの永続性を「Durable」に指定した場合、Message-driven Beanの初回起動時に「サブスクライバの識別名」に設定された名前で永続サブスクリプションを登録します。永続サブスクリプションが必要なくなった場合は、imqcmd destroy durコマンドで削除してください。
JMS送信先リソースの指定に関する注意事項
メッセージブローカに、Message-driven Beanが使用するJMS送信先リソースに設定された物理格納先が存在しない場合、Message-driven Beanの起動時に物理格納先が作成されます。
物理格納先を適切に管理するために、本運用を行う場合は、Message-driven Beanを起動する前に、imqcmdコマンドを使用して物理格納先を作成することを推奨します。コマンドの詳細については、「10.6.1 create dstサブコマンド」を参照してください。
リソースアダプタからメッセージを受信する場合
リソースアダプタからメッセージを受信する場合、Interstage EJB application deployment descriptor(glassfish-ejb-jar.xml)の<resource-adapter-mid>タグに使用するリソースアダプタ名を指定します。<resource-adapter-mid>タグを指定しない場合、または空の文字列か「jmsra」を指定した場合は、メッセージを受信する対象としてJMSが選択されます。リソースアダプタ名については「4.16.1 コネクタモジュールの配備とリソース定義の作成」を、定義詳細については「3.2.1.3 Interstage EJB application deployment descriptor (glassfish-ejb-jar.xml)」を参照してください。
チューニング機能、複数プロセスでの運用や使用時の注意事項については、リソースアダプタ提供元のマニュアルも参照してください。