Author: markt Date: Wed Feb 18 18:30:14 2009 New Revision: 745594 URL: http://svn.apache.org/viewvc?rev=745594&view=rev Log: Attempt to address DBCP-272. We can never truely fix this since the way drivers are expected to register with the DriverManager is asking for a deadlock to occur in multi-thread environments - as per DBCP-272. What we can do is attempt to prevent this in environments where only DBCP is used. This patch calls DriverManager.getDrivers() to force initialisation before we ever do anything that might use Class.forName() to load (and register) a JDBC driver.
Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/cpdsadapter/DriverAdapterCPDS.java Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java?rev=745594&r1=745593&r2=745594&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java (original) +++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/BasicDataSource.java Wed Feb 18 18:30:14 2009 @@ -42,6 +42,11 @@ * @version $Revision$ $Date$ */ public class BasicDataSource implements DataSource { + + static { + // Attempt to prevent deadlocks - see DBCP - 272 + DriverManager.getDrivers(); + } // ------------------------------------------------------------- Properties Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/cpdsadapter/DriverAdapterCPDS.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/cpdsadapter/DriverAdapterCPDS.java?rev=745594&r1=745593&r2=745594&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/cpdsadapter/DriverAdapterCPDS.java (original) +++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp/cpdsadapter/DriverAdapterCPDS.java Wed Feb 18 18:30:14 2009 @@ -118,6 +118,11 @@ private boolean getConnectionCalled = false; + static { + // Attempt to prevent deadlocks - see DBCP - 272 + DriverManager.getDrivers(); + } + /** * Default no-arg constructor for Serialization */