Hermes JMS无法连接到Websphere MQ 7.1(2035错误)

时间:2012-09-17 17:28:39

标签: jms ibm-mq

我正在尝试使用Hermes JMS连接到Websphere MQ 7.1,但我无法做到。我跟着他们的giude,加载了所有的罐子没有问题,设置插件,设置所有变量(主机名,端口,transportType,队列管理器),选中底部的框说明用户并键入用户名和密码,并在确认后然而,我试图发现以下消息:

  

com.ibm.mq.MQException:MQJE001:完成代码'2',原因'2035'。     在   com.ibm.mq.MQManagedConnectionJ11。(MQManagedConnectionJ11.java:233)     在   com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:553)at at   com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:593)     在   com.ibm.mq.StoredManagedConnection。(StoredManagedConnection.java:95)     在   com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:198)     在   com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:882)     在   com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:770)     在   com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:719)     在   com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:175)     在com.ibm.mq.MQQueueManager。(MQQueueManager.java:647)at   hermes.ext.mq.MQSeriesAdmin.getQueueManager(MQSeriesAdmin.java:107)     在   hermes.ext.mq.MQSeriesAdmin.discoverDestinationConfigs(MQSeriesAdmin.java:280)     在   hermes.impl.HermesAdminAdapter.discoverDestinationConfigs(HermesAdminAdapter.java:82)     在   hermes.impl.DefaultHermesImpl.discoverDestinationConfigs(DefaultHermesImpl.java:1126)     在   hermes.browser.tasks.DiscoverDestinationsTask.invoke(DiscoverDestinationsTask.java:77)     在hermes.browser.tasks.TaskSupport.run(TaskSupport.java:175)at   hermes.browser.tasks.ThreadPool.run(ThreadPool.java:170)at at   java.lang.Thread.run(Thread.java:662)

经过几个小时的试验和错误以及对网络的研究,似乎问题是它由于授权不好而无法连接但是我能够使用Java代码连接(使用相同的lib MQQueueConnectionFactory)而且我也是能够使用QueueZee与完全相同的库进行连接,获取所有队列的列表并浏览它们,因此我知道用户授权问题应该不是问题。

我正在运行Hermes JMS 1.14,我尝试使用Java 1.6.0_33和1.7.0_5。 Websphere MQ在版本7.1.0.0上运行,并且这些库是从远程服务器上的此安装获得的。

我尝试将channel变量设置为SYSTEM.DEF.SVRCONN,这是我在QueueZee中使用它来使其工作但仍然是同样的问题。

之前是否有人见过这个问题,希望能够在这种情况下有所了解?

2 个答案:

答案 0 :(得分:1)

在V7.1中,新的CHLAUTH规则默认关闭除SYSTEM.ADMIN.SVRCONN之外的所有SYSTEM。*通道的访问,并且默认情况下不允许任何SVRCONN通道上的任何管理访问。为了诊断这一点,有必要知道使用了什么通道,设置的CHLAUTH规则,通道定义(特别是MCAUSER值)以及使用的ID是否在mqm组中。

你没有提到QueueZee设置是否也是V7.1 QMgr或特别是这个。我猜测CHLAUTH规则已启用,此时SYSTEM.DEF.SVRCONN通道已被禁用。建议的步骤是定义一个名称不以SYSTEM开头的新频道。并确保使用的ID不在mqm组中,但被授权为非管理员ID。

或者,可以使用mqm组中的ID,但是您必须定义CHLAUTH规则才能使其工作。例如,默认的CHLAUTH规则使用CHANNEL(*) BLOCKUSER(*MQADMIN),您可以将其更改为CHANNEL(THE.NEW.CHL.NAME) BLOCKUSER('nobody')。新规则将比旧规则更具体,因此优先于您的频道。它告诉QMgr阻止用户ID' nobody'但是没有提及* MQADMIN。因为' nobody'无论如何都没有访问权限,但由于未提及* MQADMIN(因此未被i规则阻止),规则的效果是允许此渠道上的管理员。

作为一种快速,肮脏和临时的措施,您还可以ALTER QMGR CHLAUTH(DISABLED)获得与v7.0及更早版本的QMgrs相同的行为。请注意,这允许使用mqm用户ID进行匿名远程管理和远程代码执行。这就是更改默认设置的原因。现在,如果需要,您必须明确设置远程管理员访问权限。

有关此主题的更多信息,我建议您参加IMPACT会议的Securing Your QMgr演示文稿。

请注意,QMgr不会检查应用程序发送的密码。该字段存在,以便通道出口可以针对AD,LDAP等验证密码。如果没有这样的退出,则忽略密码。客户传入的用户ID可以通过面值接受,也可以通过渠道的MCAUSER或CHLAUTH规则进行修改。

最后,当遇到授权问题时,最简单的诊断方法是ALTER QMGR AUTHOREV(ENABLED),然后使用SupportPac MS0P解码WMQ Explorer中的PCF消息。 auths错误最终在QMgr事件队列中。每条消息都会告诉您auths失败的对象,针对该对象的API调用,调用选项以及进行调用的ID。通常我们发现拨打电话的ID不是我们想要的,或者程序正在使用未经授权的选项,因此这可能非常有用。

答案 1 :(得分:0)

不是一个真正的答案,只是对这个问题进行了一些研究。 我在一小时前遇到了同样的问题。我传递的用户名如domain \ sortoflongusername,我在WSMQ服务器上的systemlog中看到的是我的用户名被截断为12个符号。 我根本不熟悉hermesJMS和soapui(只是想把它提供给我们的测试人员来检查它作为测试平台),所以也许这里的任何人都知道这个问题的根源。