gpt4 book ai didi

java - 更改部署时读取 MDB 的主题的激活配置

转载 作者:行者123 更新时间:2023-12-01 05:50:23 25 4
gpt4 key购买 nike

我觉得这应该很容易。只需 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),我能够为每个 EAR 配置不同的 TopicListenerPort(WebSphere 映射到不同主题的方式)。但是,当我尝试启动第二个实例时,它失败并出现错误:

WMSG0019E: Unable to start MDB Listener TopicReaderBean, JMSDestination jms/MMiSInLonTopic : com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0026: Failed to subscribe to topic 'MMIS_LON_IN' using MQSUB. There may have been a problem creating the subscription due to it being used by another message consumer. Make sure any message consumers using this subscription are closed before trying to create a new subscription under the same name. Please see the linked exception for more information. Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2429' ('MQRC_SUBSCRIPTION_IN_USE').

当我查看 MQ Explorer 时,我可以看到订阅名称是 JMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName 这是由“JMS”、QueueManager 名称、主题连接工厂 ID 和 ActivationConfigProperty 组成的“订阅名称”。由于此订阅名称冲突,第二个连接失败。我需要区分不同 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>

关于java - 更改部署时读取 MDB 的主题的激活配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4858781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com