我觉得这应该很容易。只需 RTM 即可。但我找不到我需要的信息。
问:我可以@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 映射到不同主题的方式)。但是,当我尝试启动第二个实例时,它会因错误而失败:
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 Explorer 时,我可以看到订阅名称是JMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName
“JMS”、QueueManager 名称、主题连接工厂 ID 和 ActivationConfigProperty“subscriptionName”的组合。由于此订阅名称发生冲突,第二个连接失败。我需要区分不同 MDB 实例使用的订阅名称。
虽然我可以为每个 bean 创建一个新的主题连接工厂,但这将是很多工作并且没有多大意义。
有意义的是每个 bean 有不同的订阅名称。然而,这个属性被嵌入到注释中,我在 WebSphere 中看不到任何允许我覆盖它的地方。
那么,我是否可以在不必编写 XML 部署描述符的情况下覆盖此属性?如果我确实需要编写一些 XML,我如何覆盖其中的属性?