我在使用 MDB 与 MQ 队列绑定 JMS 时遇到了这个奇怪的问题
消息驱动的 EJB:CrbEventMessageAsynchronousService
无法连接到 JMS 目标:queue.contratto.crb.input.publicQueue
。错误是:
javax.jms.JMSException
: MQJMS1017
: 非本地 MQ 队列对接收或浏览无效>
我检查了QueueManager
并且 mq 队列被定义为本地队列,而不是异常所说的远程队列。
应用程序打开以供读取的最顶层队列可能是本地定义的。但是,WMQ 解析到的队列却不是。例如,如果您在远程集群队列上定义本地别名,则解析的队列是非本地的。另一个可能的原因是您打算打开用于输出的队列实际上也正在打开用于输入。这其实很常见。
最后,WMQ 客户端连接到与预期不同的队列管理器也很常见。例如,连接到 QMGRA,并且队列对象指定完全限定名称,例如 QUEUE@QMGRB。即使队列位于 QMGRB 上并且 JNDI 对象按名称指定该队列管理器,QMGRA 上的连接也会将其解析为传输队列,因此将其视为非本地队列。
在开发中解决此类错误的最佳方法之一是使用支持Pac MA0W http://bit.ly/SupportPacMA0W。此 SupportPac 作为 API 出口或通道出口运行,并以人类可读的语言列出所有 API 调用以及为调用选择的所有选项。这将明确显示打开的对象名称、解析的内容以及使用的选项。
或者,您可以使用以下命令打开跟踪strmqtrc http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.amqzag.doc/fa16100_.htm。不要忘记禁用它endmqtrc http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.amqzag.doc/fa15810_.htm当你完成时!这些跟踪在 QMgr 服务器上启用和禁用,并跟踪 WMQ API 调用。有等效的跟踪可以在客户端运行,但这些可能无法显示您所需的详细程度。
最后,建议打印与 JMS 异常相关的所有异常。 JMS 异常是一个多级数据结构,其中链接的异常保存特定于提供者的值。例如,JMS 安全异常可能是 WMQ 授权错误。但话又说回来,这可能是密钥库或文件系统中的错误。如果链接的异常不显示 WMQ 2035 原因代码,则它不是 WMQ 安全错误。信息中心描述了如何在名为的部分中打印链接的异常数据JMS 的 WebSphere MQ 类中的异常 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm35210_.htm.
请注意,我提供了 v7.0 WMQ 文档的链接。如果您在 v6 中编码,这些可能不完全准确,您需要查看v6.0 信息中心 http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp反而。由于 WMQ v6.0 已于 2011 年 9 月终止生命周期,因此强烈建议在 v7.0 上进行所有新开发。如果您需要 v7.0 客户端,可以下载为支持Pac MQC7 http://bit.ly/SupportPacMQC7并向后兼容 v6.0 WMQ 服务器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)