Return-Path: Delivered-To: apmail-commons-commits-archive@locus.apache.org Received: (qmail 91654 invoked from network); 4 Feb 2008 03:58:35 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Feb 2008 03:58:35 -0000 Received: (qmail 8870 invoked by uid 500); 4 Feb 2008 03:58:26 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 8815 invoked by uid 500); 4 Feb 2008 03:58:26 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 8806 invoked by uid 99); 4 Feb 2008 03:58:26 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 03 Feb 2008 19:58:26 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 04 Feb 2008 03:58:06 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 8E9181A9832; Sun, 3 Feb 2008 19:58:13 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r618163 - in /commons/proper/dbcp/trunk: pom.xml project.xml src/java/org/apache/commons/dbcp/datasources/InstanceKeyDataSource.java src/test/org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java xdocs/changes.xml Date: Mon, 04 Feb 2008 03:58:08 -0000 To: commits@commons.apache.org From: psteitz@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080204035813.8E9181A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: psteitz Date: Sun Feb 3 19:58:08 2008 New Revision: 618163 URL: http://svn.apache.org/viewvc?rev=618163&view=rev Log: Added exception handler to ensure that PooledConnections are not orphaned when an exception occurs in setUpDefaults or clearWarnings in IntanceKeyDataSource getConnection. JIRA: DBCP-237 Reported and patched by Oliver Matz Added: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java Modified: commons/proper/dbcp/trunk/pom.xml commons/proper/dbcp/trunk/project.xml commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/InstanceKeyDataSource.java commons/proper/dbcp/trunk/xdocs/changes.xml Modified: commons/proper/dbcp/trunk/pom.xml URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/pom.xml?rev=618163&r1=618162&r2=618163&view=diff ============================================================================== --- commons/proper/dbcp/trunk/pom.xml (original) +++ commons/proper/dbcp/trunk/pom.xml Sun Feb 3 19:58:08 2008 @@ -255,6 +255,7 @@ org/apache/commons/dbcp/datasources/TestKeyedCPDSConnectionFactory.java org/apache/commons/dbcp/datasources/TestPerUserPoolDataSource.java org/apache/commons/dbcp/datasources/TestSharedPoolDataSource.java + org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java org/apache/commons/dbcp/managed/TestBasicManagedDataSource.java org/apache/commons/dbcp/managed/TestManagedDataSource.java Modified: commons/proper/dbcp/trunk/project.xml URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/project.xml?rev=618163&r1=618162&r2=618163&view=diff ============================================================================== --- commons/proper/dbcp/trunk/project.xml (original) +++ commons/proper/dbcp/trunk/project.xml Sun Feb 3 19:58:08 2008 @@ -366,7 +366,8 @@ org/apache/commons/dbcp/datasources/TestFactory.java org/apache/commons/dbcp/datasources/TestPerUserPoolDataSource.java org/apache/commons/dbcp/datasources/TestSharedPoolDataSource.java - + org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java + org/apache/commons/dbcp/managed/TestBasicManagedDataSource.java org/apache/commons/dbcp/managed/TestManagedDataSource.java org/apache/commons/dbcp/managed/TestManagedDataSourceInTx.java Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/InstanceKeyDataSource.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/InstanceKeyDataSource.java?rev=618163&r1=618162&r2=618163&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/InstanceKeyDataSource.java (original) +++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/datasources/InstanceKeyDataSource.java Sun Feb 3 19:58:08 2008 @@ -688,10 +688,20 @@ + " to create the PooledConnection."); } - Connection con = info.getPooledConnection().getConnection(); - setupDefaults(con, username); - con.clearWarnings(); - return con; + Connection con = info.getPooledConnection().getConnection(); + try { + setupDefaults(con, username); + con.clearWarnings(); + return con; + } catch (SQLException ex) { + try { + con.close(); + } catch (Exception exc) { + getLogWriter().println( + "ignoring exception during close: " + exc); + } + throw ex; + } } protected abstract PooledConnectionAndInfo Added: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java?rev=618163&view=auto ============================================================================== --- commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java (added) +++ commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestInstanceKeyDataSource.java Sun Feb 3 19:58:08 2008 @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.dbcp.datasources; + +import java.sql.Connection; +import java.sql.SQLException; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS; + +/** + * @version $Revision$ $Date$ + */ +public class TestInstanceKeyDataSource extends TestCase { + public TestInstanceKeyDataSource(String testName) { + super(testName); + } + + public static Test suite() { + return new TestSuite(TestInstanceKeyDataSource.class); + } + + + public void setUp() throws Exception { + } + + /** + * Verify that exception on setupDefaults does not leak PooledConnection + * + * JIRA: DBCP-237 + */ + public void testExceptionOnSetupDefaults() throws Exception { + DriverAdapterCPDS pcds; + pcds = new DriverAdapterCPDS(); + pcds.setDriver("org.apache.commons.dbcp.TesterDriver"); + pcds.setUrl("jdbc:apache:commons:testdriver"); + pcds.setUser("foo"); + pcds.setPassword("bar"); + pcds.setPoolPreparedStatements(false); + ThrowOnSetupDefaultsDataSource tds = new ThrowOnSetupDefaultsDataSource(); + tds.setConnectionPoolDataSource(pcds); + int numConnections = tds.getNumActive(); + try { + Connection conn = tds.getConnection("foo", "bar"); + fail("Expecting SQLException"); + } catch (SQLException ex) { + //Expected + } + assertEquals(numConnections,tds.getNumActive()); + } + + private static class ThrowOnSetupDefaultsDataSource + extends SharedPoolDataSource { + ThrowOnSetupDefaultsDataSource() { + super(); + } + protected void setupDefaults(Connection con, String username) + throws SQLException { + throw new SQLException("bang!"); + } + } + +} Modified: commons/proper/dbcp/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/xdocs/changes.xml?rev=618163&r1=618162&r2=618163&view=diff ============================================================================== --- commons/proper/dbcp/trunk/xdocs/changes.xml (original) +++ commons/proper/dbcp/trunk/xdocs/changes.xml Sun Feb 3 19:58:08 2008 @@ -104,7 +104,12 @@ Fixed error in SharedPoolDataSource causing incorrect passwords to be stored under certain conditions. - + + + Added exception handler to ensure that PooledConnections are not + orphaned when an exception occurs in setUpDefaults or clearWarnings in + IntanceKeyDataSource.getConnection. +