2014-05-13 71 views
1

我试图构建一个MQ生产者发送消息到ActiveMQ队列。问题是我不希望实现针对ActiveMQ。我实际上是在开发环境中进行ActiveMQ发送,而在生产中,应用程序服务器将使用其他的东西。我打算使用Maven创建2个配置文件,这些配置文件将根据给定的配置文件过滤资源。Spring + JMS + ActiveMQ不依赖于ActiveMQ

我开始玩JNDI,但我卡住了...我尝试了很多选择,但没有一个是可行的。 现在,我的Spring配置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添加它。我不知道如何添加它,因为这不是一个web应用程序,所以没有context.xml。

有人可以帮助我在正确的方向吗?

回答

2

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

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

+0

谢谢,我会看看你给我的链接!我不受限于依赖级别。所以我可以添加依赖到ActiveMQ。例如,当我使用“本地”配置文件构建时,我需要将消息发送到ActiveMQ。如果未使用“本地”配置文件构建,请将消息发送到JNDI配置队列(公司weblogic队列)。 –