我正在尝试从 WebSphere App Server 7 创建 JMS 连接,但不断获得 JMSWMQ2013(MQ 原因代码为 2035)。显然这是一个身份验证问题,我可以看到 许多 其他 类似的 报告,所以我对一般问题有一个粗略的了解。
我正在等待我们的运营团队就频道的确切配置提供反馈,但与此同时,我有一个非常令人费解的观察结果。如果我使用 WebSphere 的 JAAS 身份验证来提供用户标识,那么我总是会收到JMSWMQ2013
错误消息。但是,如果将相同的用户标识显式传递给 JMS 队列连接工厂对 的调用createQueueConnection()
,则不会出现身份验证错误。
老实说,我本来希望这两种技术都能保持一致。使用 JAAS 为 JMS 队列连接工厂提供凭据时,我是否遗漏了一些微妙之处?
编辑: 我在 WAS 中使用打开 JMS 跟踪*=info: JMSApi=all: JMSServer=all: Messaging=all: JMS_WASTraceAdapter=all: com.ibm.mq.*=all: jmsApi=all
,并逐行比较输出。
使用 JAAS 时,我可以看到它的深处JmsXAQueueConnectionImpl
实际上正在调用WMQConnection.getProcessUserId()
它返回我的 WAS 实例正在运行的用户 ID(这绝对不是通道中定义的用户MCAUSER
)。
这一切都很奇怪......它似乎根本没有选择 JAAS 身份验证条目。我的 QCF 肯定是使用具有 DefaultPrincipalMapping 映射配置别名的 CLIENT 传输,但由于某种原因,它仍然使用进程的用户 ID 而不是 JAAS 用户 ID。
谢谢。克雷格