Hi

You have set factory="org.apache.tomcat.jdbc.pool.DataSourceFactory".
In other words, you do not use (tomcat)DBCP, you are using Tomcat jdbc-pool.

In DBCP, the default of rollbackOnReturn attribute is true.
However, in Tomcat jdbc-pool, the default of rollbackOnReturn( and
commitOnReturn
) attribute are false.

see:
http://commons.apache.org/proper/commons-dbcp/configuration.html
http://tomcat.apache.org/tomcat-8.5-doc/jdbc-pool.html


2017-10-12 6:21 GMT+09:00 Chris Cheshire <yahoono...@gmail.com>:

> 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&amp;
> characterEncoding=utf8&amp;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
>
> --
> Keiichi.Fujino
> <users-h...@tomcat.apache.org>

<users-h...@tomcat.apache.org>

Reply via email to