Поиск пункта назначения activeMQ из Spring - PullRequest
1 голос
/ 21 марта 2012

У меня есть приложение Spring, которое должно искать место назначения JMS, чтобы выполнить свою работу.В зависимости от того, находимся ли мы в среде разработки или тестирования системы, мы будем использовать разные реализации JMS.(Oracle AQ в системном тесте с WebLogic, Apache ActiveMQ развернут в Jetty for Dev)

Я настроил ActiveMQ и развернул его, и он создает свои места назначения в файле activemq.xml:

<destinations>
    <queue physicalName="handlersDest" />
    <topic physicalName="notificationsDest" />
</destinations>

Когда я запускаю приложение-обработчик (Spring), оно выполняет поиск мест назначения:

<jee:jndi-lookup id="handlersDest"  jndi-name="$handlersDest">
    <jee:environment>
        java.naming.factory.initial = ${jndi.jms.naming.factory.initial}
        java.naming.provider.url = ${jndi.jms.naming.url}
        queue.handlersDest = handlersDest
    </jee:environment>
</jee:jndi-lookup> 

Моя проблема заключается в том, что мне нужно добавить следующую строку в среду, чтобы она работала:

queue.handlersDest = handlersDest

Я знаю, что это говорит начальному контексту ActiveMQ, что существует пункт назначения, называемый "handlersDest", и что он должен убедиться, что он зарегистрирован под именем очереди "handlersDest", но я не знаю, зачем мне это нужнов клиентском приложении?

Не могу ли я заранее определить эти имена JNDI в activemq.xml или где-нибудь еще в моем приложении, которое развертывает activemq?

1 Ответ

0 голосов
/ 10 декабря 2012

Ответ - нет, начальный контекст active-MQ не поддерживает предопределение имен пунктов назначения jndi.

Я решил проблему, настроив настройку jndi как свойство, чтобы его можно было установить пустым при использовании другого провайдера, который не нуждался в дальнейшей настройке jndi.

Например:

<jee:jndi-lookup id="handlersDest"  jndi-name="$handlersDest">
    <jee:environment>
        java.naming.factory.initial = ${jndi.jms.naming.factory.initial}
        java.naming.provider.url = ${jndi.jms.naming.url}
        queue.handlersDest = handlersDest
    </jee:environment>
</jee:jndi-lookup> 

становится:

<jee:jndi-lookup id="handlersDest"  jndi-name="$handlersDest">
    <jee:environment>
        java.naming.factory.initial = ${jndi.jms.naming.factory.initial}
        java.naming.provider.url = ${jndi.jms.naming.url}
        ${jndi.config}
    </jee:environment>
</jee:jndi-lookup> 

Таким образом, я могу указать свойству jndi.config значение «queue.handlersDest = handlersDest» при развертывании с помощью active-mq. Но может оставить значение пустым, когда оно не нужно.

Другой ответ заключается не в том, чтобы использовать начальный контекст active-mqs, а в том, чтобы использовать начальный контекст, предоставленный контейнером, который можно настроить для размещения адресатов из active-mq.

...