Contention for DriverManager when initializing multiple datasources 
--------------------------------------------------------------------

                 Key: DBCP-272
                 URL: https://issues.apache.org/jira/browse/DBCP-272
             Project: Commons Dbcp
          Issue Type: Bug
    Affects Versions: 1.2.2
         Environment: Java HotSpot(TM) 64-Bit Server VM (1.6.0-b105 mixed mode) 
on Linux
            Reporter: Adrian Woodhead


This issue has been discussed in the commons user's mailing list between 
myself, Simon Kitching and Phil Steitz. 

In summary:

I have a webapp deployed in tomcat containing 3 pooled datasources which are 
managed by Spring. The webapp starts up OK and is immediately hit by a load of 
a few hundred requests a second. It seems to handle a few hundred request and 
then just locks up entirely and stops responding entirely. Attached is a stack 
trace obtained by doing kill -3 when in this state. After discussion on the 
mailing list I changed the datasources to be non-lazy initialised in spring but 
the issue still occurs. 

Simon Kitching said:
"The first thread is trying to initialise a postgresql driver and register it 
with DriverManager. The driver registration is being triggered from a static 
initialiser block on the postgresql driver class, so is executing from within 
the Class.forName method (and therefore the postgresql driver Class object is 
locked by this thread).

The second thread is trying to initialise a mysql driver and register it with 
DriverManager. Again, the driver registration is being triggered from a static 
initialiser block on the mysql driver class, so the mysql driver Class object 
is locked by this thread).

But in both cases, the DriverManager needs to be initialised before anything 
can be registered. The first thread appears to have run first, triggering the 
initialisation process, and the second thread is blocked waiting for 
initialisation of DriverManager to complete before it registers the mysql 
driver. 

<snip/>

Possibly dbcp should call DriverManager.getDrivers() internally on startup to 
avoid this race... "





-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to