Working on a migration from 7 to 8.5, and in it I am now using the tomcat dbcp, instead of apache commons dbcp. I have found that with no other changes to the db code (except the factory param for the resource), it is working fine other than there is an implicit commit happening when I close a connection, even with autocommit turned off in mysql config, resource config AND in my code.
Resource config : <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" username="" password="" maxActive="150" maxIdle="25" maxWait="60000" removeAbandoned="true" removeAbandonedTimeout="300" logAbandoned="true" validationQuery="/* ping */" testOnBorrow="true" testWhileIdle="true" timeBetweenEvictionRunsMillis="600000" defaultAutoCommit="false" /> Only thing changed in that from 7.x to 8.5.x is the factory was org.apache.commons.dbcp.BasicDataSourceFactory. I am using Connector/J 5.1.44 (latest version). Getting a connection boils down to this in my code (pieces pulled out of factories and other classes) (Support class in web code) public static DataSource getDataSource() { try { return (DataSource)new InitialContext().lookup("java:comp/env/" + ServletContextParameters.getDatabaseResourceName()); } catch (NamingException ex) { throw new RuntimeException("unable to find datasource", ex); } } (DAO Factory implementation) public MySQLDAOFactoryImpl(@NotNull DataSource dataSource) { this.dataSource = dataSource; try { this.dbConn = this.dataSource.getConnection(); this.dbConn.setAutoCommit(false); this.dbConn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); } catch (SQLException ex) { throw new DAOException("unable to get database connection", ex); } } @Override public void close() { try { if (this.dbConn != null) { this.dbConn.close(); } } catch (SQLException ex) { throw new DAOException("error closing database connection", ex); } } If I do daoFactory = new MySQLDAOFactoryImpl(getDataSource()); // update #1 daoFactory.commit() // update #2 daoFactory.close(); then update #2 is being committed. If I put in this in the close() method of my DAO Factory if (!this.dbConn.getAutoCommit()) { this.dbConn.rollback(); } before the close() call, then update #2 is correctly not getting committed. I looked back through the recent tomcat changelogs, and found a reference to https://bz.apache.org/bugzilla/show_bug.cgi?id=61425 under the 8.5.21 release which looks like it might be addressing this problem. However, when I download the source for 8.5.23, there is no org.apache.tomcat.jdbc directory so I can't dive in there. Anyone else experienced this? Hopefully I am just missing something obvious. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org