Author: markt
Date: Sun Mar 23 20:33:13 2014
New Revision: 1580598
URL: http://svn.apache.org/r1580598
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56293
Cache resources loaded by the class loader from /META-INF/services/ for better
performance for repeated look ups.
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1580598&r1=1580597&r2=1580598&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Sun Mar
23 20:33:13 2014
@@ -136,6 +136,7 @@ public class WebappClassLoader extends U
private static final String JVN_THREAD_GROUP_SYSTEM = "system";
private static final String CLASS_FILE_SUFFIX = ".class";
+ private static final String SERVIVES_PREFIX = "/META-INF/services/";
static {
JVM_THREAD_GROUP_NAMES.add(JVN_THREAD_GROUP_SYSTEM);
@@ -2537,6 +2538,10 @@ public class WebappClassLoader extends U
}
boolean isClassResource = path.endsWith(CLASS_FILE_SUFFIX);
+ boolean isCacheable = isClassResource;
+ if (!isCacheable) {
+ isCacheable = path.startsWith(SERVIVES_PREFIX);
+ }
WebResource resource = null;
@@ -2558,18 +2563,21 @@ public class WebappClassLoader extends U
}
/* Only cache the binary content if there is some content
- * available and either:
+ * available one of the following is true:
* a) It is a class file since the binary content is only cached
* until the class has been loaded
* or
* b) The file needs conversion to address encoding issues (see
* below)
+ * or
+ * c) The resource is a service provider configuration file located
+ * under META=INF/services
*
* In all other cases do not cache the content to prevent
* excessive memory usage if large resources are present (see
* https://issues.apache.org/bugzilla/show_bug.cgi?id=53081).
*/
- if (isClassResource || fileNeedConvert) {
+ if (isCacheable || fileNeedConvert) {
byte[] binaryContent = resource.getContent();
if (binaryContent != null) {
if (fileNeedConvert) {
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1580598&r1=1580597&r2=1580598&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Sun Mar 23 20:33:13 2014
@@ -55,6 +55,11 @@
Allow web applications to package tomcat-jdbc.jar and their JDBC driver
of choice in the web application. (markt)
</fix>
+ <fix>
+ <bug>56293</bug>: Cache resources loaded by the class loader from
+ <code>/META-INF/services/</code> for better performance for repeated
+ look ups. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]