From bc416fc23d32536d94c0fe5f53db6e3879bbc3ad Mon Sep 17 00:00:00 2001
From: markt com.sun.jndi.ldap.LdapPoolManager class spawns a thread when it
- * is initialized if the system property
+ * com.sun.jndi.ldap.LdapPoolManager class spawns a thread when
+ * it is initialized if the system property
* com.sun.jndi.ldap.connect.pool.timeout is greater than 0.
* That thread inherits the context class loader of the current thread, so
* that there may be a web application class loader leak if the web app
@@ -162,7 +163,21 @@ public class JreMemoryLeakPreventionListener implements LifecycleListener {
public void setLdapPoolProtection(boolean ldapPoolProtection) {
this.ldapPoolProtection = ldapPoolProtection;
}
-
+
+ /**
+ * The first access to {@link DriverManager} will trigger the loading of
+ * all {@link java.sql.Driver}s in the the current class loader. The web
+ * application level memory leak protection can take care of this in most
+ * cases but triggering the loading here has fewer side-effects.
+ */
+ private boolean driverManagerProtection = true;
+ public boolean isDriverManagerProtection() {
+ return driverManagerProtection;
+ }
+ public void setDriverManagerProtection(boolean driverManagerProtection) {
+ this.driverManagerProtection = driverManagerProtection;
+ }
+
@Override
public void lifecycleEvent(LifecycleEvent event) {
// Initialise these classes when Tomcat starts
@@ -178,6 +193,14 @@ public class JreMemoryLeakPreventionListener implements LifecycleListener {
ClassLoader.getSystemClassLoader());
/*
+ * First call to this loads all drivers in the current class
+ * loader
+ */
+ if (driverManagerProtection) {
+ DriverManager.getDrivers();
+ }
+
+ /*
* Several components end up calling:
* sun.awt.AppContext.getAppContext()
*
diff --git a/webapps/docs/config/listeners.xml b/webapps/docs/config/listeners.xml
index 8b50f6147..207a5f150 100644
--- a/webapps/docs/config/listeners.xml
+++ b/webapps/docs/config/listeners.xml
@@ -174,6 +174,14 @@
is true.
The first use of java.sql.DriverManager will trigger the
+ loading of JDBNC Driver in the the current class loader. The web
+ application level memory leak protection can take care of this in most
+ cases but triggering the loading here has fewer side-effects. The
+ default is true
Enables protection so that calls to
sun.misc.GC.requestLatency(long) triggered by a web
--
2.11.0