Spring + JMS + ActiveMQ без зависимости от ActiveMQ

Я пытаюсь создать производителя MQ, который отправляет сообщение в очередь ActiveMQ. Дело в том, что я не хочу, чтобы реализация была специфичной для ActiveMQ. На самом деле я выполняю отправку ActiveMQ в среде разработки, а в производстве сервер приложений будет использовать что-то еще. Я планирую использовать Maven для создания 2 профилей, которые будут фильтровать ресурсы на основе данного профиля.

Я начал играть с JNDI, но застрял... Я перепробовал множество вариантов, но ни один из них не работает. На данный момент мой XML-файл конфигурации весны выглядит следующим образом:

<jee:jndi-lookup id="mqConnectionFactory" jndi-name="java:comp/env/jms/mqConnectionFactory" />

<bean id="jmsJndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop>
            <prop key="java.naming.provider.url">vm://localhost</prop>
        </props>
    </property>
</bean>

<bean id="ismeJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="defaultDestination" ref="ismeJmsDestination"/>
    <property name="connectionFactory" ref="mqConnectionFactory"/>
</bean>

<bean id="ismeJmsDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jmsJndiTemplate"/>
    <property name="jndiName" value="dynamicQueues/FOO.BAR"/>
</bean>

mqConnectionFactory не может быть найден, потому что я не добавил его в JNDI. Я не знаю, как его добавить на самом деле, так как это не веб-приложение, поэтому нет context.xml.

Может ли кто-нибудь помочь мне в правильном направлении?


person Florin Vistig    schedule 13.05.2014    source источник


Ответы (1)


Какую бы реализацию брокера вы ни выбрали, вам необходимо иметь соответствующую клиентскую библиотеку в пути к классам. JMS API — это просто API, вам нужна реальная реализация для подключения к выбранному вами брокеру.

Допустим, вы хотите подключиться к ActiveMQ в процессе разработки и к любой реализации JMS в производственной среде. Вы можете изолировать эти две конфигурации в отдельных профилях и сделайте зависимость activeMQ необязательная зависимость в Maven.

person Stephane Nicoll    schedule 13.05.2014
comment
Спасибо, я посмотрю ссылки, которые вы мне дали! Я не ограничен на уровне зависимости. Так что я могу добавить зависимости к ActiveMQ. Мне просто нужно, например, при создании с локальным профилем отправлять сообщения в ActiveMQ. Если вы не создаете локальный профиль, отправляйте сообщения в сконфигурированную очередь JNDI (корпоративная веб-очередь). - person Florin Vistig; 13.05.2014