You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2013/01/10 22:55:37 UTC

svn commit: r1431684 - in /commons/proper/dbcp/trunk/src: java/org/apache/commons/dbcp2/ java/org/apache/commons/dbcp2/managed/ test/org/apache/commons/dbcp2/

Author: markt
Date: Thu Jan 10 21:55:36 2013
New Revision: 1431684

URL: http://svn.apache.org/viewvc?rev=1431684&view=rev
Log:
Apply Phil's patch from POOL-229 (with a few tweaks) to switch to Pool2's abandoned object pool support.

Removed:
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/AbandonedConfig.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/AbandonedObjectPool.java
    commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestAbandonedObjectPool.java
Modified:
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/AbandonedTrace.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingConnection.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnection.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java
    commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestAbandonedBasicDataSource.java
    commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/AbandonedTrace.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/AbandonedTrace.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/AbandonedTrace.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/AbandonedTrace.java Thu Jan 10 21:55:36 2013
@@ -14,15 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.commons.dbcp2;
 
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 
+import org.apache.commons.pool2.impl.TrackedUse;
+
 /**
  * Tracks db connection usage for recovering and reporting
  * abandoned db connections.
@@ -33,12 +31,8 @@ import java.util.List;
  * @author Glenn L. Nielsen
  * @version $Revision$ $Date$
  */
