1

我有一个看起来像这样的MDB:用户授权与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) { 
     ... 
    } 
} 

我已经设置了一个主题中的WebSphere MQ 7.使用MQ资源管理器都酒馆和子业务似乎是确定。

我在WebSphere中设置了一个Listener端口。监听端口可以成功启动。

当我部署并启动我的应用程序时,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 

我怀疑,而监听端口能够启动,它不会主动连接到一个附加的应用程序尝试使用它。目前它已通过身份验证,但未获得授权。

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

问:MQ Explorer中的授权设置在哪里?我不认为有任何方法可以向小组或个人授予酒吧或子权利。目前它被设置为允许/允许,大概是为每个人。

回答

0

认证和授权在操作系统级别进行控制。站在用户/组管理是关键。不要忘记在MQ Explorer中执行以下操作:QueueManager - >安全性 - >刷新授权服务。

+2

如果应用程序服务器和WMQ位于同一主机上并在共享内存上交谈(WebSphere MQ术语中的“绑定模式”连接),则该帐户*将由OS进行身份验证。但是如果使用网络连接,传入的ID不会被WMQ验证。除非安装通道出口来验证密码,否则密码将被忽略。此外,只有在有问题的帐户更改组注册时才需要刷新身份验证。使用setmqaut命令后无需刷新。 – 2011-03-25 03:46:46