Java 使用MDB在WebSphere MQ中进行订户授权

Java 使用MDB在WebSphere MQ中进行订户授权,java,websphere,ibm-mq,publish-subscribe,message-driven-bean,Java,Websphere,Ibm Mq,Publish Subscribe,Message Driven Bean,我有一个MDB,看起来像这样: @MessageDriven(mappedName = "jms/TestJeremyTopic ", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "desti

我有一个MDB,看起来像这样:

@MessageDriven(mappedName = "jms/TestJeremyTopic ", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
        @ActivationConfigProperty(propertyName = "clientId", propertyValue = "TopicReaderBeanClientId"),
        @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "TopicReaderBeanSubscriptionName")
    })
public class TopicReaderBean implements MessageListener {
    public void onMessage(Message message) {
        ...
    }
}
我已经在WebSphereMQ7中设置了一个主题。使用MQ资源管理器,发布和订阅操作似乎都可以

我已经在WebSphere中设置了一个侦听器端口。侦听器端口可以成功启动

当我部署并启动我的应用程序时,MDB无法读取任何消息。例外情况如下:

[1/19/11 10:57:06:569 EST] 00000009 MDBListenerIm W   WMSG0019E: Unable to start MDB Listener TopicReaderBean, JMSDestination jms/TestJeremyTopic :     com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ0026: Failed to subscribe to topic 'TEST_JEREMY' using MQSUB. There may have been a problem creating the subscription due to it being used by another message consumer. Make sure any message consumers using this subscription are closed before trying to create a new subscription under the same name. Please see the linked exception for more information.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:540)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:236)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:123)
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.initialize(WMQConsumerShadow.java:689)
at com.ibm.msg.client.wmq.internal.WMQAsyncConsumerShadow.initialize(WMQAsyncConsumerShadow.java:714)
at com.ibm.msg.client.wmq.internal.WMQConnectionBrowser.<init>(WMQConnectionBrowser.java:1223)
at com.ibm.msg.client.wmq.internal.WMQConnection.createDurableConnectionBrowser(WMQConnection.java:892)
at com.ibm.msg.client.jms.internal.JmsConnectionImpl.createDurableConnectionBrowser(JmsConnectionImpl.java:1035)
at com.ibm.msg.client.jms.internal.JmsConnectionConsumerImpl.createConnectionBrowser(JmsConnectionConsumerImpl.java:236)
at com.ibm.msg.client.jms.internal.JmsConnectionConsumerImpl.<init>(JmsConnectionConsumerImpl.java:163)
at com.ibm.msg.client.jms.internal.JmsConnectionImpl.createDurableConnectionConsumer(JmsConnectionImpl.java:502)
at com.ibm.msg.client.jms.internal.JmsXAConnectionImpl.createDurableConnectionConsumer(JmsXAConnectionImpl.java:222)
at com.ibm.mq.jms.MQConnection.createDurableConnectionConsumer(MQConnection.java:300)
at com.ibm.ejs.jms.JMSTopicConnectionHandle.createDurableConnectionConsumer(JMSTopicConnectionHandle.java:228)
at com.ibm.ejs.jms.listener.MDBListenerImpl.createResources(MDBListenerImpl.java:597)
at com.ibm.ejs.jms.listener.MDBListenerImpl.internalStart(MDBListenerImpl.java:756)
at com.ibm.ejs.jms.listener.MDBListenerImpl.restart(MDBListenerImpl.java:729)
at com.ibm.ejs.jms.listener.MDBListenerImpl.alarm(MDBListenerImpl.java:1151)
at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:127)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)
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:223)
... 18 more
[1/19/11 10:57:06:569 EST]00000009 MDBListenerIm W WMSG0019E:无法启动MDB侦听器TopicReaderBean,JMSDestation jms/TestJeremyTopic:com.ibm.msg.client.jms.DetailedJMSSecurityException:JMSWMQ0026:无法使用MQSUB订阅主题“TEST_JEREMY”。创建订阅时可能出现问题,因为另一个消息使用者正在使用该订阅。在尝试以相同名称创建新订阅之前,请确保使用此订阅的所有邮件使用者都已关闭。有关详细信息,请参阅链接的异常。
位于com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:540)
位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:236)
位于com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:123)
位于com.ibm.msg.client.wmq.internal.WMQConsumerShadow.initialize(WMQConsumerShadow.java:689)
位于com.ibm.msg.client.wmq.internal.wmqasynccumershadow.initialize(wmqasynccumershadow.java:714)
位于com.ibm.msg.client.wmq.internal.WMQConnectionBrowser.(WMQConnectionBrowser.java:1223)
位于com.ibm.msg.client.wmq.internal.WMQConnection.createDurableConnectionBrowser(WMQConnection.java:892)
位于com.ibm.msg.client.jms.internal.JmsConnectionImpl.createDurableConnectionBrowser(JmsConnectionImpl.java:1035)
位于com.ibm.msg.client.jms.internal.JmsConnectionConsumerImpl.createConnectionBrowser(JmsConnectionConsumerImpl.java:236)
位于com.ibm.msg.client.jms.internal.JmsConnectionConsumerImpl。(JmsConnectionConsumerImpl.java:163)
位于com.ibm.msg.client.jms.internal.JmsConnectionImpl.createDurableConnectionConsumer(JmsConnectionImpl.java:502)
位于com.ibm.msg.client.jms.internal.JmsXAConnectionImpl.createDurableConnectionConsumer(JmsXAConnectionImpl.java:222)
位于com.ibm.mq.jms.MQConnection.createDurableConnectionConsumer(MQConnection.java:300)
位于com.ibm.ejs.jms.JMSTopicConnectionHandle.createDurableConnectionConsumer(JMSTopicConnectionHandle.java:228)
位于com.ibm.ejs.jms.listener.MDBListenerImpl.createResources(MDBListenerImpl.java:597)
位于com.ibm.ejs.jms.listener.MDBListenerImpl.internalStart(MDBListenerImpl.java:756)
位于com.ibm.ejs.jms.listener.MDBListenerImpl.restart(MDBListenerImpl.java:729)
位于com.ibm.ejs.jms.listener.MDBListenerImpl.alarm(MDBListenerImpl.java:1151)
在com.ibm.ejs.util.am.\u Alarm.run(\u Alarm.java:127)
位于com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)
原因:com.ibm.mq.MQException:JMSCMQ0001:WebSphere mq调用失败,代码为“2”(“MQCC_失败”)原因为“2035”(“MQRC_未授权”)。
位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:223)
... 还有18个
我怀疑,虽然侦听器端口能够启动,但在连接的应用程序尝试使用它之前,它不会主动连接。此时,它已通过身份验证,但未经授权

问:WebSphere中的身份验证凭据配置在哪里?我不知道我是谁。它是MDB中
@ActivationConfigProperty
中设置的客户端ID吗


Q:MQ资源管理器中的授权设置在哪里?我看不出有任何方式可以授予团体或个人酒吧或酒吧的权利。目前,它被设置为允许/允许,可能适用于所有人。

身份验证和授权在操作系统级别进行控制。展台用户/组管理是这里的关键。不要忘记在MQ资源管理器中执行以下操作:QueueManager->Security->Refresh Authorization Service。

如果应用服务器和WMQ位于同一台主机上,并通过共享内存(WebSphere MQ术语中的“绑定模式”连接)进行通信,则该帐户由操作系统进行身份验证。但是,如果使用网络连接,传入的ID不会由WMQ验证。除非安装了通道出口以验证密码,否则密码将被忽略。此外,仅当相关帐户更改组注册时才需要刷新身份验证。使用setmqaut命令后无需刷新。