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 がデフォルトのプロパティを持つよう設定できます。