You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/09/03 09:24:24 UTC
svn commit: r1839922 - in /tomcat/trunk:
java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
webapps/docs/changelog.xml webapps/docs/config/listeners.xml
webapps/docs/jndi-datasource-examples-howto.xml
Author: markt
Date: Mon Sep 3 09:24:24 2018
New Revision: 1839922
URL: http://svn.apache.org/viewvc?rev=1839922&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=62670
Adjust the memory leak protection for the DriverManager so that JDBC drivers located in $CATALINA_HOME/lib and $CATALINA_BASE/lib are loaded via the service loader mechanism when the protection is enabled.
Modified:
tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
tomcat/trunk/webapps/docs/changelog.xml
tomcat/trunk/webapps/docs/config/listeners.xml
tomcat/trunk/webapps/docs/jndi-datasource-examples-howto.xml
Modified: tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java?rev=1839922&r1=1839921&r2=1839922&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java Mon Sep 3 09:24:24 2018
@@ -197,6 +197,21 @@ public class JreMemoryLeakPreventionList
// Initialise these classes when Tomcat starts
if (Lifecycle.BEFORE_INIT_EVENT.equals(event.getType())) {
+ /*
+ * First call to this loads all drivers visible to the current class
+ * loader and its parents.
+ *
+ * Note: This is called before the context class loader is changed
+ * because we want any drivers located in CATALINA_HOME/lib
+ * and/or CATALINA_HOME/lib to be visible to DriverManager.
+ * Users wishing to avoid having JDBC drivers loaded by this
+ * class loader should add the JDBC driver(s) to the class
+ * path so they are loaded by the system class loader.
+ */
+ if (driverManagerProtection) {
+ DriverManager.getDrivers();
+ }
+
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try
@@ -206,14 +221,6 @@ public class JreMemoryLeakPreventionList
Thread.currentThread().setContextClassLoader(
ClassLoader.getSystemClassLoader());
- /*
- * First call to this loads all drivers in the current class
- * loader
- */
- if (driverManagerProtection) {
- DriverManager.getDrivers();
- }
-
// Trigger the creation of the AWT (AWT-Windows, AWT-XAWT,
// etc.) thread.
// Note this issue is fixed in Java 8 update 05 onwards.
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1839922&r1=1839921&r2=1839922&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Sep 3 09:24:24 2018
@@ -57,6 +57,13 @@
<code>@MultipartConfig</code> annotation regardless of HTTP method.
(markt)
</fix>
+ <fix>
+ <bug>62670</bug>: Adjust the memory leak protection for the
+ <code>DriverManager</code> so that JDBC drivers located in
+ <code>$CATALINA_HOME/lib</code> and <code>$CATALINA_BASE/lib</code> are
+ loaded via the service loader mechanism when the protection is enabled.
+ (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
Modified: tomcat/trunk/webapps/docs/config/listeners.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/listeners.xml?rev=1839922&r1=1839921&r2=1839922&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/listeners.xml (original)
+++ tomcat/trunk/webapps/docs/config/listeners.xml Mon Sep 3 09:24:24 2018
@@ -199,10 +199,10 @@
<attribute name="driverManagerProtection" required="false">
<p>The first use of <code>java.sql.DriverManager</code> will trigger the
- loading of JDBC Driver in 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 <code>true</code>.</p>
+ loading of JDBC Drivers visible to the current class loader and its
+ parents. 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 <code>true</code>.</p>
</attribute>
<attribute name="forkJoinCommonPoolProtection" required="false">
Modified: tomcat/trunk/webapps/docs/jndi-datasource-examples-howto.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/jndi-datasource-examples-howto.xml?rev=1839922&r1=1839921&r2=1839922&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/jndi-datasource-examples-howto.xml (original)
+++ tomcat/trunk/webapps/docs/jndi-datasource-examples-howto.xml Mon Sep 3 09:24:24 2018
@@ -83,14 +83,17 @@ a servlet container environment. The pro
<code>java.sql.DriverManager</code> will scan for the drivers only once.</p>
<p>The <a href="config/listeners.html">JRE Memory Leak Prevention Listener</a>
-that is included with Apache Tomcat solves this by triggering the drivers scan
+that is included with Apache Tomcat solves this by triggering the driver scan
during Tomcat startup. This is enabled by default. It means that only
-libraries visible to the listener such as the ones in
-<code>$CATALINA_BASE/lib</code> will be scanned for database drivers.
-If you are considering disabling this feature, note that
-the scan would be triggered by the first web application that is
-using JDBC, leading to failures when this web application is reloaded
-and for other web applications that rely on this feature.
+libraries visible to the common class loader and its parents will be scanned for
+database drivers. This include drivers in <code>$CATALINA_HOME/lib</code>,
+<code>$CATALINA_BASE/lib</code>, the class path and (where the JRE supports it)
+the endorsed directory. Drivers packaged in web applications (in
+<code>WEB-INF/lib</code>) and in the shared class loader (where configured) will
+not be visible and will not be loaded automatically. If you are considering
+disabling this feature, note that the scan would be triggered by the first web
+application that is using JDBC, leading to failures when this web application is
+reloaded and for other web applications that rely on this feature.
</p>
<p>Thus, the web applications that have database drivers in their
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org