gpt4 book ai didi

tomcat jms jndi命名异常

转载 作者:行者123 更新时间:2023-11-28 23:39:39 28 4
gpt4 key购买 nike

您好,我正在尝试在 tomcat 服务器中使用 jndi 实现 jms 连接器。但我得到了

javax.naming.NamingException: Cannot create resource instance  

我没有在 server.xml 文件中编写资源,而是在我的 spring 项目的 context.xml 文件中编写资源。我已经使用 DataSource 测试了以下配置并且它工作正常,但是在使用 JMS 测试它时我遇到了命名异常

以下是我的jndi配置。

上下文.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>

网络.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

apache-activemq-4.1.0-incubator.jar

activemq-all_5.4.jarcommons-loggin.jar

我正在使用 tomcat 8 独立服务器。

最佳答案

我以前遇到过很多麻烦(各种类加载器问题、类转换异常等)。我不确定最正确的解决方案到底是什么,但对我有用的是:

确保我项目的 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 相关的 jar)。

项目的 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"/>

我必须再次强调,这只是对我有用的,毫无疑问,更多有经验的开发人员正在阅读这篇文章并畏缩不前,但我希望它能有所帮助!

关于tomcat jms jndi命名异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163992/

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