I am using Jersey client 2.12 within a web service implemented with Jersey
server 2.12.
It seems to me that Jersey client does a lot of stuff every time you make a
request, below is a stack trace I was able to capture (Java 7, Jetty 9.2.2).
Is it really necessary to do class loading each time you make a request?
Cannot this be cached somehow?
"qtp330351192-115" prio=10 tid=0x00007f36f8003800 nid=0x321b runnable
[0x00007f36b9cd8000]
java.lang.Thread.State: RUNNABLE
at java.util.zip.ZipFile.freeEntry(Native Method)
at java.util.zip.ZipFile.access$1000(ZipFile.java:56)
at java.util.zip.ZipFile$1.nextElement(ZipFile.java:514)
- locked <0x00000000c007d808> (a java.util.jar.JarFile)
at java.util.zip.ZipFile$1.nextElement(ZipFile.java:483)
at java.util.jar.JarFile$1.nextElement(JarFile.java:244)
at java.util.jar.JarFile$1.nextElement(JarFile.java:239)
at sun.misc.URLClassPath$JarLoader.validIndex(URLClassPath.java:803)
at
sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:937)
at
sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:848)
at
sun.misc.URLClassPath$JarLoader.findResource(URLClassPath.java:818)
at sun.misc.URLClassPath$1.next(URLClassPath.java:226)
at sun.misc.URLClassPath$1.hasMoreElements(URLClassPath.java:236)
at java.net.URLClassLoader$3$1.run(URLClassLoader.java:583)
at java.net.URLClassLoader$3$1.run(URLClassLoader.java:581)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader$3.next(URLClassLoader.java:580)
at
java.net.URLClassLoader$3.hasMoreElements(URLClassLoader.java:605)
at java.util.Collections.list(Collections.java:3687)
at
org.eclipse.jetty.webapp.WebAppClassLoader.toList(WebAppClassLoader.java:336)
at
org.eclipse.jetty.webapp.WebAppClassLoader.getResources(WebAppClassLoader.java:320)
at
org.glassfish.jersey.internal.ServiceFinder.getResources(ServiceFinder.java:180)
at
org.glassfish.jersey.internal.ServiceFinder.access$200(ServiceFinder.java:155)
at
org.glassfish.jersey.internal.ServiceFinder$AbstractLazyIterator.setConfigs(ServiceFinder.java:552)
at
org.glassfish.jersey.internal.ServiceFinder$AbstractLazyIterator.hasNext(ServiceFinder.java:563)
at
org.glassfish.jersey.internal.ServiceFinder.toClassArray(ServiceFinder.java:416)
at
org.glassfish.jersey.internal.ServiceFinderBinder.configure(ServiceFinderBinder.java:90)
at
org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
at
org.glassfish.hk2.utilities.binding.AbstractBinder.install(AbstractBinder.java:329)
at
org.glassfish.jersey.message.internal.MessagingBinders$MessageBodyProviders.configure(MessagingBinders.java:137)
at
org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
at
org.glassfish.hk2.utilities.binding.AbstractBinder.install(AbstractBinder.java:329)
at
org.glassfish.jersey.client.ClientBinder.configure(ClientBinder.java:116)
at
org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
at
org.glassfish.jersey.internal.inject.Injections.bind(Injections.java:154)
at
org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:144)
at
org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:133)
at
org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:384)
at
org.glassfish.jersey.client.ClientConfig$State.access$000(ClientConfig.java:86)
at
org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:118)
at
org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:115)
at
org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:322)
- locked <0x00000000f6ac1370> (a java.lang.Object)
at
org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:721)
at
org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:284)
at
org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:125)
at
org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:98)
at
org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:91)
at
org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:399)
at
org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:303)
--
Mikael Ståldal
Chief Software Architect
*Appear*
Phone: +46 8 545 91 572
Email: mikael.staldal_at_appearnetworks.com