4.7. アクティベーション設定のプロパティー

4.7.1. アノテーションを使用した MDB の設定

アクティベーションプロパティーは、@ActivationConfigProperty アノテーションに一致する @MessageDriven 要素とサブ要素を使用してアクティベーションプロパティーを設定できます。@ActivationConfigProperty は、MDB の設定逢プロパティーのアレイです。@ActivationConfigProperty アノテーションの仕様は以下のようになります。

@Target(value={})
@Retention(value=RUNTIME)
public @interface ActivationConfigProperty
{
	String propertyName();
	String propertyValue();
}

@ActivationConfigProperty を表示する例

@MessageDriven(name="MyMDBName",
activationConfig =
{
    @ActivationConfigProperty(propertyName="destinationLookup",propertyValue="queueA"),
    @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
})

4.7.2. デプロイメント記述子を使用した MDB の設定

ejb-jar.xml<message-driven> 要素は、Bean を MDB として定義します。<activation-config> および要素には、activation-config-property 要素を使用した MDB 設定が含まれます。

サンプル ejb-jar.xml

<?xml version="1.1" encoding="UTF-8"?>
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
               xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
               version="3.1">
    <enterprise-beans>
        <message-driven>
            <ejb-name>MyMDBName</ejb-name>
            <ejb-class>org.jboss.tutorial.mdb_deployment_descriptor.bean.MyMDBName</ejb-class>
            <activation-config>
                <activation-config-property>
                    <activation-config-property-name>destinationLookup</activation-config-property-name>
                    <activation-config-property-value>queueA</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>destinationType</activation-config-property-name>
                    <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>acknowledgeMode</activation-config-property-name>
                    <activation-config-property-value>Auto-acknowledge</activation-config-property-value>
                </activation-config-property>
            </activation-config>
        </message-driven>
    <enterprise-beans>
</jboss:ejb-jar>

表4.1 Jakarta Messaging Service 仕様によって定義されたアクティベーション設定プロパティー

名前説明

destinationLookup

キューまたはトピックの Java Naming and Directory Interface 名。これは必須の値です。

connectionFactoryLookup

管理的に定義された javax.jms.ConnectionFactoryjavax.jms.QueueConnectionFactory または javax.jms.TopicConnectionFactory オブジェクトのルックアップ名。これは、エンドポイントがメッセージを受信する Jakarta Messaging プロバイダーへの接続に使用されます。

明示的に定義されていない場合は、activemq-ra という名前のプールされた接続ファクトリーが使用されます。

destinationType

宛先の有効な値のタイプは javax.jms.Queue または javax.jms.Topic です。これは必須の値です。

messageSelector

messageSelector プロパティーの値は、利用可能なメッセージのサブセットを選択するために使用される文字列です。この構文は SQL 92 条件式構文のサブセットをベースとし、詳細は Jakarta Messaging 仕様で説明されています。ActivationSpec JavaBean 上での messageSelector プロパティーの値の指定はオプションです。

acknowledgeMode

トランザクション処理された Jakarta Messaging を使用していない場合の承認のタイプ。有効な値は Auto-acknowledge または Dups-ok-acknowledge です。これは必須の値ではありません。

デフォルト値は Auto-acknowledge です。

clientID

接続のクライアント ID。これは必須の値ではありません。

subscriptionDurability

トピックサブスクリプションが永続化されるかどうか。有効な値は Durable または NonDurable です。これは必須の値ではありません。

デフォルト値は NonDurable です。

subscriptionName

トピックサブスクリプションのサブスクリプション名。これは必須の値ではありません。

表4.2 JBoss EAP によって定義されるアクティベーション設定プロパティー

名前説明

destination

useJNDI=true でこのプロパティーを使用すると、destinationLookup と同じ意味を持ちます。useJNDI=false を指定して使用すると、宛先は検索されませんが、インスタンス化されます。このプロパティーは、destinationLookup の代わりに使用できます。これは必須の値ではありません。

shareSubscriptions

接続がサブスクリプションを共有するように設定されているかどうか。

デフォルト値は false です。

user

Jakarta Messaging 接続のユーザー。これは必須の値ではありません。

password

Jakarta Messaging 接続のパスワード。これは必須の値ではありません。

maxSession

使用する同時セッションの最大数。これは必須の値ではありません。

