当前位置: 首页 > 面试题库 >

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

林彬
2023-03-14
问题内容

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

问:是否 可以@ActivationConfigProperty在部署时更改a的值而无需编写任何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创建一个新的主题连接html" target="_blank">工厂,但这将需要很多工作,而且没有多大意义。

什么 确实 是有意义的是让每个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>


 类似资料:
  • 我正在尝试使用位于WebSphere 8.5(JavaEE规范)中的EAR中的替代部署描述符来部署MDB。示例: 问题是 WAS EJB 容器抱怨找不到所需的绑定文件 ibm-ejb-jar-bnd.xml(激活 MDB 需要此绑定)。该错误说: com.ibm.ejs.container。EJB配置异常:MDB:arqMDB的REQUIRED_BINDING_NOT_FOUND 我已经尝试在EA

  • 但却被忽略了。 是否可以使用maven激活配置文件?

  • 我是一个新的Android系统,我有一个按钮,当我点击按钮时,它会显示一个弹出菜单。 它有两个项目,白天和晚上。 当我按夜间按钮时,整个活动主题更改为黑色,文本颜色为白色,而按白天按钮时,活动主题更改为白色,文本颜色为黑色。 我有一个代码,但它只更改弹出菜单。 我如何更改活动主题。 我的代码: style.xml

  • 示例:http://undeniable.info/img/temp_ss.png 我使用的是用户审批系统,因此说您的帐户处于活动状态的消息根本不合适。我们仍然希望我们的用户确认他们的电子邮件,因此我想将邮件“帐户激活”更改为“帐户电子邮件验证”,并将“激活您的帐户”更改为“验证您的帐户电子邮件”或类似的内容。 在我的整个public_html dir中搜索这些帐户激活的消息时,不会返回任何内容,

  • 在阅读Kafka主题时,我得到了奇怪的ArrayIndexOutOfBoundsException。花了很多时间却搞不清问题所在。有人能在这方面提供帮助/建议吗。这是我的日志。

  • 我的web应用程序与外部系统有几个集成,所有这些集成Rest URL都保存在web应用程序中的配置文件中。我的应用程序在启动时读取此配置文件,并在连接到外部系统时使用URL值。但经常发生的情况是,其中一个外部系统关闭,我们必须使用另一个URL。在这种情况下,我们通常必须修改配置并重新部署war文件。有没有一种方法可以在不重新部署war文件的情况下用新值修改配置文件?