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
      */


Reply via email to