【发布时间】:2020-06-30 15:20:28
【问题描述】:
我在 Unix 系统中使用 IBM Websphere MQ 7.5。我已经在我的机器上安装了客户端,并且服务器正在其他机器上运行。我正在观察一个场景,当我通过 'mqm' 用户运行我的 JMS 应用程序时,我能够与服务器通信,但在使用其他用户时遇到下面提到的错误。
但我可以运行“amqsputc”和“amqsgetc”命令,并通过 mqm 以及其他用户与服务器进行通信。我已按照http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ins.doc/q009300_.htm?lang=en 中提到的所有步骤进行操作
例外:
com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'TestManager' with connection mode 'Client' and host name 'x.x.x.x(9923)'.
Please check if the supplied username and password are correct on the QueueManager to which you are connecting.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:521)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:221)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:426)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:6902)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:6277)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:285)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6233)
at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:120)
at com.ibm.mq.jms.MQQueueConnectionFactory.createConnection(MQQueueConnectionFactory.java:203)
at performance.IBMMQTestProducer.start(IBMMQTestProducer.java:142)
at performance.IBMMQTestProducer.main(IBMMQTestProducer.java:177)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').**
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:209)
... 9 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2035;AMQ9509: Program cannot open queue manager object. [1=2035,5=???]**
at com.ibm.mq.jmqi.internal.JmqiTools.getQueueManagerInfo(JmqiTools.java:783)
at com.ibm.mq.jmqi.remote.impl.RemoteSession.loadInfo(RemoteSession.java:1993)
at com.ibm.mq.jmqi.remote.impl.RemoteSession.getName(RemoteSession.java:2026)
at com.ibm.mq.jmqi.remote.api.RemoteHconn.getName(RemoteHconn.java:728)
at com.ibm.mq.ese.intercept.JmqiConnInterceptorImpl.validate(JmqiConnInterceptorImpl.java:321)
at com.ibm.mq.ese.intercept.JmqiConnInterceptorImpl.afterConnect(JmqiConnInterceptorImpl.java:226)
at com.ibm.mq.ese.intercept.JmqiConnInterceptorImpl.afterJmqiConnect(JmqiConnInterceptorImpl.java:133)
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:315)
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:337)
当我以自己的身份运行并在启动连接时传递“mqm”时,我能够运行它。
connection = cf.createConnection("mqm", "pswd");
我在经理的日志中没有得到任何信息。以下是日志。
------------------------------------------------------------------------------
10/30/2015 06:50:54 AM - Process(31064.1) User(mqm) Program(strmqm)
Host(x.x.x.x) Installation(Installation1)
VRMF(7.5.0.2)
AMQ7125: There are 83 days left in the trial period for this copy of WebSphere
MQ.
EXPLANATION:
This copy of WebSphere MQ is licensed for a limited period only.
ACTION:
None.
【问题讨论】:
-
JMS 应用程序是否使用与 amqsputc/amqsget 相同的 SVRCONN 通道连接到队列管理器?您是否启用了频道身份验证并定义了频道身份验证记录? /var/mqm/qmgrs/TestManager/errors 中的 AMQERR0x.log 文件应该为您提供更具体的错误原因,说明 MQ 认为您以哪个用户 ID 连接。
-
我没有使用系统特定的频道。我在服务器端创建了一个通道,并在客户端使用了相同的通道。 (在 JMS 应用程序以及 amqsget 和 amqsput 中)。我实际上禁用了频道身份验证:CHLAUTH(DISABLED)。我需要启用它们吗?我认为它会删除所有身份验证并允许任何人连接。
-
Yes CHLAUTH(DISABLED) 将关闭频道身份验证,这表明 2035 不是由频道身份验证规则引起的。您是将用户名和密码传递给 JMS createConnection(userName, password) 方法,还是使用不带参数的 createConnection() 版本?目前尚不清楚为什么以 mqm 身份运行 JMS 应用程序有效而以另一个用户身份运行它却不能,但有很多因素会影响 MQ JMS 客户端传递的用户名。你读过www-01.ibm.com/support/docview.wss?uid=swg21636093 吗?
-
请使用队列管理器 AMQERR01.LOG 中显示的错误更新您的问题。然后我们将能够看到导致 2035 年的确切问题。