最近我们将我们的websphere应用服务器v8.0.0.3迁移到了8.5.5.8。正在运行一个应用程序,它使用IBM MQ java API通过MQ服务器连接通道连接一个第三方机器。
相同的应用程序在v8.0.0.3中运行良好,但是相同的应用程序未在v8.5.5.8中与MQ连接。我们正在获得“MQRC 2035”(未经授权)。
确切错误:
Could be configuarion, network or service availability issue. Root Cause: MQJE001: Completion Code '2', Reason '2035'
应用程序服务器的旧版本和新版本都以“SYSTEM”用户身份运行(Windows服务)。
可以通过在第三方添加setmqauth来解决。但我们需要澄清为什么同一个应用程序不适用于v8.5.5.8
答案 0 :(得分:1)
WAS v8.0.0.3随IBM MQ RA v7.0.1.7一起提供。 WAS v8.5.5.8 附带IBM MQ RA v7.1.0.6。
IBM MQ MQ的行为在v7.1中已更改为不流动空白MCAUSER。这在IBM Technote" Changes in the default user identifier between WebSphere MQ V7.0.1 classes for JMS and WebSphere MQ V7.1 classes for JMS"。
中有记录<强>答案强>
WebSphere MQ访问控制基于用户标识符。有一个 故意改变WebSphere MQ之间的默认行为 适用于JMS和WebSphere MQ V7.1(及更高版本)类的V7.0.1类 关于流向队列的默认用户标识符的JMS 经理。从用于JMS的WebSphere MQ V7.1类开始,a 非空用户标识符始终流向队列管理器 创建与WebSphere MQ的连接。
如果第三方允许空白MCAUSER
使用WAS v8.0.0.3,则表示第三方未验证您通过的内容,更糟糕的是可能会让您作为MQ管理员连接,允许您访问队列管理器上的所有队列,包括SYSTEM队列。
答案 1 :(得分:0)
在MQEnvironment中显式添加用户标识后问题得到解决。
Hashtable mqht = new Hashtable(); mqht.put(CMQC.USER_ID_PROPERTY,userID);