尝试运行我的JMS-MQ程序时出现身份验证错误

时间:2019-10-02 06:42:44

标签: java jms ibm-mq

我以前曾经在独立的应用程序中运行过类似的代码,但现在有了MQ版本8,这给了它例外。 遇到错误

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013:...
Cause by 
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').

我已经尝试通过给出以下命令来禁用CHLAUTH

       :
ALTER QMGR CHLAUTH (DISABLED)

  1 : ALTER QMGR CHLAUTH (DISABLED)

AMQ8005: WebSphere MQ queue manager changed.

       :
          MQQueueConnectionFactory cf = new MQQueueConnectionFactory();

          // Config
          cf.setHostName("localhost");
          cf.setPort(1414);
          cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
          cf.setQueueManager("QM_TEST");    
          cf.setChannel("DEV.APP.SVRCONN");

          MQQueueConnection connection = (MQQueueConnection) 
                  cf.createQueueConnection();

          MQQueueSession session = (MQQueueSession) 
                  connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
          MQQueue queue = (MQQueue) 
                  session.createQueue("queue:///Q1");
          MQQueueSender sender =  (MQQueueSender)                        
                  session.createSender(queue);
          MQQueueReceiver receiver = (MQQueueReceiver) 
                  session.createReceiver(queue);      

          long uniqueNumber = System.currentTimeMillis() % 1000;
          JMSTextMessage message = (JMSTextMessage) 
                  session.createTextMessage("Client Message "+ uniqueNumber);     

          // Start the connection
          connection.start();

          sender.send(message);
          System.out.println("Sent message:\\n" + message);

          JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
          System.out.println("\\nReceived message:\\n" + receivedMessage);

          sender.close();
          receiver.close();
          session.close();
          connection.close();

即使在已经提到了禁用CHLAUTH之后,我还是遇到了异常

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'QM_TEST' with connection mode 'Client' and host name 'localhost(1414)'.
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:531)
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
    at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:424)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7815)
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:303)
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:236)
    at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6016)
    at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:111)
    at com.ibm.mq.jms.MQQueueConnectionFactory.createConnection(MQQueueConnectionFactory.java:187)
    at SimplePointToPoint.main(SimplePointToPoint.java:31)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM 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:203)
    ... 9 more

添加AMQERR01.LOG日志文件内容

----- amqxfdcp.c : 868 --------------------------------------------------------
10/1/2019 23:07:44 - Process(3172.4) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6119: An internal WebSphere MQ error has occurred ()

EXPLANATION:
MQ detected an unexpected error when calling the operating system. The MQ error
recording routine has been called.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 829 --------------------------------------------------------
10/1/2019 23:07:44 - Process(3172.4) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6184: An internal WebSphere MQ error has occurred on queue manager QM_TEST.

EXPLANATION:
An error has been detected, and the WebSphere MQ error recording routine has
been called. The failing process is process 3172.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 868 --------------------------------------------------------
10/2/2019 00:13:25 - Process(6536.5) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6125: An internal WebSphere MQ error has occurred.

EXPLANATION:
An internal error has occurred with identifier 20806248.  This message is
issued in association with other messages.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 829 --------------------------------------------------------
10/2/2019 00:13:25 - Process(6536.5) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6184: An internal WebSphere MQ error has occurred on queue manager QM_TEST1.

EXPLANATION:
An error has been detected, and the WebSphere MQ error recording routine has
been called. The failing process is process 6536.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 868 --------------------------------------------------------

1 个答案:

答案 0 :(得分:0)

以下是您作为客户端连接到MQ服务器的两种方式。

1)下面的客户端调用使用默认的用户身份创建一个队列连接。

      public QueueConnection createQueueConnection( ) throws JMSException

2)下面的客户端调用使用默认的用户身份创建一个队列连接。

    public QueueConnection createQueueConnection( String userid,String password) throws JMSException

由于您使用了第一种方法,因此似乎已将默认的系统用户ID发送到MQ服务器,并且由于您将CHCKCLNT设置为OPTIONAL,因此队列管理器正在检查正确的用户名/密码对。结果,您得到的是MQRC2035。因此,您可以通过将CHCKCLNT的值更新为NONE来禁用队列管理器正在执行的验证,从而解决该问题。

找到createQueueConnection方法的链接=> https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.1.0/com.ibm.mq.javadoc.doc/WMQJMSClasses/com/ibm/mq/jms/MQQueueConnectionFactory.html