tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 51640] clearReferencesJdbc seems to be causing leaks with com.oracle.ojdbc5 driver
Date Wed, 10 Aug 2011 13:42:42 GMT
https://issues.apache.org/bugzilla/show_bug.cgi?id=51640

Mark Thomas <markt@apache.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED

--- Comment #1 from Mark Thomas <markt@apache.org> 2011-08-10 13:42:42 UTC ---
clearReferencesJdbc should not (and does not) leave any JDBC drivers loaded.

However, clearReferencesJdbc uses DriverManager to see what JDBC drivers are
currently loaded. Unfortunately, the first ever call to DriverManager has the
side-effect that any JDBC drivers in the current class loader will also be
loaded. clearReferencesJdbc does ensure that any Driver loaded that way is
immediately unloaded but when the Oracle driver is loaded it also creates the
MBean and that triggers the leak.

The automatic creation of the MBean on driver load looks like a bug to me since
there is no way for that MBean to be automatically destroyed when the Driver is
unloaded. To my mind these things should be symmetric. You load the driver, you
unload the driver. The MBean is automatically created, it should be
automatically destroyed. Neither DriverManager nor Oracle's JDBC driver appear
to follow this principle. Sigh.

What I also realised while looking at this is that only the first web
application to use DriverManager will have it's JDBC drivers automatically
loaded (since initialised is a static in DriverManager). That could lead to an
application working or not working depending on application start order.

It looks like the best way to fix both issues is to call
DriverManager.getDrivers() from the JreMemoryLeakPreventionListener. That fixes
the problem described here and ensures that web application behaviour will be
consistent regardless of start order and usage of DriverManager.

Note that even with this fix, if you use that Driver in a web application you
will get a leak caused by the creation of the MBean.

This has been fixed in trunk and 7.0.x and will be included in 7.0.21 onwards.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message