[
https://issues.apache.org/jira/browse/DBCP-442?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14641738#comment-14641738
]
Jeff Greif (work) commented on DBCP-442:
----------------------------------------
Same behavior for MySQL (driver mysql-connector-java-5.1.21-bin.jar).
> 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)
>
> 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)