1

これは簡単だと思います。ただRTMして行きます。しかし、必要な情報が見つかりません。

Q:@ActivationConfigProperty XML を記述しなくても、展開時にの値を変更できますか?


もっと詳しく

@MessageDriven注釈を使用している MDB があります。この中には、それを構成するいくつかの@ActivationConfigProperty注釈があります。

@MessageDriven(mappedName = "jms/TestJeremyTopic ", activationConfig = {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
        @ActivationConfigProperty(propertyName = "clientId", propertyValue = "TopicReaderBeanClientId"),
        @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "TopicReaderBeanSubscriptionName")
})
public class TopicReaderBean implements MessageListener { // ...

この MDB を複数回展開する必要があり、毎回異なるトピックを参照します。

展開時 (WebSphere 7 ND) にTopicListenerPort、EAR ごとに個別の (異なるトピックへの WebSphere のマッピング方法) を構成できます。ただし、2 番目のインスタンスを開始しようとすると、次のエラーで失敗します。

WMSG0019E: MDB リスナー TopicReaderBean、JMSDestination jms/MMiSInLonTopic を開始できません: com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0026: MQSUB を使用してトピック「MMIS_LON_IN」にサブスクライブできませんでした。サブスクリプションが別のメッセージ コンシューマーによって使用されているため、サブスクリプションの作成に問題があった可能性があります。同じ名前で新しいサブスクリプションを作成する前に、このサブスクリプションを使用しているすべてのメッセージ コンシューマーが閉じていることを確認してください。詳細については、リンクされた例外を参照してください。原因: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ 呼び出しが compcode '2' ('MQCC_FAILED') 理由 '2429' ('MQRC_SUBSCRIPTION_IN_USE') で失敗しました。

MQ エクスプローラーを見ると、サブスクリプション名がJMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName「JMS」、QueueManager 名、Topic Connection Factory ID、および ActivationConfigProperty「subscriptionName」で構成されていることがわかります。このサブスクリプション名が衝突するため、2 番目の接続は失敗します。個別の MDB インスタンスで使用されるサブスクリプション名を区別する必要があります。

Bean ごとに新しい Topic Connection Factory を作成することもできますが、それは大変な作業であり、あまり意味がありません。

意味のあること、Bean ごとに異なるサブスクリプション名を持つことです。ただし、このプロパティは注釈に組み込まれており、それをオーバーライドできる WebSphere のどこにもありません。

では、XML デプロイメント記述子を記述せずに、このプロパティをオーバーライドできますか? また、XML を記述する必要がある場合そのプロパティをオーバーライドするにはどうすればよいでしょうか。

4

1 に答える 1

0

デプロイ時のソリューションの代わりに、ejb-jar.xmlビルド時に変更できる構成を作成しました。次のように書かれています。

<?xml version="1.0"?>
 <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="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 id="MySpecialMDB">
            <display-name>MySpecialMDB</display-name>
            <ejb-name>TopicReaderBean</ejb-name>
            <ejb-class>my.TopicReaderBean</ejb-class>
            <transaction-type>Container</transaction-type>
            <message-destination-type>javax.jms.Topic</message-destination-type>
            <activation-config>
                <activation-config-property>
                    <activation-config-property-name>destinationType</activation-config-property-name>
                    <activation-config-property-value>javax.jms.Topic</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>subscriptionDurability</activation-config-property-name>
                    <activation-config-property-value>Durable</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>subscriptionName</activation-config-property-name>
                    <activation-config-property-value>${subscriptionName}</activation-config-property-value>
                </activation-config-property>
            </activation-config>
        </message-driven>

    </enterprise-beans>
</ejb-jar>
于 2011-02-01T23:48:35.513 に答える