关闭JDBC子包装时出错:com.ibm.websphere.ce.cm.StaleConnectionException:Closed Connection

关闭JDBC子包装时出错:com.ibm.websphere.ce.cm.StaleConnectionException:Closed Connection,jdbc,websphere,websphere-8,Jdbc,Websphere,Websphere 8,正在过时:尝试连接数据库时发生关闭连接错误 [5/13/21 8:24:30:442 CDT] 00000583 ThreadMonitor W WSVR0606W: Thread "ORB.thread.pool : 0" (00000583) was previously reported to be hung but has completed. It was active for approximately 900827 milliseconds. There

正在过时:尝试连接数据库时发生关闭连接错误

[5/13/21 8:24:30:442 CDT] 00000583 ThreadMonitor W   WSVR0606W: Thread "ORB.thread.pool : 0" (00000583) was previously reported to be hung but has completed.  It was active for approximately 900827 milliseconds.  There is/are 0 thread(s) in total in the server that still may be hung.
[5/13/21 8:24:30:441 CDT] 0000ad9b WSJdbcConnect W   DSRA8650W: Error closing a JDBC child wrapper, com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement@51fcce3e
com.ibm.websphere.ce.cm.StaleConnectionException: Closed Connection
    at sun.reflect.GeneratedConstructorAccessor42150.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:437)
    at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapExceptionHelper(GenericDataStoreHelper.java:630)
    at com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapException(GenericDataStoreHelper.java:689)
    at com.ibm.ws.rsadapter.AdapterUtil.mapException(AdapterUtil.java:2289)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcUtil.mapException(WSJdbcUtil.java:1219)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.closeWrapper(WSJdbcPreparedStatement.java:565)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:242)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:195)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.closeChildWrappers(WSJdbcObject.java:297)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.dissociate(WSJdbcConnection.java:1951)
    at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.dissociateConnections(WSRdbManagedConnectionImpl.java:1255)
    at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1870)
    at com.ibm.ejs.j2c.PoolManager.release(PoolManager.java:2975)
    at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:2684)
    at com.ibm.ejs.j2c.MCWrapper.abortMC(MCWrapper.java:4086)
    at com.ibm.ejs.j2c.AbortableXATransactionWrapper.abort(AbortableXATransactionWrapper.java:58)
    at com.ibm.tx.jta.impl.RegisteredResources.abort(RegisteredResources.java:3268)
    at com.ibm.tx.jta.impl.TransactionImpl.abortTransactionParticipants(TransactionImpl.java:3308)
    at com.ibm.ws.tx.jta.TransactionImpl.timeoutTransaction(TransactionImpl.java:1301)
    at com.ibm.ws.tx.jta.TimeoutManager$TimeoutInfo.alarm(TimeoutManager.java:225)
    at com.ibm.ws.tx.util.alarm.AlarmManagerImpl$AlarmListenerAdapter.alarm(AlarmManagerImpl.java:48)
    at com.ibm.ejs.util.am._Alarm.runImpl(_Alarm.java:151)
    at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:136)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1909)

WebSphere日志中出现陈旧/关闭连接错误的可能原因是什么?

堆栈显示它正在处理事务超时,其中包括中止参与的连接。请注意,它前面的警告消息(WSVR0606W)显示,一个被认为是挂起的操作在15分钟(900秒)后终于完成。这可能不是巧合。可能是中止处理允许该操作继续,如果两个线程同时关闭连接,您会看到类似这样的错误,因为另一个线程首先成功地关闭了连接,而这是另一个线程所不期望的。JDBC连接的设计不适合在多个线程上访问,但Connection.abort使这成为可能。需要关注的更大的问题是,为什么要运行一个操作(可能是事务性操作)需要15分钟或更长时间。我会先集中精力解决这个问题。但是,如果确实需要15分钟以上的事务,则需要增加事务超时时间,以避免超时并中止它。

因此我可以推断,两个线程正在运行同一个事务,并且都想关闭连接,但因为另一个线程先关闭了连接,所以第一个线程没有预料到会导致此问题?其中一个线程本来会运行该事务,而另一个线程在事务超时后将其中止。(这是一个经过教育的猜测/假设,你无法从2条消息中确定)。我想说的是,交易中的某些操作花费的时间太长,这可能是其根本原因。因此,如果您可以修复第一个警告的原因,那么它也应该解决第二个警告。