You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Phil Steitz (JIRA)" <ji...@apache.org> on 2015/08/07 05:42:45 UTC

[jira] [Closed] (DBCP-442) All connections to MS SQL Server fail when SharedPoolDataSource has testOnBorrow set

     [ https://issues.apache.org/jira/browse/DBCP-442?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Phil Steitz closed DBCP-442.
----------------------------

> All connections to MS SQL Server fail when SharedPoolDataSource has testOnBorrow set
> ------------------------------------------------------------------------------------
>
>                 Key: DBCP-442
>                 URL: https://issues.apache.org/jira/browse/DBCP-442
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 2.0.1, 2.1
>         Environment: Windows 7, fully updated as of 2015-07-24, Cygwin, Oracle Java 1.8.0_40, DBCP 2.1, MS SQL Server driver sqljdbc42.jar
>            Reporter: Jeff Greif (work)
>             Fix For: 2.1.1
>
>
> When testOnBorrow is set on a SharedPoolDataSource with connections on MS SQL Server, the first (and all subsequent) connections retrieved from the pool get the exception in this stack trace as a result of executing Connection.isValid() in the validation on borrow.
> java -cp ".;$CLASSPATH" Dbcp2TestOnBorrowFailure 'jdbc:sqlserver://myserver.example.com;databasename=mydb' myuser mypassword
> Iteration: 0
> PooledConnection was reused, withoutits previous Connection being closed.
> java.sql.SQLException: PooledConnection was reused, withoutits previous Connection being closed.
>         at org.apache.commons.dbcp2.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:183)
>         at org.apache.commons.dbcp2.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:951)
>         at Dbcp2TestOnBorrowFailure.getConnection(Dbcp2TestOnBorrowFailure.java:30)
>         at Dbcp2TestOnBorrowFailure.main(Dbcp2TestOnBorrowFailure.java:42)
> The code for this example is pasted in here (the preview shows that the code indentation and formatting is lost -- sorry):
> ----------------------------------------------------------------------
> import java.sql.Connection;
> import java.sql.Driver;
> import java.sql.SQLException;
> import java.util.Properties;
> import org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS;
> import org.apache.commons.dbcp2.datasources.SharedPoolDataSource;
> public final class Dbcp2TestOnBorrowFailure {
>     private static final int MAX_CONNECTIONS = 3;
>     private final SharedPoolDataSource poolDataSource
>         = new SharedPoolDataSource();
>     public Dbcp2TestOnBorrowFailure(String jdbcUrl) {
>         DriverAdapterCPDS cpds = new DriverAdapterCPDS();
>         cpds.setUrl(jdbcUrl);
>         poolDataSource.setConnectionPoolDataSource(cpds);
>         poolDataSource.setMaxTotal(MAX_CONNECTIONS);
>         poolDataSource.setMaxConnLifetimeMillis(300000);
>         poolDataSource.setDefaultMaxWaitMillis(1000);
>         poolDataSource.setDefaultAutoCommit(Boolean.TRUE);
>         poolDataSource.setDefaultTestOnBorrow(true);
>         poolDataSource.setValidationQueryTimeout(3000);
>     }
>     public Connection getConnection(String user, String pwd) throws Exception {
>         return poolDataSource.getConnection(user, pwd);
>     }
>     public static void main(String[] args) {
>         if (args.length != 3) {
>             usage();
>         }
>         Dbcp2TestOnBorrowFailure poolFailure = new Dbcp2TestOnBorrowFailure(args[0]);
>         for (int i = 0; i < 10; ++i) {
>             System.err.println("Iteration: " + i);
>             Connection conn = null;
>             try {
>                 conn = poolFailure.getConnection(args[1], args[2]);
>                 conn.close();
>                 conn = null;
>             }
>             catch (Exception e) {
>                 System.err.println(e.getMessage());
>                 e.printStackTrace(System.err);
>                 System.exit(88);
>             }
>             finally {
>                 try {
>                     if (conn != null) {
>                         conn.close();
>                     }
>                 } catch (SQLException e) {
>                 }
>             }
>         }
>     }
>     private static void usage() {
>         System.err.println("Usage: java -cp ... Dbcp2TestOnBorrowFailure jdbcUrl user password");
>         System.exit(77);
>     }
> }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)