You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2011/04/25 19:58:19 UTC
svn commit: r1096543 - in
/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src: changes/changes.xml
java/org/apache/commons/dbcp/BasicDataSource.java
test/org/apache/commons/dbcp/TestBasicDataSource.java
test/org/apache/commons/dbcp/TesterClassLoader.java
Author: psteitz
Date: Mon Apr 25 17:58:19 2011
New Revision: 1096543
URL: http://svn.apache.org/viewvc?rev=1096543&view=rev
Log:
Backported fix for DBCP-333. JIRA: DBCP-333.
Added:
commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/test/org/apache/commons/dbcp/TesterClassLoader.java
- copied unchanged from r1096214, commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TesterClassLoader.java
Modified:
commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/changes/changes.xml
commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/java/org/apache/commons/dbcp/BasicDataSource.java
commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/test/org/apache/commons/dbcp/TestBasicDataSource.java
Modified: commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/changes/changes.xml?rev=1096543&r1=1096542&r2=1096543&view=diff
==============================================================================
--- commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/changes/changes.xml (original)
+++ commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/changes/changes.xml Mon Apr 25 17:58:19 2011
@@ -50,6 +50,10 @@ The <action> type attribute can be add,u
a statement is used, the lastUsed property of its parent connection is
updated.
</action>
+ <action dev="markt" issue="DBCP-333" type="fix">
+ Correctly implemented the option to configure the class loader used to load
+ the JDBC driver.
+ </action>
<action dev="psteitz" issue="DBCP-346" type="update" due-to="Ken Tatsushita">
LIFO configuration option has been added to BasicDataSource. When set
to true (the default), the pool acts as a LIFO queue; setting to false
Modified: commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/java/org/apache/commons/dbcp/BasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/java/org/apache/commons/dbcp/BasicDataSource.java?rev=1096543&r1=1096542&r2=1096543&view=diff
==============================================================================
--- commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/java/org/apache/commons/dbcp/BasicDataSource.java (original)
+++ commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/java/org/apache/commons/dbcp/BasicDataSource.java Mon Apr 25 17:58:19 2011
@@ -287,7 +287,7 @@ public class BasicDataSource implements
*
*/
public synchronized void setLifo(boolean lifo) {
- this.lifo = lifo;
+ this.lifo = lifo;
if (connectionPool != null) {
connectionPool.setLifo(lifo);
}
@@ -1475,8 +1475,20 @@ public class BasicDataSource implements
}
/**
- * Creates a JDBC connection factory for this datasource. This method only
- * exists so subclasses can replace the implementation class.
+ * Creates a JDBC connection factory for this datasource. The JDBC driver
+ * is loaded using the following algorithm:
+ * <ol>
+ * <li>If {@link #driverClassName} is specified that class is loaded using
+ * the {@link ClassLoader} of this class or, if {@link #driverClassLoader}
+ * is set, {@link #driverClassName} is loaded with the specified
+ * {@link ClassLoader}.</li>
+ * <li>If {@link #driverClassName} is specified and the previous attempt
+ * fails, the class is loaded using the context class loader of the current
+ * thread.</li>
+ * <li>If a driver still isn't loaded one is loaded via the
+ * {@link DriverManager} using the specified {@link #url}.
+ * </ol>
+ * This method exists so subclasses can replace the implementation class.
*/
protected ConnectionFactory createConnectionFactory() throws SQLException {
// Load the JDBC driver class
@@ -1485,9 +1497,10 @@ public class BasicDataSource implements
try {
try {
if (driverClassLoader == null) {
- Class.forName(driverClassName);
+ driverFromCCL = Class.forName(driverClassName);
} else {
- Class.forName(driverClassName, true, driverClassLoader);
+ driverFromCCL = Class.forName(
+ driverClassName, true, driverClassLoader);
}
} catch (ClassNotFoundException cnfe) {
driverFromCCL = Thread.currentThread(
Modified: commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/test/org/apache/commons/dbcp/TestBasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/test/org/apache/commons/dbcp/TestBasicDataSource.java?rev=1096543&r1=1096542&r2=1096543&view=diff
==============================================================================
--- commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/test/org/apache/commons/dbcp/TestBasicDataSource.java (original)
+++ commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH/src/test/org/apache/commons/dbcp/TestBasicDataSource.java Mon Apr 25 17:58:19 2011
@@ -62,6 +62,7 @@ public class TestBasicDataSource extends
ds.setPassword("password");
ds.setValidationQuery("SELECT DUMMY FROM DUAL");
ds.setConnectionInitSqls(Arrays.asList(new String[] { "SELECT 1", "SELECT 2"}));
+ ds.setDriverClassLoader(new TesterClassLoader());
}
protected BasicDataSource createDataSource() throws Exception {
@@ -500,4 +501,16 @@ public class TestBasicDataSource extends
// Allow one extra thread for JRockit compatibility
assertTrue(Thread.activeCount() <= threadCount + 1);
}
+
+ /**
+ * JIRA DBCP-333: Check that a custom class loader is used.
+ * @throws Exception
+ */
+ public void testDriverClassLoader() throws Exception {
+ getConnection();
+ ClassLoader cl = ds.getDriverClassLoader();
+ assertNotNull(cl);
+ assertTrue(cl instanceof TesterClassLoader);
+ assertTrue(((TesterClassLoader) cl).didLoad(ds.getDriverClassName()));
+ }
}