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 2014/03/23 21:33:14 UTC

svn commit: r1580598 - in /tomcat/trunk: java/org/apache/catalina/loader/WebappClassLoader.java webapps/docs/changelog.xml

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: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r1580598 - in /tomcat/trunk: java/org/apache/catalina/loader/WebappClassLoader.java webapps/docs/changelog.xml

Posted by Mark Thomas <ma...@apache.org>.
On 23/03/2014 20:57, Cyril Bonté wrote:
> Hi again,
> 
> Le 23/03/2014 21:48, Cyril Bonté a écrit :> Hi Mark,
>>
>> Le 23/03/2014 21:33, markt@apache.org a écrit :
>>>       private static final String CLASS_FILE_SUFFIX = ".class";
>>> +    private static final String SERVIVES_PREFIX =
> "/META-INF/services/";
>>
>> Warning, a typo is introduced in the constant name.
>> SERVIVES instead of SERVICES.
> 
> It appears that another typo was added from a previous commit.
> See below :
> 
>> ---
> 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";
> 
> 
> I assume it should be JVM_THREAD_GROUP_SYSTEM.
> 
> Hope this helps.

It does. Many thanks. I've just fixed these.

Mark


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


Re: svn commit: r1580598 - in /tomcat/trunk: java/org/apache/catalina/loader/WebappClassLoader.java webapps/docs/changelog.xml

Posted by Cyril Bonté <cy...@free.fr>.
Hi again,

Le 23/03/2014 21:48, Cyril Bonté a écrit :> Hi Mark,
 >
 > Le 23/03/2014 21:33, markt@apache.org a écrit :
 >>       private static final String CLASS_FILE_SUFFIX = ".class";
 >> +    private static final String SERVIVES_PREFIX = 
"/META-INF/services/";
 >
 > Warning, a typo is introduced in the constant name.
 > SERVIVES instead of SERVICES.

It appears that another typo was added from a previous commit.
See below :

 > --- 
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";


I assume it should be JVM_THREAD_GROUP_SYSTEM.

Hope this helps.

-- 
Cyril Bonté

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


Re: svn commit: r1580598 - in /tomcat/trunk: java/org/apache/catalina/loader/WebappClassLoader.java webapps/docs/changelog.xml

Posted by Cyril Bonté <cy...@free.fr>.
Hi Mark,

Le 23/03/2014 21:33, markt@apache.org a écrit :
>       private static final String CLASS_FILE_SUFFIX = ".class";
> +    private static final String SERVIVES_PREFIX = "/META-INF/services/";

Warning, a typo is introduced in the constant name.
SERVIVES instead of SERVICES.

-- 
Cyril Bonté

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