2014-01-16 92 views
0

嗨,我想在tomcat服務器中使用jndi實現jms連接器。但我越來越tomcat jms jndi命名異常

javax.naming.NamingException: Cannot create resource instance 

我不寫資源在server.xml文件,而不是我寫資源在我的春天項目的context.xml文件。我已經用DataSource測試了以下配置,並且它的工作正常,但是在使用JMS測試它時我正面臨命名異常

以下是我的jndi配置。

的context.xml

<Context crossContext="true"> 

    <!-- Default set of monitored resources --> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
<Resource name="jms/ConnectionFactory" auth="Container" 
       type="org.apache.activemq.ActiveMQConnectionFactory" 
       description="JMS Connection Factory" 
       factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
       brokerURL="tcp://localhost:61616" 
       brokerName="LocalActiveMQBroker" 
       userName="admin" password="admin" 
       useEmbeddedBroker="false" 
       clientID="TomcatClientID" /> 

    <Resource name="jms/myQueue" auth="Container" 
       type="org.apache.activemq.command.ActiveMQQueue" 
       description="JMS Queue" 
       factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
       physicalName="app.jms.queue" /> 
</Context> 

的web.xml

<resource-ref> 
     <res-ref-name>jms/ConnectionFactory</res-ref-name> 
     <res-type>javax.jms.ConnectionFactory</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

    <resource-ref> 
     <res-ref-name>jms/myQueue</res-ref-name> 
     <res-type>javax.jms.Queue</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

我的java類: -

Context envContext = new InitialContext(); 
ConnectionFactory connectionFactory = (ConnectionFactory) envContext.lookup("java:/comp/env/jms/ConnectionFactory"); 

我已經加入我的tomcate_home/lib目錄下的jar

apach電子的ActiveMQ-4.1.0-incubator.jar

的ActiveMQ-all_5.4.jar 公地loggin.jar

我使用的Tomcat 8獨立服務器。

回答

0

我以前遇到過很多麻煩(各種類加載器問題,類轉換異常等)。我不確定究竟是最正確的解決方案是什麼,但是對我來說有效的是:

確定我項目的web-inf/lib中沒有activemq或jms相關的jar。在Tomcat的lib文件夾中,activemq-client-5.8.0.jar,geronimo-jms_1.1_spec-1.1.1.jar,geronimo-j2ee-management_1.1_spec-1.0.1.jar,geronimo-jta_1.0.1B_spec-1.0。 1.jar(確保沒有其他jms或activemq相關的罐子存在)。

項目的web.xml:

<resource-env-ref> 
    <description> 
    ActiveMQ Topic Connection factory 
    </description> 
    <resource-env-ref-name> 
    jms/flex/TopicConnectionFactory 
    </resource-env-ref-name> 
    <resource-env-ref-type> 
    org.apache.activemq.ActiveMQConnectionFactory 
    </resource-env-ref-type> 
</resource-env-ref>  

<resource-env-ref> 
    <description> 
    ActiveMQ Topic to which a bootstrap request for a users orders are sent 
    </description> 
    <resource-env-ref-name> 
    jms/topic 
    </resource-env-ref-name> 
    <resource-env-ref-type> 
    org.apache.activemq.command.ActiveMQTopic 
    </resource-env-ref-type> 
</resource-env-ref> 

Tomcat的web.xml文件:

<resource-ref> 
    <res-ref-name>jms/flex/TopicConnectionFactory</res-ref-name> 
    <res-type>javax.jms.ConnectionFactory</res-type> 
    <res-auth>Application</res-auth> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

的Tomcat的server.xml:

<Resource name="jms/flex/TopicConnectionFactory" 
      auth="Container" 
      type="org.apache.activemq.ActiveMQConnectionFactory" 
      factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
      brokerURL="tcp://localhost:61616" 
      /> 

Tomcat的context.xml中:

<ResourceLink global="jms/flex/TopicConnectionFactory" name="jms/flex/TopicConnectionFactory" type="org.apache.activemq.ActiveMQConnectionFactory"/> 

我必須再次強調,這只是對我有用的東西,毫無疑問,更有經驗的開發人員正在閱讀此內容,但我希望它有所幫助!

+0

嗨馬特,你使用的是哪個版本的tomcat和active mq? – vashishth

+0

我使用的是activemq 5.8.0和Tomcat 6.0.24,因此語法可能會略有不同... – Matt