Spring + JMS + ActiveMQ不依赖于ActiveMQ

时间:2014-05-13 13:13:31

标签: spring maven jms activemq spring-jms

我正在尝试构建一个向ActiveMQ队列发送消息的MQ生产者。问题是我不希望实现特定于ActiveMQ。我实际上是在开发环境中进行ActiveMQ发送,而在生产中,应用服务器将使用其他东西。我计划使用Maven创建2个配置文件,根据给定的配置文件过滤资源。

我开始玩JNDI,但是我被困了......我尝试了很多选择,但没有一个是可行的。 现在,我的spring config 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中添加它。我不知道如何实际添加它,因为这不是webapp,所以没有context.xml。

有人可以帮助我朝正确的方向发展吗?

1 个答案:

答案 0 :(得分:2)

无论您选择哪种代理实现,都需要在类路径中拥有相应的客户端库。 JMS API只是一个API,您需要一个实际的实现来连接到您选择的代理。

假设您要在开发中连接到ActiveMQ以及生产中的任何JMS实现。您可以在separate profiles中隔离这两个配置,并在Maven中将activeMQ依赖关系设为optional dependency