2014-05-13 107 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隊列)。 –