2013-03-08 297 views
0

我已经将我的项目JMS和获取异常为ActiveMQConnectionFactory cannot be cast to javax.jms.QueueConnectionFactory同时呼吁从ServletContext的监听器JMS receiver但它的作品从public static void main法测得的,并能够接收来自队列的消息异步。我能够使用我的web应用中的queueconnectionqueuesession将消息发送到队列,并在实现MessageListener接口的JMS接收器功能中使用相同的qconnection方法。org.apache.activemq.ActiveMQConnectionFactory不能被转换到了javax.jms.QueueConnectionFactory

任何人都可以告诉我什么是启动Web应用程序启动时自动启动JMS接收器或使用者的最佳方式,因为我使用servletcontextlistener开始自动侦听消息队列。

(包括JMS queuesenderqueuereceiver工作正常,从public static void main方法,只调用queuereceivercontextinitialize方法后,问题开始)

回答

1

也许this post可以帮助你。

海报说,原因有两个版本的ActiveMQ-jar在classpath中。

在我的情况下,原因是classpath中有两个版本的javax.jms:一个是随ActiveMQ提供的,另一个是我用来编译我的源代码(ActiveMQ应该只是我的测试依赖项应用)。我将我的Maven依赖项javax.jms的范围:jms:1.1从编译更改为提供,它从我的WAR文件中删除了javax.jms-jar,并且异常消失。

+0

即使罐子都是相同的版本,它会抛出异常。作为@Lessing提到的'提供'范围将在Maven中实现。如果你不使用Maven,不要直接将jar放在WEB-INF/lib中,而是将它包含在构建路径中进行编译。 – 2013-09-06 00:12:01

0

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

ActiveMQ的5.8.0和上述

  • 的ActiveMQ-经纪自营5.8.0
  • 的ActiveMQ-客户机5.8.0
  • 的geronimo-JMS_ 1.1 _spec- 1.1.1
  • geronimo-j2ee-management_ 1.1 _spec-1。的ActiveMQ 0.1

早期版本

  • 的ActiveMQ-核 - 5.5.1
  • Geronimo的J2EE的management_ 1.0 _spec-1.0
  • 的geronimo-JMS_ 1.1 _spec-1.1.1

检查版本中,它会帮助

相关问题