Ejb Websphere 7 com.ibm.ejs.j2c.ConnectionEventListener.connectionError

Ejb Websphere 7 com.ibm.ejs.j2c.ConnectionEventListener.connectionError,ejb,ibm-mq,websphere-7,message-driven-bean,Ejb,Ibm Mq,Websphere 7,Message Driven Bean,我在WebSphere7上部署了一个CMTMDB,它从WebSphereMQ7队列获取消息,并通过资源适配器将消息发送到外部系统。 在消息通过MDB逻辑并尝试通过资源适配器与外部系统建立连接后,我收到错误: Connection Error Request Stack: java.lang.Throwable at com.ibm.ejs.j2c.ConnectionEventListener.connectionErrorOccurred(ConnectionEventListene

我在WebSphere7上部署了一个CMTMDB,它从WebSphereMQ7队列获取消息,并通过资源适配器将消息发送到外部系统。 在消息通过MDB逻辑并尝试通过资源适配器与外部系统建立连接后,我收到错误:

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)
如果我在WebSphere8.5中使用相同的资源适配器部署相同的MDB,那么它可以正常工作。 因此,我假设它与WebSphere7以及它无法在连接池中打开/找到连接的方式有关。 这不是一个负载测试,所以也不是太多的资源试图获得免费连接的情况


提前感谢您对这个问题的任何建议

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


综上所述,您在日志中看到错误消息的原因是跟踪处于打开状态:),生成异常只是为了获取要输出到日志文件的堆栈跟踪。永远不会“抛出”异常,处理应继续正常进行。

是否尝试从WAS连接到JBoss消息?com.jbase.jremote.jca.JRemoteManagedConnection表明。我正在尝试通过资源适配器从Websphere连接到EIS。我拥有的资源适配器包含包含com.jbase.jremote.jca.JRemoteManagedConnection类的存档jremote.jar。扩展日志还显示:Exception(而不是XA_RB*)来自end javax.transaction.xa.XAException:未能接收消息-com.ibm.ejs.j2c.XATransactionWrapper.end(XATransactionWrapper.java:603)com.ibm.ws.transaction.JTA.JTAResourceBase.end(JTAResourceBase.java:240)上的com.jbase.jremote.io.JConnectionImpl.end(未知源代码)上的服务器断开连接com.ibm.tx.jta.RegisteredResources.sendEnd(RegisteredResources.java:1152)com.ibm.tx.jta.RegisteredResources.distributeEnd(RegisteredResources.java:1126)我启用了跟踪以获取有关该问题的更多信息。我还假设资源适配器无法从池中获取连接,但这会阻止MQ MDB资源适配器-EIS的流。消息不会到达EIS,因为通过资源适配器的连接失败。在部署了相同MDB和相同资源的Websphere 8.5上消息成功地到达EIS。可能是Websphere上的配置问题?我想说,更可能是连接到EIS系统的配置问题。你能比较一下WAS8.5和WAS7系统的配置吗?检查到EIS系统的第一次连接尝试,以了解为什么它可能没有被处理。j2cConnectionFactory在两个Websphere版本上都是相同的。在各自的自定义属性中,最终都引用了EIS的相同ip和端口,我已经将MDB设置为Bean模式,当捕获资源适配器抛出的连接异常时,我将消息回滚到输入队列,以便在重新建立连接后重新处理它们