我觉得这应该很容易。只需RTM即可。但是我找不到我需要的信息。
问:是否 可以@ActivationConfigProperty在部署时更改a的值而无需编写任何XML?
@ActivationConfigProperty
我有一个使用@MessageDriven注解的MDB 。其中包含许多@ActivationConfigProperty配置它的注释。
@MessageDriven
@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映射到不同主题的方式)。但是,当我尝试启动第二个实例时,它失败并显示以下错误:
TopicListenerPort
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实例使用的订阅名称。
JMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName
尽管我可以为每个bean创建一个新的主题连接工厂,但这将需要很多工作,而且没有多大意义。
什么 确实 是有意义的是让每个bean的不同订购的名称。但是,此属性包含在批注中,并且在WebSphere的任何地方都看不到允许我覆盖它的地方。
因此,是否可以重写此属性而不必编写XML部署描述符?如果 确实 需要编写一些XML,该如何覆盖其中的属性?
代替任何部署时解决方案,我编写了一个ejb-jar.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>