Alterando a configuração de ativação do tópico lendo MDB no momento da implantação

Eu sinto que isso deve ser fácil. Apenas RTM e pronto. Mas não consigo encontrar as informações necessárias.

Q: Posso alterar o valor de um@ActivationConfigProperty no momento da implantação sem precisar escrever nenhum XML?

Mais detalhes

Eu tenho um MDB que está usando o@MessageDriven anotação. Dentro disso, há uma série de@ActivationConfigProperty anotações configurando-o.

@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 { // ...

Preciso implantar esse MDB várias vezes, referindo-se a um tópico diferente a cada vez.

No tempo de implementação (WebSphere 7 ND), sou capaz de configurar umTopicListenerPort (Maneira do WebSphere mapear para diferentes tópicos) para cada EAR. No entanto, quando tento iniciar uma segunda instância, ela falha com o erro:

WMSG0019E: Não foi possível iniciar o TopicReaderBean do Ouvinte MDB, JMSDestination jms / MMiSInLonTopic: com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0026: Falha ao assinar o tópico 'MMIS_LON_IN' usando o MQSUB. Pode ter havido um problema ao criar a assinatura devido ao uso por outro consumidor de mensagem. Verifique se todos os consumidores de mensagens que usam esta assinatura estão fechados antes de tentar criar uma nova assinatura com o mesmo nome. Consulte a exceção vinculada para obter mais informações. Causada por: com.ibm.mq.MQException: JMSCMQ0001: A chamada do WebSphere MQ falhou com o compcode '2' ('MQCC_FAILED'), razão '2429' ('MQRC_SUBSCRIPTION_IN_USE').

Quando olho para o MQ Explorer, vejo o nome da assinatura comoJMS:GGWKNNG5:gmm_poc_06:TopicReaderBeanSubscriptionName Esta é uma composição de "JMS", nome do QueueManager, ID de Connection Factory de Tópico e ActivationConfigProperty "subscriptionName". A segunda conexão falha devido a um conflito neste nome de assinatura. Preciso distinguir os nomes de assinatura usados por instâncias distintas do MDB.

Embora eu pudesse criar uma nova fábrica de conexões de tópicos para cada bean, seria muito trabalhoso e não faria muito sentido.

o quefaz faz sentido ter um nome de assinatura diferente por bean. No entanto, essa propriedade está inserida na anotação e não consigo ver em nenhum lugar do WebSphere que me permita substituí-la.

Portanto, posso substituir essa propriedade sem precisar escrever um descritor de implantação XML? E se euFaz precisa escrever um XML, como substituo a propriedade?

questionAnswers(1)

yourAnswerToTheQuestion