[英]Using Websphere AS JMS resources from embedded Mule
我正在嘗試通過jms連接器在嵌入式Mule ESB中使用WAS的托管JMS資源,如下所示:
<jms:connector name="JMS"
validateConnections="true"
jndiInitialFactory="com.ibm.websphere.naming.WsnInitialContextFactory"
connectionFactoryJndiName="jms/mycf"
doc:name="JMS"
specification="1.1"
embeddedMode="true"/>
Mule可以毫無問題地找到連接工廠,但是當嘗試建立連接時,Mule最終會得到以下結果:
Caused by: javax.jms.IllegalStateException: Method setExceptionListener not permitted
at com.ibm.ejs.jms.JMSCMUtils.methodNotPermittedException(JMSCMUtils.java:244)
at com.ibm.ejs.jms.JMSConnectionHandle.checkRestrictedMethod(JMSConnectionHandle.java:854)
at com.ibm.ejs.jms.JMSConnectionHandle.setExceptionListener(JMSConnectionHandle.java:353)
at org.springframework.jms.connection.SingleConnectionFactory.prepareConnection(SingleConnectionFactory.java:395)
at org.springframework.jms.connection.SingleConnectionFactory.initConnection(SingleConnectionFactory.java:306)
at org.springframework.jms.connection.SingleConnectionFactory.getConnection(SingleConnectionFactory.java:283)
at org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:224)
at org.mule.transport.jms.Jms11Support.createConnection(Jms11Support.java:72)
at org.mule.transport.jms.JmsConnector.createConnection(JmsConnector.java:450)
at org.mule.transport.jms.JmsConnector.doConnect(JmsConnector.java:547)
at org.mule.transport.AbstractConnector.connectConnectorAndReceivers(AbstractConnector.java:1663)
at org.mule.transport.AbstractConnector$5.doWork(AbstractConnector.java:1629)
at org.mule.retry.policies.AbstractPolicyTemplate.execute(AbstractPolicyTemplate.java:63)
關於如何解決的任何猜測?
Mule是否真的需要設置此ExceptionListener,否則可能會被跳過?
最終,我找到了擺脫此異常的方法,只需將其添加到連接器定義中即可:
cacheJmsSessions="false"
由於提供了默認的true和復選框控制,因此無法從界面中進行設置,但仍可以手動將其添加到XML中。
將此選項設置為false會跳過連接工廠裝飾器(CustomCachingConnectionFactory)的創建,因此此后連接正常。
但是無論如何,Mule然后失敗,並出現消息使用方,如下所示:
Caused by: org.mule.api.lifecycle.LifecycleException: Method getMessageListener not permitted
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver$SubReceiver.doStart(MultiConsumerJmsMessageReceiver.java:325)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver.startSubReceivers(MultiConsumerJmsMessageReceiver.java:235)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver.doStart(MultiConsumerJmsMessageReceiver.java:114)
at org.mule.transport.AbstractMessageReceiver.doStartHandler(AbstractMessageReceiver.java:473)
at org.mule.transport.AbstractTransportMessageHandler$3.onTransition(AbstractTransportMessageHandler.java:321)
at org.mule.lifecycle.AbstractLifecycleManager.invokePhase(AbstractLifecycleManager.java:138)
at org.mule.transport.ConnectableLifecycleManager.fireStartPhase(ConnectableLifecycleManager.java:48)
at org.mule.transport.AbstractTransportMessageHandler.start(AbstractTransportMessageHandler.java:317)
at org.mule.transport.AbstractConnector.registerListener(AbstractConnector.java:1303)
at org.mule.endpoint.DefaultInboundEndpoint.start(DefaultInboundEndpoint.java:105)
... 77 more
Caused by: javax.jms.IllegalStateException: Method getMessageListener not permitted
at com.ibm.ejs.jms.JMSCMUtils.methodNotPermittedException(JMSCMUtils.java:244)
at com.ibm.ejs.jms.JMSMessageConsumerHandle.getMessageListener(JMSMessageConsumerHandle.java:369)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver$SubReceiver.doStart(MultiConsumerJmsMessageReceiver.java:316)
發生這種情況是因為Mule嵌入式不尊重j2ee規范,該規范指出無法從EE / Web容器調用諸如getMessageListener / setMessageListener之類的方法。
因此,將標准JMS連接器與Websphere一起使用似乎不太可能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.