来自 Spring JMS 和 IBM Websphere MQ 的 JMSCS0002

JMSCS0002 from Spring JMS and IBM Websphere MQ

我在 Stack overflow 上看到了一两个关于这个错误的问题,但我仍然无法解决它,所以我想我会提出自己的问题。

这是我的问题:

我正在使用 Spring 和 Spring 的 JMSTemplate 来执行一些消息传递和队列工作。我正在尝试从队列中读取。如果我的逻辑在我的代码中是正确的,我不是 100% 肯定,但是每当我尝试 运行 我的应用程序时,我都会遇到这个异常(我只包括最后一部分):

Caused by: com.ibm.msg.client.commonservices.CSIException: JMSCS0002
    at com.ibm.msg.client.commonservices.workqueue.PIWorkQueueManager.enqueueItem(PIWorkQueueManager.java:67)
    at com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.enqueue(WorkQueueManager.java:225)
    at com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.enqueue(WorkQueueManager.java:194)
    at com.ibm.msg.client.wmq.common.internal.WMQThreadPool.enqueue(WMQThreadPool.java:91)

现在我相当确定这与我的代码无关,因为无论我如何更改我的逻辑,如果我尝试调用 JMSTemplate 提供的任何方法,我都会收到此异常.在做了一些研究(基于其他堆栈溢出答案)之后,我认为它与我的类路径设置方式有关。以下是对这些问题的 link:

One and

除此之外,这是我在 IBM site 上找到的一些信息:

To compile and run WebSphere MQ classes for JMS applications, use the CLASSPATH setting for your platform as shown in Table 1.

CLASSPATH=MQ_INSTALLATION_PATH\java\lib\com.ibm.mqjms.jar; MQ_INSTALLATION_PATH\tools\jms;

不过我已经尝试过了,但它似乎仍然让我失望。这是我在我的应用程序的 .bat 文件中添加的内容 运行:

c:\java\jre6\bin\javaw -cp "C:\ussco\wmsflgint\mqs\mqjms-7.5.0.0.jar; C:\ussco\wmsflgint\mqs\mq-7.5.0.0.jar; C:\ussco\wmsflgint\mqs\headers-1.4.2.jar; C:\ussco\wmsflgint\mqs\jmqi-7.5.0.0.jar;" -Xmx256M ....(最后还有很多,但我觉得不相关)

我添加的不正确吗?

谢谢

这里的问题是您一直在复制和重命名 IBM MQ jar 文件,因此在运行时 Java class 路径上没有完整集。这可能会导致各种问题和意外异常,例如您遇到的异常。

请注意,IBM 支持不允许复制 MQ jar 文件、重命名它们 and/or 将它们捆绑到应用程序中,这会使 MQ 条款和条件无效。 (对于捆绑到 V8 和 V9 可再分发客户端和 allclient 的应用程序,规则略有不同;但您在这里不使用它)。

如果您在系统上正确安装了 MQ 客户端(您应该这样做),然后使用您已经在知识中心找到的说明来参考 com.ibm.mq.jar 文件 [= Java 应用程序的 22=]es 或 Java class 路径上 JMS 应用程序的 com.ibm.mqjms.jar 的 classes,您的问题将得到解决。

我刚刚 运行 遇到了与队列侦听器相同的问题。解决方案是在Spring 项目的src/main/resources/META-INF 目录下放置一个文件compinfo.properties。该文件应为两个属性设置值:

CompList: comp1
comp1_CompClass: com.ibm.msg.client.commonservices.j2se.J2SEComponent

或者您可以直接在 jar com.ibm.msg.client.commonservices 中更改 属性 (comp1_CompClass) 值。j2se.jar。它具有相同的效果,但由于版权我怀疑它是否合法。 希望这会有所帮助并为某人节省几个小时。