2012-10-24 47 views
2

我試圖使用HornetQ的Tomcat上運行JMS應用程序的工作!我試過this article。我把jndi.properties放在我的客戶端類路徑中; jndi.properties:JNDI不HornetQ的和Tomcat

java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory 
java.naming.factory.url.pkgs=org.apache.naming 

我添加了這些依賴關係的pom.xml:

<dependency> 
    <groupId>tomcat</groupId> 
    <artifactId>naming-factory</artifactId> 
    <version>5.5.23</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>tomcat</groupId> 
    <artifactId>naming-resources</artifactId> 
    <version>5.5.23</version> 
    <scope>test</scope> 
</dependency> 

我的JMS春豆:

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
     <property name="environment"> 
      <props> 
       <prop key="java.naming.factory.initial">org.apache.naming.java.javaURLContextFactory</prop> 
       <prop key="java.naming.factory.url.pkgs">org.apache.naming</prop> 
      </props> 
     </property> 
    </bean> 

<!-- Connection Factory --> 
<bean id="hornetqConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiTemplate" ref="jndiTemplate"/> 
    <property name="jndiName" value="/ConnectionFactory" /> 
</bean> 

<!-- Destinations --> 
<bean id="annotationDeleteCommandDestination" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiTemplate" ref="jndiTemplate"/> 
    <property name="jndiName" value="/queue/command/annotation/deleteQueue" /> 
</bean> 

我使用HornetQ的默認服務器(獨立的,非-clustered)

hornetq-jms.xml:

<queue name="annotationDeleteCommandQueue"> 
    <entry name="/queue/command/annotation/deleteQueue"/> 
</queue> 

<connection-factory name="NettyConnectionFactory"> 
     <xa>false</xa> 
     <connectors> 
     <connector-ref connector-name="netty"/> 
     </connectors> 
     <entries> 
     <entry name="/ConnectionFactory"/> 
     </entries> 
    </connection-factory> 

但是,當我起tomcat我得到這個錯誤:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hornetqConnectionFactory' defined in ServletContext resource [/WEB-INF/classes/config/spring/applicationContext-jms.xml]: 
Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name ConnectionFactory is not bound in this Context ......... 

有什麼不對? 我應該把任何jar文件的tomcat類路徑? (這罐子?) 我應該把隊列和連接工廠定義在Tomcat CONFIGS? (如何?) 我可以在Tomcat中禁用JNDI和使用HornetQ的獨立JNDI呢?

回答

2

我通過修改jndiTemplate(使用jboss命名)並添加jnp-client來解決此問題.JAR到客戶端的類路徑:

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
    <property name="environment"> 
     <props> 
      <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> 
      <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop> 
      <prop key="java.naming.provider.url">jnp://localhost:1099</prop> 
     </props> 
    </property> 
</bean> 
0

你蘇爾HornetQ的正確啓動?錯誤日誌似乎表明ConnectionFactory不存在。

您是否嘗試過使用其他工具來訪問HornetQ的? 您應該能夠使用JMX或HermesJMS(http://www.hermesjms.com)來驗證您的存在ConnectionFactory

+0

是它正確啓動!我的應用程序工作正常,沒有tomcat! – united

+0

你可以更具體的關於HornetQ和Tomcat嗎?你的JNDI配置似乎表明它們運行在同一個JVM中,是嗎? –

+0

是的,他們在同一個jvm – united