我在Websphere 7上部署了一个CMT MDB,它从Websphere MQ 7队列获取消息,并通过资源适配器将消息发送到外部系统。在消息通过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)如果我在WebSphere 8.5中使用相同的资源适配器部署相同的MDB,它可以正常工作,没有任何错误。因此,我假设这与WebSphere 7以及它无法在连接池中打开/找到连接的方式有关。这不是负载测试,所以不会有太多的资源试图获得空闲连接。
提前感谢您对此问题的任何建议!
发布于 2014-11-04 18:33:49
看起来您的MDB正在尝试使用com.jbase资源适配器获取连接,而IBM正在空闲池中搜索任何匹配的连接。它调用com.jbase资源适配器的matchManagedConnection方法,资源适配器执行了isAlive检查,然后调用您可以在堆栈顶部看到的connectionErrorOccurred回调。当资源适配器希望JCA组件从池中删除“坏”连接时,即您所连接的资源已停止或网络连接已被删除时,就会发生这种情况。
如上所述,您在日志中看到错误消息的原因是因为跟踪处于打开状态:),生成异常只是为了获取堆栈跟踪以输出到日志文件。异常永远不会“抛出”,处理应该照常继续。
https://stackoverflow.com/questions/26730993
复制相似问题