无法将org.apache.activemq.ActiveMQConnectionFactory转换为javax.jms.QueueConnectionFactory

无法将org.apache.activemq.ActiveMQConnectionFactory转换为javax.jms.QueueConnectionFactory,jms,Jms,我已经在我的项目中集成了JMS,并且在从servletcontext listener调用JMS接收器时,无法将异常转换为javax.JMS.QueueConnectionFactory,但它在public static void main方法中运行良好,并且能够从队列接收消息异步。我能够使用我的web应用程序中的queueconnection和queuesession将消息发送到队列,并使用JMS接收器函数中相同的qconnection方法,实现MessageListener接口 有谁能告诉我

我已经在我的项目中集成了JMS,并且在从servletcontext listener调用
JMS接收器时,无法将异常转换为javax.JMS.QueueConnectionFactory
,但它在
public static void main
方法中运行良好,并且能够从队列接收消息异步。我能够使用我的web应用程序中的
queueconnection
queuesession
将消息发送到队列,并使用JMS接收器函数中相同的
qconnection
方法,实现
MessageListener
接口

有谁能告诉我,当web应用程序启动时,自动启动JMS接收器或使用者的最佳方式是什么,因为我使用
servletcontextlistener
自动开始侦听消息队列

(JMS queuesender和queuereceiver都可以通过
public static void main
方法正常工作,只有在从
contextinitialize
方法调用
queuereceiver
后问题才会出现)

也许可以帮助您

海报上说,原因是类路径中有两个版本的ActiveMQ JAR


在我的例子中,原因是类路径中有两个版本的javax.jms:一个是ActiveMQ附带的版本,另一个是我用来编译源代码的版本(ActiveMQ应该只是我的应用程序的测试依赖项)。我将maven依赖项javax.jms:jms:1.1的范围从compile更改为provided,从而从WAR文件中删除了javax.jms-jar,异常消失。

是的,有一个版本问题,我能够通过使用这些版本的activemq、jms和j2ee依赖项来解决这个问题

ActiveMQ 5.8.0及以上版本

  • activemq代理-5.8.0
  • activemq客户端-5.8.0
  • geronimo-jms\uu规范-1.1.1
  • geronimo-j2ee-management\u规范-1.0.1
早期版本的ActiveMQ

  • activemq核心-5.5.1
  • geronimo-j2ee-management(geronimo-j2ee-management)规范-1.0
  • geronimo-jms\uu规范-1.1.1
检查版本,这会有帮助


即使两个JAR都是相同的版本,它也会抛出异常。@Lessing提到的“提供的”范围将在Maven中起作用。如果不使用Maven,不要将jar直接放在WEB-INF/lib中,而是将其包含在编译的构建路径中。