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

Reply via email to