gpt4 book ai didi

spring - JNDI 不适用于 HornetQ 和 tomcat

转载 作者:行者123 更新时间:2023-11-28 21:58:56 24 4
gpt4 key购买 nike

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

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 Spring bean :

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

最佳答案

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

关于spring - JNDI 不适用于 HornetQ 和 tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com