Java 与Tomcat的ActiveMQ JMS连接错误

Java 与Tomcat的ActiveMQ JMS连接错误,java,tomcat,jms,activemq,tomcat9,Java,Tomcat,Jms,Activemq,Tomcat9,我目前已将Tomcat的context.xml配置为: 我有我的activemq.xml: 我在Java代码中启动JMS,如下所示: public void createMessageSubscriberJms(字符串主机、int端口、字符串jmsDestination)抛出JMSException、UnknownHostException{ 字符串hostname=InetAddress.getLocalHost().getCanonicalHostName(); String pro

我目前已将Tomcat的
context.xml
配置为:


我有我的
activemq.xml


我在Java代码中启动JMS,如下所示:

public void createMessageSubscriberJms(字符串主机、int端口、字符串jmsDestination)抛出JMSException、UnknownHostException{
字符串hostname=InetAddress.getLocalHost().getCanonicalHostName();
String providerEndpoints=“tcp://“+hostname+”:“+port+”?wireFormat.maxInactivityDuration=7200000”;
//将受信任的包/类设置为在ActiveMQ JMS服务上来回移动。
ArrayList trustedClasses=新建ArrayList();
trustedClasses.add(“com.gtt.common.shared.GTCMessage”);
//获得工厂
ActiveMQConnectionFactory ActiveMQConnectionFactory=新的ActiveMQConnectionFactory();
activeMQConnectionFactory.setBrokerURL(提供返回点);
//将受信任的包/类添加到ActiveMQ使用者。
//activeMQConnectionFactory.setTrustedPackages(trustedClasses);
activeMQConnectionFactory.setTrustAllPackages(true);
//创建连接
setQueueConnection(activeMQConnectionFactory.createQueueConnection());
getQueueConnection().setClientID(this.getName());
//开会
setSession(getQueueConnection().createQueueSession(false,Session.AUTO_ACKNOWLEDGE));
getSession().createQueue(jmsDestination);
//创建目的地
Destination=getSession().createQueue(jmsDestination);
字符串选择器=“JMSCorrelationID=”+getActionRequest().getOriginId()+“933;”+getActionRequest().getRequestId()+”;
setConsumer(getSession().createConsumer(目标,选择器));
getConsumer().setMessageListener(新的DefaultMessageListener(this));
//开始。。。
//我们现在需要一个消息存储
gtcMessages=新的GTCMessageQueue();
getQueueConnection().start();
}
但是,当我启动Tomcat并调用该方法时,会出现以下错误:

Name [AppJms-HVDIVD17CA50359] is not bound in this Context. Unable to find [AppJms-HVDIVD17CA50359].
你能告诉我我做错了什么吗?我确信,当我使用旧版本的Tomcat和ActiveMQ时,相同的配置也能正常工作


目前我正在使用Tomcat 9.0.45和ActiveMQ 5.16.1。

您对AppJms-hvd17ca50359的定义对我来说有点奇怪:


看起来您正在定义JMS队列,因为
physicalName
属性是
APP.queue
。但是,
type
org.apache.activemq.ActiveMQConnectionFactory
,这是适合JMS连接工厂而不是队列的
类型。此外,
org.apache.activemq.ActiveMQConnectionFactory
类没有
physicalName
属性。我认为您应该在这里使用
org.apache.activemq.command.ActiveMQQueue
作为
类型,例如:


值得注意的是,在此代码中似乎没有使用
AppJms-hvd17ca50359
jms/ConnectionFactory
。我没有看到任何使用这些名称的JNDI查找。因此,您可以简单地从
context.xml
中删除这些资源定义(假设应用程序中没有其他任何东西使用它们),这也可能解决错误


也就是说,我鼓励您使用这些资源,因为这将使将来更新应用程序更加容易,因为如果您需要更改连接工厂或队列配置,那么您只需要修改
context.xml
,而不需要修改应用程序的代码。这是在Tomcat这样的服务器上运行应用程序的主要好处之一。

感谢您的支持。我使用上下文XML来实现代码。问题出在出版商代码上,而不是消费者代码上。我使用
jms/ConnectionFactory
获取ActiveMQ连接工厂,并从中创建队列,并从context.xml中删除队列定义。你的意见有帮助。代码相当长,因此无法在回复中发布给您。但我成功了!谢谢