从 WebSphere 8 运行 Java 8 MQ 应用程序时出错

Posted

技术标签:

【中文标题】从 WebSphere 8 运行 Java 8 MQ 应用程序时出错【英文标题】:Error while running Java 8 MQ application from WebSphere 8 【发布时间】:2020-03-10 19:22:15 【问题描述】:

尝试从 WebSphere 8 运行 Java 8 MQ 应用程序时出现以下错误:

java.lang.IllegalStateException: Cannot convert value of type 'com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle' to required type 'javax.jms.ConnectionFactory"

经过一些研究,我在这里看到了一些建议,可以通过删除所有 javax.jms jar 来解决上述错误。我的 war 文件中有 jms-api-2.0 和 geronimo-jms_1.1_spec jar。我删除了它们,之后我看到以下错误:

java.lang.NoClassDefFoundError: javax.jms.JMSRuntimeException

这将需要 JMS jar。请指教。

我的战争中打包的罐子:

spring-boot-starter-web:jar:1.5.17.RELEASE
spring-boot-starter:jar:1.5.17.RELEASE
spring-boot-starter-log4j2:jar:1.5.17.RELEASE
spring-boot-starter-activemq:jar:1.5.17.RELEASE
commons-lang3:jar:3.5
cxf-rt-frontend-jaxws:jar:3.1.11
cxf-rt-transports-http:jar:3.1.11
cxf-rt-ws-security:jar:3.1.11
wss4j-ws-security-common:jar:2.2.1
groovy:jar:2.4.11
gson:jar:2.8.5
spring-boot-configuration-processor:jar:1.5.17.RELEASE
com.ibm.mq:jar:8.0.0.5
com.ibm.mq.headers:jar:8.0.0.5
com.ibm.mq.pcf:jar:8.0.0.5
com.ibm.mqjms:jar:8.0.0.5
com.ibm.mq.connector:jar:7.5.0.5
dhbcore:jar:7.5.0.5
mqcontext:jar:2.3
com.ibm.mq.commonservices:jar:8.0.0.5
jaxb-impl:jar:2.2.11
jaxb-core:jar:2.2.11
spring-oxm:jar:4.3.20.RELEASE

删除所有 com.ibm jar 并添加 com.ibm.mq.allclient 和 jms jar 后,我的 war 文件中的新 jar 列表:

spring-boot-starter-web:jar:1.5.17.RELEASE
spring-boot-starter:jar:1.5.17.RELEASE
spring-boot-starter-log4j2:jar:1.5.17.RELEASE
spring-boot-starter-activemq:jar:1.5.17.RELEASE
commons-lang3:jar:3.5
cxf-rt-frontend-jaxws:jar:3.1.11
cxf-rt-transports-http:jar:3.1.11
cxf-rt-ws-security:jar:3.1.11
wss4j-ws-security-common:jar:2.2.1
groovy:jar:2.4.11
gson:jar:2.8.5
spring-boot-configuration-processor:jar:1.5.17.RELEASE
jaxb-impl:jar:2.2.11
jaxb-core:jar:2.2.11
spring-oxm:jar:4.3.20.RELEASE
javax.jms-api:jar:2.0
com.ibm.mq.allclient:jar:9.1.1.0

【问题讨论】:

您运行的是哪个版本的 WAS? 你能在你的问题中显示导致错误的代码 @JoshMc 我在 WAS 8.5.5.16 上运行它 @Morag Hughson 我不认为是导致此问题的代码。因为从本地(tomcat 服务器)运行代码时运行良好。 不行,WAS v8.5.5.6自带MQ RAR v7.1.0.6。这本身将包括 jms 1.1。 【参考方案1】:

WAS 8.5.5.x 支持not support JMS 2.0:

WebSphere® Application Server 支持使用 JMS 1.1 域独立接口(在 JMS 规范中称为“通用接口”)和 JMS 1.0.2 域特定接口的应用程序。

您应该使用 WAS 内置的 IBM MQ resource adapter,而不是随 WAR 一起提供 MQ 库。

在 WAS 控制台中配置 Queue Connection Factory 并遵循 WAS/Spring 指南来引用此连接工厂。

【讨论】:

很好的答案,感谢您发布链接。引用重要内容也不错,我建议从 jms 1.1 支持页面添加信息。 非常感谢。那行得通。从我的战争中删除所有 JMS 和 MQ 库后,应用程序按预期工作。【参考方案2】:

我认为您缺少 IBM MQ“jms.jar”文件。另外,您为什么使用 IBM MQ v8.0.0.5?它已经过时了。

与其弄乱许多 MQ JAR 文件,不如简单地使用“com.ibm.mq.allclient”和“jms.jar”JAR 文件。

转到 Maven 并使用和/或下载 IBM MQ v9.1.3.0,然后还下载 jms.jar

【讨论】:

删除了所有 com.ibm jar 并添加了 com.ibm.mq.allclient 和 jms jar。仍然看到相同的错误:“java.lang.IllegalStateException:无法将 'com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle' 类型的值转换为所需的类型 'javax.jms.ConnectionFactory”。添加到问题中的新罐子列表。

以上是关于从 WebSphere 8 运行 Java 8 MQ 应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Websphere Application Server 8.5 上运行的 Web 应用程序中的字符编码

无法从实体类 Hibernate 4.2.7 Websphere 8.5.5 oracle 11g 创建表

OSGi 包中的 Websphere 8.5 + CXF。是不是可以?

Spring 4,Websphere 8.5.5 上的 Hibernate JPA JarInputStreamBasedArchiveDescriptor 错误

如何在 MACOS 上将 Java 从 9 降级到 8。 Eclipse 未与 Java 9 一起运行

websphere的docker环境搭建