[
https://issues.apache.org/jira/browse/DBCP-332?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12861774#action_12861774
]
Grzegorz Borkowski commented on DBCP-332:
-----------------------------------------
If they all use the same classloader, than probably yes, this could cause the
problem - it needs verification, but it sounds logical. If that's the case,
than it would be better to make this behavior optional. So add the method
"deregisterDriver" to BasicDataSource so that I can call it from some listener
programatically. Also, add settings "deregisterDriverOnClose", so that I can
set up BasicDataSource, for example in Spring, with this option set to true, so
that it dergisters the driver automatically, and I don't have to write any
code, only by pure configuration.
> Closing BasicDataSource doesn't deregister JDBC driver, causing memory leak
> ---------------------------------------------------------------------------
>
> Key: DBCP-332
> URL: https://issues.apache.org/jira/browse/DBCP-332
> Project: Commons Dbcp
> Issue Type: Bug
> Affects Versions: 1.3, 1.4
> Reporter: Grzegorz Borkowski
> Fix For: 1.3.1, 1.4.1
>
>
> BasicDataSource's method close() doesn't deregister JDBC driver. This causes
> permgen memory leaks in web server environments, during context reloads. For
> example, using Tomcat 6.0.26 with Spring, and BasicDataSource declared in
> Spring context, there is a message printed at web application reload:
> SEVERE: A web application registered the JBDC driver [com.mysql.jdbc.Driver]
> but failed to unregister it when the web application was stopped. To prevent
> a memory leak, the JDBC Driver has been forcibly unregistered.
> I was able to fix it by overriding close method this way:
> {code}
> public class XBasicDataSource extends BasicDataSource {
> @Override
> public synchronized void close() throws SQLException {
> DriverManager.deregisterDriver(DriverManager.getDriver(url));
> super.close();
> }
> }
> {code}
> but I think it should be probably the default behavior of BasicDataSource. Or
> perhaps there should be some flag/setting on BasicDataSource, named
> "deregisterDriverAtClose" or so.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.