OpenLiberty / open-liberty

Open Liberty is a highly composable, fast to start, dynamic application server runtime environment
https://openliberty.io
Eclipse Public License 2.0
1.14k stars 583 forks source link

Avoid logging error from JDBC driver when closing connection #25141

Open njr-11 opened 1 year ago

njr-11 commented 1 year ago

The following error is logged when closing a connection during pool maintenance and the connection raises an error. We should consider not logging this because the connection is being discarded rather than doing work that matters to the application.

com.ibm.ejs.j2c.MCWrapper                                    E J2CA0081E: Method destroy failed while trying to execute method destroy on ManagedConnection WSRdbManagedConnectionImpl@9766e500 from resource No longer available. Caught exception: com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: {0}. with SQL State : 08S01 SQL Code : 0
    at <unknown class>.destroy(WSRdbManagedConnectionImpl.java:2581)
    at com.ibm.ejs.j2c.MCWrapper.destroy(MCWrapper.java:1757)
    at com.ibm.ejs.j2c.FreePool.cleanupAndDestroyMCWrapper(FreePool.java:474)
    at com.ibm.ejs.j2c.PoolManager.reclaimConnections(PoolManager.java:3549)
    at com.ibm.ejs.j2c.PoolManager.executeTask(PoolManager.java:3333)
    at com.ibm.ejs.j2c.TaskTimer.run(TaskTimer.java:54)
Caused by: java.sql.SQLException: Connection reset by peer (Write failed) DSRA0010E: SQL State = 08S01, Error Code = 0
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3206)
    at com.microsoft.sqlserver.jdbc.TDSChannel.write(IOBuffer.java:2080)
    at com.microsoft.sqlserver.jdbc.TDSWriter.flush(IOBuffer.java:4323)
    at com.microsoft.sqlserver.jdbc.TDSWriter.writePacket(IOBuffer.java:4225)
    at com.microsoft.sqlserver.jdbc.TDSWriter.endMessage(IOBuffer.java:3269)
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:7780)
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:7768)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$1ConnectionCommand.doExecute(SQLServerConnection.java:3314)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7418)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3272)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectionCommand(SQLServerConnection.java:3318)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.poolCloseEventNotify(SQLServerConnection.java:3614)
    at com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolProxy.close(SQLServerConnectionPoolProxy.java:173)
    at <unknown class>.destroy(WSRdbManagedConnectionImpl.java:2576)
    ... 5 more
Caused by: java.net.SocketException: Connection reset by peer (Write failed)
    at java.base/java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110)
    at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)
    at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyOutputStream.writeInternal(IOBuffer.java:1115)
    at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyOutputStream.write(IOBuffer.java:1108)
    at java.base/sun.security.ssl.SSLSocketOutputRecord.deliver(SSLSocketOutputRecord.java:319)
    at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:1224)
    at com.microsoft.sqlserver.jdbc.TDSChannel.write(IOBuffer.java:2075)
    ... 17 more
maryZil commented 1 year ago

I habe the same issue:

[29.06.23 14:43:19:154 MESZ] 00000731 com.ibm.ejs.j2c.MCWrapper E J2CA0081E: Die Methode cleanup ist beim Ausführen der Methode cleanup für die verwaltete Verbindung WSRdbManagedConnectionImpl@7b1f4e10 mit Ressource DB2DS fehlgeschlagen. Die Ausnahme com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException: DSRA0080E: Vom Data Store Adapter wurde eine Ausnahme empfangen. Ziehen Sie die ursprüngliche Ausnahmenachricht zu Rate: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction.. at com.ibm.ws.rsadapter.impl.WSRdbManagedConnectionImpl.cleanupTransactions(WSRdbManagedConnectionImpl.java:3202) at com.ibm.ws.rsadapter.impl.WSRdbManagedConnectionImpl.cleanup(WSRdbManagedConnectionImpl.java:2735) at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1547) at com.ibm.ejs.j2c.FreePool.returnToFreePoolDelegated(FreePool.java:292) at com.ibm.ejs.j2c.FreePool.returnToFreePool(FreePool.java:279) at com.ibm.ejs.j2c.PoolManager.release(PoolManager.java:928) at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:2138) at com.ibm.ejs.j2c.ConnectionEventListener.connectionClosed(ConnectionEventListener.java:143) at com.ibm.ws.rsadapter.impl.WSRdbManagedConnectionImpl.processConnectionClosedEvent(WSRdbManagedConnectionImpl.java:1282) at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.closeWrapper(WSJdbcConnection.java:507) at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:152) at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:110) at org.springframework.jdbc.support.JdbcUtils.closeConnection(JdbcUtils.java:73) at org.springframework.batch.item.database.AbstractCursorItemReader.doClose(AbstractCursorItemReader.java:390) at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.close(AbstractItemCountingItemStreamItemReader.java:133) at org.springframework.batch.item.support.CompositeItemStream.close(CompositeItemStream.java:85) at org.springframework.batch.core.step.tasklet.TaskletStep.close(TaskletStep.java:305) at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:271) at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148) at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64) at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67) at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:169) at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144) at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134) at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:306) at de.kkh.fr3.batch.uc4.runner.ApplicationContextJobFactory$ContextClosingJob.execute(ApplicationContextJobFactory.java:266) at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135) at java.lang.Thread.run(Thread.java:825)

Exception is only logged, but not passed to caller. So I cant do any exception handling myself.