【问题标题】:JNDI does not work with HornetQ and tomcatJNDI 不适用于 HornetQ 和 tomcat
【发布时间】:2012-11-06 14:55:48
【问题描述】:

我正在尝试在 tomcat 上使用 hornetq 运行 JMS 应用程序!我尝试关注this article。我将 jndi.properties 放在我的客户端类路径中; jndi.properties:

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 默认服务器(独立、非集群)

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 配置中放置队列和连接工厂定义吗? (如何?) 我可以在 tomcat 中禁用 JNDI 并改用 hornetq 独立 JNDI 吗?

【问题讨论】:

    标签: spring tomcat jms jndi hornetq


    【解决方案1】:

    我通过修改 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>
    

    【讨论】:

      【解决方案2】:

      您是否正确启动了 HornetQ?错误日志似乎表明ConnectionFactory 不存在。

      您是否尝试过使用其他工具访问 HornetQ? 您应该能够使用 JMX 或 HermesJMS (http://www.hermesjms.com) 来验证您的 ConnectionFactory 是否存在

      【讨论】:

      • 是的,它开始正确!我的应用程序在没有 tomcat 的情况下运行良好!
      • 您能更具体地了解 HornetQ 和 Tomcat 吗?你的 JNDI 配置好像表明它们运行在同一个 JVM 中,对吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2016-06-17
      • 2012-01-22
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多