https://bz.apache.org/bugzilla/show_bug.cgi?id=64570
Bug ID: 64570 Summary: Transaction not rollbacked if autocommit is false Product: Tomcat Modules Version: unspecified Hardware: PC OS: Linux Status: NEW Severity: normal Priority: P2 Component: jdbc-pool Assignee: dev@tomcat.apache.org Reporter: ronald.dehuys...@gmail.com Target Milestone: --- Created attachment 37344 --> https://bz.apache.org/bugzilla/attachment.cgi?id=37344&action=edit Packet capturing using wireshark I think I found a bug in the Tomcat JDBC Pool. If I start a connection with autoCommit set to false and default autoCommit is set to true, the active transaction is not rollbacked when the connection is closed. I think the bug is located in the terminateTransaction method in the ConnectionPool class: if one sets the autoCommit manually to false and afterwards the connection is closed without committing or rollback, the transaction stays open. See line 888 of ConnectionPool. Code to reproduce: conn = dataSource.getConnection(); conn.setAutoCommit(false); ps = conn.prepareStatement(sqlStatement, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); ps.setFetchSize(100); paramsSetter.accept(ps); rs = ps.executeQuery(); while(rs.next()) { // do something with result } rs.close() ps.close() conn.close() => Postgres connection stays in state: Ready for query (in a transaction) All other connection pools rollback active transaction on close of connection. See wireshark capture: Correct behaviour: packet 2698 -> 2701 (same for commons-dbcp, hikari and c3p0) Incorrect behaviour: packet 12018 -> missing rollback -- You are receiving this mail because: You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org