2014-11-04 122 views
0

我在Websphere 7上部署了一个CMT MDB,它从Websphere MQ 7队列中获取消息,并通过资源适配器将消息发送给外部系统。 消息后获得通过MDB逻辑和我努力使通过资源适配器我得到的错误与外部系统的连接:Websphere 7 com.ibm.ejs.j2c.ConnectionEventListener.connectionErrorOccurred

Connection Error Request Stack: java.lang.Throwable 
    at com.ibm.ejs.j2c.ConnectionEventListener.connectionErrorOccurred(ConnectionEventListener.java:441) 
    at com.jbase.jremote.jca.EventNotifier$1.notify(Unknown Source) 
    at com.jbase.jremote.jca.JRemoteManagedConnection.notify(Unknown Source) 
    at com.jbase.jremote.jca.JRemoteManagedConnection.isAlive(Unknown Source) 
    at com.jbase.jremote.jca.JRemoteManagedConnectionFactory.matchManagedConnections(Unknown Source) 
    at com.ibm.ejs.j2c.PoolManager.getMCWrapperFromMatch(PoolManager.java:3909) 
    at com.ibm.ejs.j2c.PoolManager.claimVictim(PoolManager.java:3784) 
    at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:2474) 
    at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:1064) 
    at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:701) 
    at com.jbase.jremote.jca.JRemoteConnectionFactoryImpl.getConnection(Unknown Source) 
    at com.jbase.jremote.jca.JRemoteConnectionFactoryImpl.getConnection(Unknown Source) 
    at com.temenos.tocf.grouping.mdb.MessageGroupingMDB.processRequest(MessageGroupingMDB.java:192) 
    at com.temenos.tocf.grouping.mdb.MessageGroupingMDB.sendMessage(MessageGroupingMDB.java:166) 
    at com.temenos.tocf.grouping.mdb.MessageGroupingMDB.onMessage(MessageGroupingMDB.java:123) 
    at com.ibm.ejs.container.MessageEndpointHandler.invokeMdbMethod(MessageEndpointHandler.java:1093) 
    at com.ibm.ejs.container.MessageEndpointHandler.invoke(MessageEndpointHandler.java:778) 
    at $Proxy28.onMessage(Unknown Source) 
    at com.ibm.mq.connector.inbound.MessageEndpointWrapper.onMessage(MessageEndpointWrapper.java:131) 
    at com.ibm.mq.jms.MQSession$FacadeMessageListener.onMessage(MQSession.java:147) 
    at com.ibm.msg.client.jms.internal.JmsSessionImpl.run(JmsSessionImpl.java:2598) 
    at com.ibm.mq.jms.MQSession.run(MQSession.java:862) 
    at com.ibm.mq.connector.inbound.WorkImpl.run(WorkImpl.java:229) 
    at com.ibm.ejs.j2c.work.WorkProxy.run(WorkProxy.java:399) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1662) 

如果我在同一个资源适配器部署相同的MDB WebSphere 8.5的工作原理没有任何错误。 所以我认为这是与WebSphere 7相关的东西以及它无法在连接池中打开/查找连接的方式。 这不是一个负载测试,所以不是太多的资源试图获得免费的连接。

在此先感谢您对此问题的任何建议!

+0

您是否试图从WAS连接到JBoss消息? com.jbase.jremote.jca.JRemoteManagedConnection表明。 – Gas 2014-11-04 09:15:51

+0

我试图通过资源适配器从Websphere连接到EIS。我拥有的资源适配器包含归档jremote.jar,其中包含com.jbase.jremote.jca.JRemoteManagedConnection类。 – kien 2014-11-04 09:21:40

+0

扩展日志还示出了:从端 javax.transaction.xa.XAException异常(未XA_RB *):无法接收消息 - 服务器在com.jbase.jremote.io.JConnectionImpl.end(未知来源) 断开 \t \t在com.ibm.ejs.j2c.XATransactionWrapper.end(XATransactionWrapper.java:603) \t在com.ibm.ws.Transaction.JTA.JTAResourceBase.end(JTAResourceBase.java:240) \t在com.ibm。 tx.jta.RegisteredResources.sendEnd(RegisteredResources.java:1152) \t at com.ibm.tx.jta.RegisteredResources.distributeEnd(RegisteredResources.java:1126) – kien 2014-11-04 09:25:51

回答

0

看起来您的MDB尝试使用com.jbase资源适配器获取连接,并且IBM JCA正在搜索空闲池中的任何匹配连接。它调用com.jbase资源适配器的matchManagedConnection方法,并且资源适配器完成了一个isAlive检查,该检查似乎调用了您可以在堆栈顶部看到的connectionErrorOccurred回调。当资源适配器希望JCA组件从池中删除“错误”连接时,即发生连接的资源已停止或删除网络连接时,会发生这种情况。

说了上述所有内容,为什么在日志中看到错误消息的原因是因为跟踪是在:),只有生成异常才能获取堆栈跟踪以输出到日志文件。这个例外从不“抛出”,处理过程应该照常进行。

+0

我启用了跟踪以获取有关该问题的更多信息。我还假设资源a dapter无法从池中获得连接,但这会阻止MQ-MDB-Resource Adapter-EIS流。由于通过资源适配器的连接失败,消息不会到达EIS。在Websphere 8.5中部署了相同的MDB,并且相同的资源适配器,消息会成功传递给EIS.Might可能是Websphere上的配置问题? – kien 2014-11-04 10:57:59

+0

我想说这更可能是连接到EIS系统的配置问题。你可以比较WAS8.5和WAS7系统的配置吗?检查到EIS系统的第一次连接尝试,看看它为什么不能处理。 – whitfiea 2014-11-04 12:55:06

+0

j2cConnectionFactory在两个Websphere版本中都是相同的。在它们各自的定制属性中,都指向EIS的相同IP和端口 – kien 2014-11-04 13:43:47