デフォルト値は 15 です。

transactionTimeout

セッションのトランザクションタイムアウト (ミリ秒単位)。これは必須の値ではありません。

指定されない場合または 0 の場合、プロパティーは無視され、transactionTimeout は上書きされず、Transaction Manager で定義されたデフォルトの transactionTimeout が使用されます。

useJNDI

Java Naming and Directory Interface を使用して宛先を検索するかどうか。

デフォルト値は True です。

jndiParams

接続で使用する Java Naming および Directory Interface パラメーター。パラメーターは、; で区切った name=value として定義されます。

localTx

XA の代わりにローカルトランザクションを使用します。

デフォルト値は false です。

setupAttempts

Jakarta Messaging 接続の設定を試みる回数。Jakarta Messaging リソースが利用可能になる前に MDB がデプロイされる可能性があります。この場合、リソースアダプターは、リソースが利用可能になるまで、複数回の設定を試行します。これは受信接続のみに適用されます。

デフォルト値は -1 です。

setupInterval

Jakarta Messaging 接続の設定を試みる連続的間隔 (ミリ秒単位)。これは受信接続のみに適用されます。

デフォルト値は 2000 です。

rebalanceConnections

受信接続のリバランスが有効になっているかどうか。このパラメーターは、基礎となるクラスタートポロジーの変更時に受信接続をすべてリバランスできるようにします。

アウトバウンド接続にはリバランスがありません。

デフォルト値は false です。

deserializationWhiteList

ホワイトリストのエントリーのコンマ区切りリスト。これは、信頼できるクラスおよびパッケージのリストです。このプロパティーは、リストにあるオブジェクトをデシリアライズできるように Jakarta Messaging リソースアダプターによって使用されます。

詳細は、JBoss EAPConfiguring MessagingControlling Jakarta Messaging ObjectMessage Deserialization を参照してください。

deserializationBlackList

ブラックリストのエントリーのコンマ区切りリスト。これは、信頼できないクラスおよびパッケージのリストです。このプロパティーは、リストにあるオブジェクトがデシリアライズされないように、JMS リソースアダプターによって使用されます。

詳細は、JBoss EAPConfiguring MessagingControlling Jakarta Messaging ObjectMessage Deserialization を参照してください。

4.7.3. MDB を設定するためのいくつかのユースケース

  • メッセージを受信する MDB のユースケース

    MDB がメッセージを受信する際の基本的なシナリオは、JBoss EAP に同梱される helloworld-mdb クイックスタートを参照してください。

  • メッセージを送信する MDB のユースケース

    メッセージの処理後、他のビジネスシステムに通知したり、メッセージに応答する必要がある場合があります。この場合、以下のスニペットにあるように、MDB からメッセージを送信できます。

    package org.jboss.as.quickstarts.mdb;
    
    import javax.annotation.Resource;
    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.inject.Inject;
    import javax.jms.JMSContext;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.Queue;
    
    @MessageDriven(name = "MyMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queue/MyMDBRequest"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
    public class MyMDB implements MessageListener {
    
        @Inject
        private JMSContext jmsContext;
    
        @Resource(lookup = "java:/queue/ResponseDefault")
        private Queue defaultDestination;
    
        /**
         * @see MessageListener#onMessage(Message)
         */
        public void onMessage(Message rcvMessage) {
            try {
                Message response = jmsContext.createTextMessage("Response for message " + rcvMessage.getJMSMessageID());
                if (rcvMessage.getJMSReplyTo() != null) {
                    jmsContext.createProducer().send(rcvMessage.getJMSReplyTo(), response);
                } else {
                    jmsContext.createProducer().send(defaultDestination, response);
                }
            } catch (JMSException e) {
                throw new RuntimeException(e);
            }
        }
    }

    上記の例では、MDB はメッセージを受信した後、JMSReplyTo で指定された宛先、または Java Naming and Directory Interface 名 java:/queue/ResponseDefault にバインドされた宛先のいずれかに応答します。

  • MDB でのユースケースインバウンド接続のリバランスの設定

    @MessageDriven(name="MyMDBName",
        activationConfig =
        {
            @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queueA"),
            @ActivationConfigProperty(propertyName = "rebalanceConnections", propertyValue = "true")
        }
    )