Details
-
Type:
Improvement
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 8.1.3
-
Fix Version/s: None
-
Component/s: None
-
Labels:None
-
Number of attachments :
Description
when using Resource}}s in Jars, performance of {{Resource#exists could be much improved if classes used by WebAppContext would not open up the Jar for each lookup.
java.lang.Thread.State: RUNNABLE
at java.io.UnixFileSystem.getLastModifiedTime(Native Method)
at java.io.File.lastModified(File.java:826)
at java.util.zip.ZipFile.<init>(ZipFile.java:127)
at java.util.jar.JarFile.<init>(JarFile.java:135)
at java.util.jar.JarFile.<init>(JarFile.java:72)
at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:72)
at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:48)
at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:70)
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
at org.eclipse.jetty.util.resource.JarFileResource.exists(JarFileResource.java:150)
at org.eclipse.jetty.util.resource.ResourceCollection.addPath(ResourceCollection.java:203)
at org.eclipse.jetty.server.handler.ContextHandler.getResource(ContextHandler.java:1524)
at org.eclipse.jetty.webapp.WebAppContext.getResource(WebAppContext.java:320)
at org.mortbay.jetty.plugin.JettyWebAppContext.getResource(JettyWebAppContext.java:272)
at org.eclipse.jetty.webapp.WebAppContext$Context.getResource(WebAppContext.java:1231)
at org.springframework.web.context.support.ServletContextResource.exists(ServletContextResource.java:102)
For example, Tomcat 7's lookups are much faster, the threaddump looks like this:
java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$Start.match(Pattern.java:3055) at java.util.regex.Matcher.search(Matcher.java:1105) at java.util.regex.Matcher.find(Matcher.java:535) at java.util.regex.Matcher.replaceAll(Matcher.java:809) at java.lang.String.replace(String.java:2207) at org.apache.naming.resources.WARDirContext.getEscapedJndiName(WARDirContext.java:230) at org.apache.naming.resources.WARDirContext.doGetAttributes(WARDirContext.java:441) at org.apache.naming.resources.BaseDirContext.getAttributes(BaseDirContext.java:1097) at org.apache.naming.resources.BaseDirContext.getAttributes(BaseDirContext.java:1042) at org.apache.naming.resources.ProxyDirContext.cacheLoad(ProxyDirContext.java:1613) at org.apache.naming.resources.ProxyDirContext.cacheLookup(ProxyDirContext.java:1536) at org.apache.naming.resources.ProxyDirContext.lookup(ProxyDirContext.java:297) at org.apache.catalina.core.ApplicationContext.getResource(ApplicationContext.java:538) at org.apache.catalina.core.ApplicationContextFacade.getResource(ApplicationContextFacade.java:201) at org.springframework.web.context.support.ServletContextResource.exists(ServletContextResource.java:102)