MQQueueConnectionFactory 的 @Resource 注入上的 ClassCastException

ClassCastException on @Resource injection of MQQueueConnectionFactory

我正在尝试使用 @Resource 将定义为 JNDI 资源的 MQQueueConnectionFactory 注入到我的 spring 配置中。执行此操作时出现 ClassCastException。 我真的很困惑如何解决这个问题。我正在使用 JDK7 和 spring 4.1.6.RELEASE。 MQ 客户端以标准方式安装并导出到 tomcat 类路径。

[ERROR] [TokenId=] [2015-05-29 21:33:53.496] [DispatcherServlet] - [Context initialization failed]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messagingConfig': Injection of resource dependencies failed; nested exception is org.
springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'java:comp/env/jms/SSAJMSQueueConnectionFactory' must be of type [javax.jms.ConnectionFactory], but
was actually of type [com.ibm.mq.jms.MQQueueConnectionFactory]

当您看到没有意义的 ClassCastException 时,例如您知道 MQQueueConnectionFactory 是 ConnectionFactory 的扩展,那么它通常指向类加载器问题。

在大多数情况下,MQQueueConnectionFactory 已使用与 ConnectionFactory 不同的类加载器加载 - 如果您尝试将一个转换为另一个,即使您希望它工作,这将导致 ClassCastException。