Hi,

we are using a third party JAR which is about 35MB in size but is packed
with many many obfuscated classes. Due to the nature of the functionality
it loads classes all the time from the JAR file . I'm finding that will it
loads the class the other threads which want to load classes get blocked.
This is a typical stack trace:

   java.lang.Thread.State: RUNNABLE
        at java.util.Hashtable.hash(Hashtable.java:239)
        at java.util.Hashtable.get(Hashtable.java:434)
        - locked <0x00000007b0a61108> (a java.util.Hashtable)
        at
sun.security.util.SignatureFileVerifier.updateSigners(SignatureFileVerifier.java:670)
        at
sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:259)
        at
sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:193)
        at java.util.jar.JarVerifier.processEntry(JarVerifier.java:307)
        at java.util.jar.JarVerifier.update(JarVerifier.java:218)
        at java.util.jar.JarFile.initializeVerifier(JarFile.java:345)
        at java.util.jar.JarFile.getInputStream(JarFile.java:412)
        - locked <0x00000007af3475b0> (a java.util.jar.JarFile)
        at
org.apache.catalina.webresources.JarResource.getJarInputStreamWrapper(JarResource.java:50)
        at
org.apache.catalina.webresources.AbstractArchiveResource.getContent(AbstractArchiveResource.java:175)
        at
org.apache.catalina.loader.WebappClassLoaderBase.findResourceInternal(WebappClassLoaderBase.java:2579)
        at
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2405)
        at
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854)
        at
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274)
        - locked <0x00000007af33f8e8> (a java.lang.Object)
        at
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
        at com.aspose.slides.p2cbca448.knx.for(Unknown Source)
        at com.aspose.slides.p2cbca448.knx.do(Unknown Source)


It seems all the time is spent in the SignatureFileVerifier part - is there
any way to stop the class loader doing this and thus speed up the class
loading?

I also tried configuring the ParallelWebappClassLoader which is configured
but doesn't seem to come into play for this. I tested by doing:

conf/Catalina/localhost/test.xml:
<Context>
   <Loader
loaderClass="org.apache.catalina.loader.ParallelWebappClassLoader" />
</Context>

and webapps/test/index.jsp:
ClassLoader: <%= this.getClass().getClassLoader().getParent() %>

which gives me (when accessed at test/index.jsp):
ClassLoader: ParallelWebappClassLoader context: test delegate: false
----------> Parent Classloader: java.net.URLClassLoader@264a1535


(Tomcat 8.0.18)

Reply via email to