-public class AbandonedTrace {
+public class AbandonedTrace implements TrackedUse {
 
-    /** DBCP AbandonedConfig */
-    private final AbandonedConfig config;
-    /** A stack trace of the code that created me (if in debug mode) */
-    private volatile Exception createdBy;
     /** A list of objects created by children of this object */
     private final List<AbandonedTrace> traceList =
         new ArrayList<AbandonedTrace>();
@@ -50,17 +44,6 @@ public class AbandonedTrace {
      * without doing abandoned tracing.
      */
     public AbandonedTrace() {
-        this.config = null;
-        init(null);
-    }
-
-    /**
-     * Construct a new AbandonedTrace with no parent object.
-     *
-     * @param config AbandonedConfig
-     */
-    public AbandonedTrace(AbandonedConfig config) {
-        this.config = config;
         init(null);
     }
 
@@ -70,7 +53,6 @@ public class AbandonedTrace {
      * @param parent AbandonedTrace parent object
      */
     public AbandonedTrace(AbandonedTrace parent) {
-        this.config = parent.getConfig();
         init(parent);
     }
 
@@ -83,22 +65,6 @@ public class AbandonedTrace {
         if (parent != null) {                  
             parent.addTrace(this);
         }
-
-        if (config == null) {
-            return;
-        }
-        if (config.getLogAbandoned()) {
-            createdBy = new AbandonedObjectException();
-        }
-    }
-
-    /**
-     * Get the abandoned config for this object.
-     *
-     * @return AbandonedConfig for this object
-     */
-    protected AbandonedConfig getConfig() {
-        return config;
     }
 
     /**
@@ -106,7 +72,8 @@ public class AbandonedTrace {
      *
      * @return long time in ms
      */
-    protected long getLastUsed() {
+    @Override
+    public long getLastUsed() {
         return lastUsed;
     }
 
@@ -128,20 +95,6 @@ public class AbandonedTrace {
     }
 
     /**
-     * If logAbandoned=true generate a stack trace
-     * for this object then add this object to the parent
-     * object trace list.
-     */
-    protected void setStackTrace() {
-        if (config == null) {                 
-            return;                           
-        }                    
-        if (config.getLogAbandoned()) {
-            createdBy = new AbandonedObjectException();
-        }
-    }
-
-    /**
      * Add an object to the list of objects being
      * traced.
      *
@@ -176,23 +129,6 @@ public class AbandonedTrace {
     }
 
     /**
-     * Prints a stack trace of the code that
-     * created this object.
-     */
-    public void printStackTrace() {
-        if (createdBy != null && config != null) {
-            createdBy.printStackTrace(config.getLogWriter());
-        }
-        synchronized(this.traceList) {
-            Iterator<AbandonedTrace> it = this.traceList.iterator();
-            while (it.hasNext()) {
-                AbandonedTrace at = it.next();
-                at.printStackTrace();
-            }
-        }
-    }
-
-    /**
      * Remove a child object this object is tracing.
      *
      * @param trace AbandonedTrace object to remove
@@ -202,32 +138,4 @@ public class AbandonedTrace {
             this.traceList.remove(trace);
         }
     }
-
-    static class AbandonedObjectException extends Exception {
-
-        private static final long serialVersionUID = 7398692158058772916L;
-
-        /** Date format */
-        //@GuardedBy("this")
-        private static final SimpleDateFormat format = new SimpleDateFormat
-            ("'DBCP object created' yyyy-MM-dd HH:mm:ss " +
-             "'by the following code was never closed:'");
-
-        private final long _createdTime;
-
-        public AbandonedObjectException() {
-            _createdTime = System.currentTimeMillis();
-        }
-
-        // Override getMessage to avoid creating objects and formatting
-        // dates unless the log message will actually be used.
-        @Override
-        public String getMessage() {
-            String msg;
-            synchronized(format) {
-                msg = format.format(new Date(_createdTime));
-            }
-            return msg;
-        }
-    }
 }

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java Thu Jan 10 21:55:36 2013
@@ -33,6 +33,7 @@ import java.sql.SQLFeatureNotSupportedEx
 
 import javax.sql.DataSource;
 
+import org.apache.commons.pool2.impl.AbandonedConfig;
 import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
 import org.apache.commons.pool2.impl.GenericObjectPool;
 import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
@@ -1263,7 +1264,7 @@ public class BasicDataSource implements 
 
     /**                       
      * <p>Flag to remove abandoned connections if they exceed the
-     * removeAbandonedTimout.</p>
+     * removeAbandonedTimeout when borrowObject is invoked.</p>
      *
      * <p>The default value is false.<p>
      * 
@@ -1273,39 +1274,90 @@ public class BasicDataSource implements 
      * 
      * <p>Abandoned connections are identified and removed when 
      * {@link #getConnection()} is invoked and the following conditions hold
-     * <ul><li>{@link #getRemoveAbandoned()} = true </li>
+     * <ul><li>{@link #getRemoveAbandonedOnBorrow()} or
+     *         {@link #getRemoveAbandonedOnMaintenance()} = true</li>
      *     <li>{@link #getNumActive()} > {@link #getMaxTotal()} - 3 </li>
      *     <li>{@link #getNumIdle()} < 2 </li></ul></p>
      *
      * @see #getRemoveAbandonedTimeout()
      */                                                                   
-    public boolean getRemoveAbandoned() {   
+    public boolean getRemoveAbandonedOnBorrow() {   
         if (abandonedConfig != null) {
-            return abandonedConfig.getRemoveAbandoned();
+            return abandonedConfig.getRemoveAbandonedOnBorrow();
         }
         return false;
     }                                    
                                  
     /**
      * <p>Flag to remove abandoned connections if they exceed the
-     * removeAbandonedTimeout.</p>
+     * removeAbandonedTimeout when borrowObject is invoked.</p>
      *
      * <p>If set to true a connection is considered abandoned and eligible   
      * for removal if it has been idle longer than the
-     * {@link #getRemoveAbandoned() removeAbandonedTimeout}.</p>
+     * {@link #getRemoveAbandonedTimeout() removeAbandonedTimeout}.</p>
      * 
      * <p>Setting this to true can recover db connections from poorly written
      * applications which fail to close a connection.</p>
      *
-     * @param removeAbandoned true means abandoned connections will be
-     *   removed
-     * @see #getRemoveAbandoned()
+     * @param removeAbandonedOnMaintenance true means abandoned connections will
+     *                                     be removed when borrowObject is
+     *                                     invoked
      */
-    public void setRemoveAbandoned(boolean removeAbandoned) {
+    public void setRemoveAbandonedOnMaintenance(
+            boolean removeAbandonedOnMaintenance) {
         if (abandonedConfig == null) {
             abandonedConfig = new AbandonedConfig();
         }
-        abandonedConfig.setRemoveAbandoned(removeAbandoned);
+        abandonedConfig.setRemoveAbandonedOnMaintenance(
+                removeAbandonedOnMaintenance);
+        this.restartNeeded = true;
+    }                                                        
+                                               
+    /**                       
+     * <p>Flag to remove abandoned connections if they exceed the
+     * removeAbandonedTimeout during pool maintenance.</p>
+     *
+     * <p>The default value is false.<p>
+     * 
+     * <p>If set to true a connection is considered abandoned and eligible
+     * for removal if it has not been used for more than
+     * {@link #getRemoveAbandonedTimeout() removeAbandonedTimeout} seconds.</p>
+     * 
+     * <p>Abandoned connections are identified and removed when 
+     * {@link #getConnection()} is invoked and the following conditions hold
+     * <ul><li>{@link #getRemoveAbandonedOnBorrow()} or
+     *         {@link #getRemoveAbandonedOnMaintenance()} = true</li>
+     *     <li>{@link #getNumActive()} > {@link #getMaxTotal()} - 3 </li>
+     *     <li>{@link #getNumIdle()} < 2 </li></ul></p>
+     *
+     * @see #getRemoveAbandonedTimeout()
+     */                                                                   
+    public boolean getRemoveAbandonedOnMaintenance() {   
+        if (abandonedConfig != null) {
+            return abandonedConfig.getRemoveAbandonedOnMaintenance();
+        }
+        return false;
+    }                                    
+                                 
+    /**
+     * <p>Flag to remove abandoned connections if they exceed the
+     * removeAbandonedTimeout during pool maintenance.</p>
+     *
+     * <p>If set to true a connection is considered abandoned and eligible   
+     * for removal if it has been idle longer than the
+     * {@link #getRemoveAbandonedTimeout() removeAbandonedTimeout}.</p>
+     * 
+     * <p>Setting this to true can recover db connections from poorly written
+     * applications which fail to close a connection.</p>
+     *
+     * @param removeAbandonedOnBorrow true means abandoned connections will be
+     *                                removed during pool maintenance
+     */
+    public void setRemoveAbandonedOnBorrow(boolean removeAbandonedOnBorrow) {
+        if (abandonedConfig == null) {
+            abandonedConfig = new AbandonedConfig();
+        }
+        abandonedConfig.setRemoveAbandonedOnBorrow(removeAbandonedOnBorrow);
         this.restartNeeded = true;
     }                                                        
                                                
@@ -1318,7 +1370,8 @@ public class BasicDataSource implements 
      * 
      * <p>Abandoned connection cleanup happens when
      * <code><ul>
-     * <li><code>{@link #getRemoveAbandoned() removeAbandoned} == true</li>
+     * <li>{@link #getRemoveAbandonedOnBorrow()} or
+     *     {@link #getRemoveAbandonedOnMaintenance()} = true</li>
      * <li>{@link #getNumIdle() numIdle} &lt; 2</li>
      * <li>{@link #getNumActive() numActive} &gt; {@link #getMaxTotal() maxActive} - 3</li>
      * </ul></code></p>
@@ -1337,11 +1390,13 @@ public class BasicDataSource implements 
      * removed.</p>
      * 
      * <p>Setting this property has no effect if 
-     * {@link #getRemoveAbandoned() removeAbandoned} is false.</p>
+     * {@link #getRemoveAbandonedOnBorrow()} and
+     * {@link #getRemoveAbandonedOnMaintenance()} are false.</p>
      *
      * @param removeAbandonedTimeout new abandoned timeout in seconds
      * @see #getRemoveAbandonedTimeout()
-     * @see #getRemoveAbandoned()
+     * @see #getRemoveAbandonedOnBorrow()
+     * @see #getRemoveAbandonedOnMaintenance()
      */               
     public void setRemoveAbandonedTimeout(int removeAbandonedTimeout) {
         if (abandonedConfig == null) {
@@ -1534,8 +1589,7 @@ public class BasicDataSource implements 
             PoolableConnectionFactory poolableConnectionFactory;
             try {
                 poolableConnectionFactory = createPoolableConnectionFactory(
-                        driverConnectionFactory,
-                        abandonedConfig);
+                        driverConnectionFactory);
                 poolableConnectionFactory.setPoolStatements(
                         poolPreparedStatements);
                 poolableConnectionFactory.setMaxOpenPrepatedStatements(
@@ -1691,8 +1745,11 @@ public class BasicDataSource implements 
     protected void createConnectionPool(PoolableConnectionFactory factory) {
         // Create an object pool to contain our active connections
         GenericObjectPool gop;
-        if ((abandonedConfig != null) && (abandonedConfig.getRemoveAbandoned())) {
-            gop = new AbandonedObjectPool(factory,abandonedConfig);
+        if (abandonedConfig != null &&
+                (abandonedConfig.getRemoveAbandonedOnBorrow() ||
+                 abandonedConfig.getRemoveAbandonedOnMaintenance())) {
+            gop = new GenericObjectPool(factory, new GenericObjectPoolConfig(),
+                    abandonedConfig);
         }
         else {
             gop = new GenericObjectPool(factory);
@@ -1754,12 +1811,10 @@ public class BasicDataSource implements 
      * so subclasses can replace the default implementation.
      * 
      * @param driverConnectionFactory JDBC connection factory
-     * @param configuration abandoned connection tracking configuration (null if no tracking)
      * @throws SQLException if an error occurs creating the PoolableConnectionFactory
      */
     protected PoolableConnectionFactory createPoolableConnectionFactory(
-            ConnectionFactory driverConnectionFactory,
-            AbandonedConfig configuration) throws SQLException {
+            ConnectionFactory driverConnectionFactory) throws SQLException {
         PoolableConnectionFactory connectionFactory = null;
         try {
             connectionFactory =
@@ -1773,7 +1828,6 @@ public class BasicDataSource implements 
             connectionFactory.setDefaultAutoCommit(defaultAutoCommit);
             connectionFactory.setDefaultTransactionIsolation(defaultTransactionIsolation);
             connectionFactory.setDefaultCatalog(defaultCatalog);
-            connectionFactory.setAbandonedConfig(configuration);
             connectionFactory.setCacheState(cacheState);
             connectionFactory.setPoolStatements(poolPreparedStatements);
             connectionFactory.setMaxOpenPrepatedStatements(

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java Thu Jan 10 21:55:36 2013
@@ -77,7 +77,8 @@ public class BasicDataSourceFactory impl
      */
     private final static String PROP_CONNECTIONINITSQLS = "connectionInitSqls";
     private final static String PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED = "accessToUnderlyingConnectionAllowed";
-    private final static String PROP_REMOVEABANDONED = "removeAbandoned";
+    private final static String PROP_REMOVEABANDONEDONBORROW = "removeAbandonedOnBorrow";
+    private final static String PROP_REMOVEABANDONEDONMAINTENANCE = "removeAbandonedOnMaintenance";
     private final static String PROP_REMOVEABANDONEDTIMEOUT = "removeAbandonedTimeout";
     private final static String PROP_LOGABANDONED = "logAbandoned";
     private final static String PROP_POOLPREPAREDSTATEMENTS = "poolPreparedStatements";
@@ -111,7 +112,8 @@ public class BasicDataSourceFactory impl
         PROP_VALIDATIONQUERY_TIMEOUT,
         PROP_CONNECTIONINITSQLS,
         PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED,
-        PROP_REMOVEABANDONED,
+        PROP_REMOVEABANDONEDONBORROW,
+        PROP_REMOVEABANDONEDONMAINTENANCE,
         PROP_REMOVEABANDONEDTIMEOUT,
         PROP_LOGABANDONED,
         PROP_POOLPREPAREDSTATEMENTS,
@@ -326,9 +328,14 @@ public class BasicDataSourceFactory impl
             dataSource.setAccessToUnderlyingConnectionAllowed(Boolean.valueOf(value).booleanValue());
         }
 
-        value = properties.getProperty(PROP_REMOVEABANDONED);
+        value = properties.getProperty(PROP_REMOVEABANDONEDONBORROW);
         if (value != null) {
-            dataSource.setRemoveAbandoned(Boolean.valueOf(value).booleanValue());
+            dataSource.setRemoveAbandonedOnBorrow(Boolean.valueOf(value).booleanValue());
+        }
+
+        value = properties.getProperty(PROP_REMOVEABANDONEDONMAINTENANCE);
+        if (value != null) {
+            dataSource.setRemoveAbandonedOnMaintenance(Boolean.valueOf(value).booleanValue());
         }
 
         value = properties.getProperty(PROP_REMOVEABANDONEDTIMEOUT);

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingConnection.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingConnection.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingConnection.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/DelegatingConnection.java Thu Jan 10 21:55:36 2013
@@ -91,18 +91,6 @@ public class DelegatingConnection extend
         _conn = c;
     }
 
-    /**
-     * Create a wrapper for the Connection which traces
-     * the Statements created so that any unclosed Statements
-     * can be closed when this Connection is closed.
-     *
-     * @param c the {@link Connection} to delegate all calls to.
-     * @param config the configuration for tracing abandoned objects
-     */
-    public DelegatingConnection(Connection c, AbandonedConfig config) {
-        super(config);
-        _conn = c;
-    }
 
     /**
      * Returns a string representation of the metadata associated with

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnection.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnection.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnection.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnection.java Thu Jan 10 21:55:36 2013
@@ -47,18 +47,6 @@ public class PoolableConnection extends 
         _pool = pool;
     }
 
-    /**
-     *
-     * @param conn my underlying connection
-     * @param pool the pool to which I should return when closed
-     * @param config the abandoned configuration settings
-     */
-    public PoolableConnection(Connection conn,
-            ObjectPool<PoolableConnection> pool, AbandonedConfig config) {
-        super(conn, config);
-        _pool = pool;
-    }
-
 
     /**
      * Returns me to my pool.

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java Thu Jan 10 21:55:36 2013
@@ -147,10 +147,6 @@ public class PoolableConnectionFactory
         _defaultCatalog = defaultCatalog;
     }
 
-    public void setAbandonedConfig(AbandonedConfig abandonedConfig) {
-        this._config = abandonedConfig;
-    }
-
     public void setCacheState(boolean cacheState) {
         this._cacheState = cacheState;
     }
@@ -194,7 +190,7 @@ public class PoolableConnectionFactory
             ((PoolingConnection)conn).setStatementPool(stmtPool);
             ((PoolingConnection) conn).setCacheState(_cacheState);
         }
-        return new PoolableConnection(conn,_pool,_config);
+        return new PoolableConnection(conn,_pool);
     }
 
     protected void initializeConnection(Connection conn) throws SQLException {
@@ -326,11 +322,6 @@ public class PoolableConnectionFactory
         GenericKeyedObjectPoolConfig.DEFAULT_MAX_TOTAL_PER_KEY;
 
     /**
-     * Configuration for removing abandoned connections.
-     */
-    protected AbandonedConfig _config = null;
-
-    /**
      * Internal constant to indicate the level is not set.
      */
     static final int UNKNOWN_TRANSACTIONISOLATION = -1;

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java Thu Jan 10 21:55:36 2013
@@ -17,7 +17,6 @@
  */
 package org.apache.commons.dbcp2.managed;
 
-import org.apache.commons.dbcp2.AbandonedConfig;
 import org.apache.commons.dbcp2.BasicDataSource;
 import org.apache.commons.dbcp2.ConnectionFactory;
 import org.apache.commons.dbcp2.PoolableConnectionFactory;
@@ -38,7 +37,7 @@ import java.sql.SQLException;
  * </p>
  * <p>BasicManagedDataSource adds the TransactionManager and XADataSource
  * properties.  The TransactionManager property is required and is
- * used to elist connections in global transactions.  The XADataSource
+ * used to enlist connections in global transactions.  The XADataSource
  * is optional and if set is the class name of the XADataSource class
  * for a two-phase-commit JDBC driver.  If the XADataSource property
  * is set, the driverClassName is ignored and a DataSourceXAConnectionFactory
@@ -179,8 +178,7 @@ public class BasicManagedDataSource exte
      */
     @Override
     protected PoolableConnectionFactory createPoolableConnectionFactory(
-            ConnectionFactory driverConnectionFactory,
-            AbandonedConfig abandonedConfig) throws SQLException {
+            ConnectionFactory driverConnectionFactory) throws SQLException {
         PoolableConnectionFactory connectionFactory = null;
         try {
             connectionFactory = new PoolableManagedConnectionFactory(
@@ -194,7 +192,6 @@ public class BasicManagedDataSource exte
             connectionFactory.setDefaultAutoCommit(defaultAutoCommit);
             connectionFactory.setDefaultTransactionIsolation(defaultTransactionIsolation);
             connectionFactory.setDefaultCatalog(defaultCatalog);
-            connectionFactory.setAbandonedConfig(abandonedConfig);
             connectionFactory.setPoolStatements(poolPreparedStatements);
             connectionFactory.setMaxOpenPrepatedStatements(
                     maxOpenPreparedStatements);

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java Thu Jan 10 21:55:36 2013
@@ -20,7 +20,6 @@ package org.apache.commons.dbcp2.managed
 import java.sql.Connection;
 import java.sql.SQLException;
 
-import org.apache.commons.dbcp2.AbandonedConfig;
 import org.apache.commons.dbcp2.PoolableConnection;
 import org.apache.commons.pool2.ObjectPool;
 
@@ -33,20 +32,6 @@ import org.apache.commons.pool2.ObjectPo
 public class PoolableManagedConnection extends PoolableConnection {
     private final TransactionRegistry transactionRegistry;
 
-    /**
-     * Create a PoolableManagedConnection.
-     * 
-     * @param transactionRegistry transaction registry 
-     * @param conn underlying connection
-     * @param pool connection pool
-     * @param config abandoned configuration settings
-     */
-    public PoolableManagedConnection(TransactionRegistry transactionRegistry,
-            Connection conn, ObjectPool<PoolableConnection> pool,
-            AbandonedConfig config) {
-        super(conn, pool, config);
-        this.transactionRegistry = transactionRegistry;
-    }
     
     /**
      * Create a PoolableManagedConnection.

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java Thu Jan 10 21:55:36 2013
@@ -75,8 +75,7 @@ public class PoolableManagedConnectionFa
             ((PoolingConnection)conn).setStatementPool(stmtPool);
             ((PoolingConnection) conn).setCacheState(_cacheState);
         }
-        return new PoolableManagedConnection(transactionRegistry, conn, _pool,
-                _config);
+        return new PoolableManagedConnection(transactionRegistry, conn, _pool);
     }
 
 }

Modified: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestAbandonedBasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestAbandonedBasicDataSource.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestAbandonedBasicDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestAbandonedBasicDataSource.java Thu Jan 10 21:55:36 2013
@@ -49,7 +49,8 @@ public class TestAbandonedBasicDataSourc
         // abandoned enabled but should not affect the basic tests
         // (very high timeout)
         ds.setLogAbandoned(true);
-        ds.setRemoveAbandoned(true);
+        ds.setRemoveAbandonedOnBorrow(true);
+        ds.setRemoveAbandonedOnMaintenance(true);
         ds.setRemoveAbandonedTimeout(10000);
     }
 

Modified: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java?rev=1431684&r1=1431683&r2=1431684&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java (original)
+++ commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java Thu Jan 10 21:55:36 2013
@@ -111,7 +111,8 @@ public class TestBasicDataSourceFactory 
         assertEquals(2, ds.getNumTestsPerEvictionRun());
         assertEquals(true, ds.getTestWhileIdle());
         assertEquals(true, ds.isAccessToUnderlyingConnectionAllowed());
-        assertEquals(true, ds.getRemoveAbandoned());
+        assertEquals(false, ds.getRemoveAbandonedOnBorrow());
+        assertEquals(false, ds.getRemoveAbandonedOnMaintenance());
         assertEquals(3000, ds.getRemoveAbandonedTimeout());
         assertEquals(true, ds.getLogAbandoned());
         assertEquals(true, ds.isPoolPreparedStatements());