com.ibm.mq.MQException:MQJE001:完成代码'2',原因'2035'

时间:2012-01-25 16:53:33

标签: java windows ibm-mq

我正在构建一个应该能够连接到IBM WebSphere MQ队列管理器的Java应用程序,我无法理解为什么我一直收到此错误。

我已经通过MQ Explorer使用setmqaut为我的userID授予了管理权限。我还在我的频道中定义了MCAUSER,并且还将用户与MQ Windows组相关联。

有人可以提供一个简短的教程/示例,说明如何在Windows环境中将Java程序与WebSphere MQ安装相连接吗?

1 个答案:

答案 0 :(得分:4)

如果您在频道中设置了MCAUSER,则会覆盖客户端提供的任何ID。如果你仍然得到2035,那么有两种可能性。第一个是使用MCAUSER命令未正确授权setmqaut中的ID。第二个(至少对于Windows)是它不是正确的ID。例如,如果频道定义具有MCAUSER(userx)而不是MCAUSER('userx@domain'),那么所呈现的ID完全可能与WMQ解析的SID不同。在笔记本电脑和WMQ服务器上定义userx时,可能会发生这种情况。服务器必须能够解析提供给它附带的SID的ID。

关于CHLAUTH规则,WMQ v7.1还有其他注意事项。如果显示的ID具有管理权限,WMQ将默认在所有通道上阻止它。这是因为管理ID具有对WMQ的完全访问权限,并且可以使用WMQ服务或触发功能远程执行QMgr主机服务器上的代码。因此,如果你有WMQ v7.1,你需要在所需的频道上启用WMQ管理员访问权限,或者使用非管理用户ID进行连接。

最后,调试所有这些的最简单方法是在QMgr上启用授权事件并将SupportPac MS0P安装到WMQ Explorer中。这将在每次有2035时生成一个事件消息,然后MS0P插件将其解析为人类可读的格式。该消息将告诉你......

  • 什么API调用失败。 (CONNECTOPENCLOSE
  • API调用中指定的选项
  • 进行API调用的ID
  • 进行API调用的对象

这有助于确定您是否提供了所有正确的权限。例如,Java和JMS类将查询它们触摸的每个对象。这是他们在连接时发现DLQ名称或在打开队列时发现BOQNAME的方式。因此,如果您未在QMgr和队列上提供+inq,则会得到2035,并且事件消息将显示所使用的对象和选项。类似地,如果您读取了有害消息,并且该ID没有回退队列或死队列的权限,那么您将获得一个2035(在您查看事件消息之前),该队列已出现在您拥有的队列中一直在愉快地消费消息。因此,请务必启用Auth事件并使用MS0P。

如果您需要友好的WMQ安全性教程,可以存档多个会议演示here