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 2009/02/18 19:30:14 UTC

svn commit: r745594 - in /commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp: BasicDataSource.java cpdsadapter/DriverAdapterCPDS.java

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