2017-01-22 82 views
0

使用WebSphere AS JMS資源,我試圖用在嵌入式ESB騾子的管理JMS資源,與JMS連接器如下:從嵌入式騾

<jms:connector name="JMS" 
validateConnections="true" 
jndiInitialFactory="com.ibm.websphere.naming.WsnInitialContextFactory" 
connectionFactoryJndiName="jms/mycf" 
doc:name="JMS" 
specification="1.1" 
embeddedMode="true"/> 

連接工廠是由騾子發現沒有問題,但當試圖獲得連接騾結束以下內容:

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) 

任何猜測如何可以解決這個問題?

騾真的需要設置這個ExceptionListener,或者它可以跳過某種方式嗎?

回答

0

終於讓我找到一種方法來擺脫這種例外的,通過簡單地添加到這個接口定義:

cacheJmsSessions="false" 

這不能從提供,因爲默認的真實,CheckBox控件的接口設置,但仍可以手動添加到XML中。

此選項設置爲false會跳過連接工廠裝飾器(CustomCachingConnectionFactory)的創建,因此在此之後連接就OK。

但無論如何,騾然後失敗,消息消費者如下:

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) 

這是因爲騾子嵌入式不尊重J2EE規範,其中規定,如getMessageListener /調用setMessageListener方法無法從EE/Web容器調用。

因此,在Websphere中使用標準的JMS連接器看起來不太可能。