https://bz.apache.org/bugzilla/show_bug.cgi?id=62713

            Bug ID: 62713
           Summary: caching of classes/statics doesn't work
           Product: Tomcat 8
           Version: 8.5.32
          Hardware: PC
            Status: NEW
          Severity: critical
          Priority: P2
         Component: Jasper
          Assignee: dev@tomcat.apache.org
          Reporter: eseve...@novomind.com
  Target Milestone: ----

The method resolveClass of class ImportHandler uses a cache named "clazzes".
This cache is useless since during every jsp evaluation a bunch of instances of
class ImportHandler were created and every instance has its own cache.

The result is that on all our live shop systems with tomcat 8 (e-commerce
applications) we see blocked threads due to concurrent calls to class loader
getResource.


   java.lang.Thread.State: BLOCKED (on object monitor)
        at java.util.zip.ZipFile.getEntry(ZipFile.java:314)
        - waiting to lock <0x00000003ee5ab130> (a java.util.jar.JarFile)
        at java.util.jar.JarFile.getEntry(JarFile.java:240)
        at java.util.jar.JarFile.getJarEntry(JarFile.java:223)
        at
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:97)
        at
org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:272)
        at
org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
        at org.apache.catalina.webresources.Cache.getResource(Cache.java:62)
        at
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
        at
org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
        at
org.apache.catalina.loader.WebappClassLoaderBase.findResource(WebappClassLoaderBase.java:902)
        at
org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1023)
        at javax.el.ImportHandler.findClass(ImportHandler.java:202)
        at javax.el.ImportHandler.resolveClass(ImportHandler.java:164)
        at
javax.servlet.jsp.el.ScopedAttributeELResolver.getValue(ScopedAttributeELResolver.java:85)
        at
org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110)
        at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:94)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:137)
        at
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
        at
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:944)

simple example to show the wrong behaviour:

use a local tomcat and a single jsp containing an undefined expression, e.g.:
${a.b}

At every execution of this jsp the ImportHandler tries to find a class named
"a" with the resource loader and the cache is empty.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to