Java 在部署时更改主题读取MDB的激活配置

Java 在部署时更改主题读取MDB的激活配置,java,jakarta-ee,websphere,ibm-mq,message-driven-bean,Java,Jakarta Ee,Websphere,Ibm Mq,Message Driven Bean,我觉得这应该很容易。只要RTM就可以了。但是我找不到我需要的信息 问:我是否可以在部署时更改@ActivationConfigProperty的值,而不必编写任何XML 更多细节 我有一个MDB,它使用@MessageDriven注释。其中有许多@ActivationConfigProperty注释对其进行了配置 @MessageDriven(mappedName = "jms/TestJeremyTopic ", activationConfig = { @Activation

我觉得这应该很容易。只要RTM就可以了。但是我找不到我需要的信息

问:我是否可以在部署时更改@ActivationConfigProperty的值,而不必编写任何XML

更多细节 我有一个MDB,它使用@MessageDriven注释。其中有许多@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,每次都引用不同的主题

在部署WebSphere7ND时,我能够为每个EAR配置不同的TopicListenerPort WebSphere映射到不同主题的方式。但是,当我尝试启动第二个实例时,它失败,出现以下错误:

WMSG0019E:无法启动MDB侦听器TopicReaderBean,jms目标jms/MMiSInLonTopic:com.ibm.msg.client.jms.detailedAllegalStateException:JMSWMQ0026:无法使用MQSUB订阅主题“MMIS_LON_IN”。创建订阅时可能出现问题,因为另一个消息使用者正在使用该订阅。在尝试以相同名称创建新订阅之前,请确保使用此订阅的所有邮件使用者都已关闭。有关详细信息,请参阅链接的异常。 原因:com.ibm.mq.MQException:JMSCMQ0001:WebSphere mq调用失败,代码为“2”“MQCC_失败”“原因为“2429”“MQRC_订阅正在使用”

当我查看MQ Explorer时,我可以看到订阅名称是JMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName这是JMS、队列管理器名称、主题连接工厂ID和ActivationConfigProperty subscriptionName的组合。由于此订阅名称冲突,第二个连接失败。我需要区分不同MDB实例使用的订阅名称

虽然我可以为每个bean创建一个新的主题连接工厂,但这将是一项大量的工作,没有多大意义

有意义的是每个bean有一个不同的订阅名称。然而,这个属性被烘焙到注释中,我在WebSphere中看不到任何允许我重写它的地方


那么,我可以重写这个属性而不必编写XML部署描述符吗?如果我确实需要编写一些XML,我如何重写其中的属性?

我编写了一个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>