5.13. メッセージ駆動 Bean

メッセージ駆動 Bean は、J2EE アプリケーションがメッセージの非同期処理を可能にするエンタープライズ Bean であり、JMS メッセージとして動作します。イベントの代わりにメッセージを受信するという点を除いてイベントリスナーに似ています。メッセージは任意の J2EE コンポーネント (アプリケーションクライアント、別のエンタープライズ Bean、または Web コンポーネント) または JMS アプリケーションあるいは J2EE テクノロジーを使用しないシステムで送信できます。この定義は『 http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBConcepts5.html 』 に存在し、メッセージ駆動 Bean (MDB :Message Driven Bean) の詳細もここで提供されます。
MDB は、デプロイメント記述子またはアノテーションを使用して指定できます。
記述子の使用
            <enterprise-beans>
  <message-driven>
    <ejb-name>MDBExample</ejb-name>
    <destination-jndi-name>queue/@QUEUE_NAME@</destination-jndi-name>
  </message-driven>
</enterprise-beans>
					
					
					
					

アノテーションの使用
            @MessageDriven(mappedName="jms/Queue")
public class SimpleMessageBean implements MessageListener {
    @Resource
    private MessageDrivenContext mdc;
    ...
					
					
					
					

MDB はプロパティを使用して設定します。これらのプロパティは JCA 仕様で指定されたものと JBoss 拡張機能として利用可能なものに分割されます。

重要

Remarks の欄で明示的に呼び出さない限り、表5.1「JCA 仕様で提供される MDB プロパティ」 に記載の MDB プロパティは必須ではありません。

表5.1 JCA 仕様で提供される MDB プロパティ

Name タイプ デフォルト値 リマーク
定義 java.lang.String いいえ
このプロパティーは必須です。
Queue または Topic の JNDI 名
destinationType java.lang.String いいえ
宛先有効値のタイプは javax.jms.Queue または javax.jms.Topic
messageSelector java.lang.String いいえ
サブスクリプションのメッセージセレクター
acknowledgeMode int AUTO_ ACKNOWLEDGE
トランザクション jms を使用しない場合の受信確認のタイプ - 有効値 AUTO_ ACKNOWLEDGE または DUPS_OK_ ACKNOWLEDGE
clientID java.lang.String
接続のクライアント id
subscriptionDurability String NonDurable
トピックサブスクリプションが Durable かどうか。有効値は Durable または NonDurable
subscriptionName String いいえ
トピックサブスクリプションのサブスクリプション名

重要

Remarks の欄で明示的に呼び出さない限り、表5.2「JBoss 拡張機能として提供される MDB プロパティ」 に記載の MDB プロパティは必須ではありません。

表5.2 JBoss 拡張機能として提供される MDB プロパティ

Name タイプ デフォルト値 リマーク
isTopic boolean false
destinationType を設定
providerAdapterJNDI java.lang.String DefaultJMSProvider JMS プロバイダーの JNDI 名
user java.lang.String いいえ JMS サーバーに接続するのに使用されるユーザー ID
pass java.lang.String いいえ ユーザーのパスワード
maxMessages int 1
メッセージが MDB に送信される前にメッセージを上記の回数読み込みます。
コンテキスト過多によるコンテキストの切り替えを回避するために、各メッセージは別々に同じスレッド上で送信されます。
minSession int 1 この mdb にメッセージを同時に送信できる JMS セッションの最小数
maxSession int 15 この mdb にメッセージを同時に送信できる JMS セッションの最大数
reconnectInterval long 10 秒 JMS プロバイダーへの (再) 接続試行を行う間隔 (秒単位)
keepAlive long 60 秒 セッションがアライブ状態である時間 (ミリ秒)
sessionTransacted boolean true セッションがトランザクション処理されたかどうか
useDLQ boolean true Dead Letter Queue (DLQ) ハンドラーを使用するかどうか
dLQJNDIName java.lang.String queue/DLQ DLQ の JNDI 名
dLQHandler java.lang.String
org.jboss.resource. adapter.jms.inflow.dlq. GenericDLQHandler
org.jboss.resource. adapter.jms.inflow. DLQHandler 実装クラス名
dLQUser java.lang.String いいえ JMS サーバーに dlq 接続を行うために使用されるユーザー ID
dLQPassword java.lang.String いいえ dLQUser のパスワード
dLQClientID java.lang.String いいえ DLQ 接続のクライアント id
dLQMaxResent int 5 メッセージが DLQ に送信される前に再送信される最大回数
redeliverUnspecified boolean true 未指定のトランザクションコンテキストでメッセージを再送信するかどうか
transactionTimeout int デフォルト値はリソースマネージャーに設定されるタイムアウト値 トランザクションタイムアウトの時間 (秒単位)
DeliveryActive boolean true MDB が最初のデプロイメントでサブスクリプションを行うか、あるいは対応する MBean の start() または stopDelivery() を待機するかどうか。サーバー起動時に MDB (起動中) にメッセージが送信されないようにする場合はこの値を false にします。
デフォルトの MDB プロパティの設定

@org.jboss.ejb3.annotation.DefaultActivationSpecs アノテーションを使用して MDB がデフォルトのプロパティを持つよう設定できます。