WebSphere MQ配置问题

时间:2012-09-13 10:20:25

标签: java jms websphere ibm-mq mq

配置MQ连接工厂后

低于错误。

  

java.lang.ClassCastException:com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle与com.ibm.mq.jms.MQQueueConnectionFactory不兼容

我的代码段指向异常:

  

String queueConnectionJndi = props.getProperty(queueConnection + MQ_CONN);   queueConnectionFactory = MQQueueConnectionFactory)initialContext.lookup(queueConnectionJndi);

我无法找出原因。

任何人都可以帮助我,提前谢谢。

5 个答案:

答案 0 :(得分:1)

没有更多的上下文就无法确定,但看起来这个方法调用:

initialContext.lookup(queueConnectionJndi);

返回com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle类型的对象,该对象无法强制转换为com.ibm.mq.jms.MQQueueConnectionFactory。

您能提供更多背景信息吗?

答案 1 :(得分:0)

Post on old nabble听起来像是一个类似的问题,可能会帮助你。

具体而言,最终响应涉及删除可能在部署的WAR中的任何jms.jar文件。检查您的WEB-INF/lib。某些jar由Websphre容器提供,不应将它们包含在WAR中。

Post on the spring fourm还表示由类路径中包含的不应该存在的jar引起的此类问题

如果找到它们,请删除以下任何内容......

naming.jar
providerutil.jar
jndi.jar
jms.jar
mq.jar
websphere.jar

答案 2 :(得分:0)

您是否可以重写代码以使用JMS标准(ConnectionFactoryQueueConnectionFactory)而不是Websphere MQ特定的实现类?这样您就不会将应用程序绑定到Websphere MQ并将其移植到备用MQ实现会更容易......

import javax.jms.QueueConnectionFactory;
...

queueConnectionFactory = (QueueConnectionFactory)initialContext.lookup(jndiName);

答案 3 :(得分:0)

WAS正在使用的MQ jar和我的应用程序使用不同,因此出现了这个问题。当我纠正类路径时,它被解决了。抱歉,感谢您的帮助。

答案 4 :(得分:0)

我经历了大量的反复试验以找到答案(至少我的问题的答案)。我希望这个解决方案也能解决你的问题。正如另一篇文章所述,不包括jms库的作品。但是,如何排除jms库并仍然能够编译代码?这似乎没有人提到过。解决方案是使jms库的范围为"提供" (如果您使用的是Maven或Gradle)。

如上所述:

"提供意味着您需要JAR进行编译,但在运行时已经有环境提供的JAR,因此您不需要将其与应用程序打包在一起。对于Web应用程序,这意味着JAR文件不会放入WEB-INF / lib目录。"

所以在你的pom.xml中添加/更新这些:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>4.3.4.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>javax.jms</groupId>
            <artifactId>javax.jms-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>javax.jms</groupId>
    <artifactId>jms</artifactId>
    <version>1.1</version>
    <scope>provided</scope>
</dependency>

希望这对那些因互联网缺乏答案而感到沮丧的人有所帮助。

删除所有ibm库。他们没用。一旦部署到Websphere,它将无论如何都会使用它的库。