Я чувствую, что это должно быть легко. Просто RTM и вперед. Но я не могу найти нужную мне информацию.
Q: Могу ли я изменить значение @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 несколько раз, каждый раз обращаясь к другой теме.
Во время развертывания (WebSphere 7 ND) я могу настроить отдельный TopicListenerPort
(способ сопоставления WebSphere с различными темами) для каждого EAR. Однако, когда я пытаюсь запустить второй экземпляр, происходит сбой с ошибкой:
WMSG0019E: Невозможно запустить прослушиватель MDB TopicReaderBean, JMSDestination jms / MMiSInLonTopic: com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0026: Не удалось подписаться на тему 'MMIS_LON_IN' для темы. Возможно, возникла проблема при создании подписки из-за ее использования другим получателем сообщений. Убедитесь, что все потребители сообщений, использующие эту подписку, закрыты, прежде чем пытаться создать новую подписку с тем же именем. Пожалуйста, смотрите связанное исключение для получения дополнительной информации.
Вызывается: com.ibm.mq.MQException: JMSCMQ0001: сбой вызова WebSphere MQ с кодом 2 '(' MQCC_FAILED '), причина' 2429 '(' MQRC_SUBSCRIPTION_IN_USE ').
Когда я смотрю в MQ Explorer, я вижу имя подписки JMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName
Это состав из "JMS", имени QueueManager, идентификатора фабрики соединений с темой и ActivationConfigProperty "subscriptionName". Второе подключение не удается из-за конфликта на этом имени подписки. Мне нужно различать имена подписок, используемые разными экземплярами MDB.
Хотя я мог бы создать новую фабрику соединений тем для каждого компонента, это было бы много работы и не имеет особого смысла.
Что имеет значение , так это иметь другое имя подписки для одного компонента. Однако это свойство встроено в аннотацию, и я не вижу нигде в WebSphere, который позволил бы мне его переопределить.
Итак, можно ли переопределить это свойство без необходимости писать дескриптор развертывания XML? И если мне нужно написать какой-то XML, как мне переопределить это свойство?