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