-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Sebastien,

On 5/14/14, 12:58 PM, Sebastien Tardif wrote:
> I'm having some visible performance issue related to the use of 
> method synchronized loadClass(String name, boolean resolve) in 
> WebappClassLoader

Are you loading huge numbers of (distinct) classes over a long period
of time? I wouldn't expect loadClass() to be called very much on a
stable application.

> I see that the author or least some of the author(s) of the class 
> got the idea in other cases of a more specialize lock that against 
> the entire instance.

Examples? The loadClass(String,boolean) method pretty much needs to be
synchronized from start to finish. Perhaps you are right that the
first few lines of he method need not be synchronized, but everything
else does because it will modify the internal state of the class
loader, which is otherwise not thread-safe.

> Should we just lock here using the name of the class we are looking
> for?

Do you mean like synchronized("my class's name")? That won't work, as
the string object you choose to use as a monitor might not be the one
that is being used by other code. Interning strings is quaint, but it
still doesn't solve the problem: the internal state of the ClassLoader
will be modified and it's dangerous to remove synchronization from it.

> My partial threads stack dump:
> 
> 2014-05-14 12:36:01 Full thread dump Java HotSpot(TM) 64-Bit Server
> VM (20.45-b01 mixed mode):
> 
> "http-bio-31680-exec-57" - Thread t@124 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> ... "http-bio-31680-exec-56" - Thread t@123 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
>  "http-bio-31680-exec-55" - Thread t@122 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
>  Locked ownable synchronizers: - locked <444b3957> (a
> java.util.concurrent.locks.ReentrantLock$NonfairSync)
> 
> "http-bio-31680-exec-54" - Thread t@121 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
>  "http-bio-31680-exec-53" - Thread t@120 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
>  "http-bio-31680-exec-52" - Thread t@119 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
>  "http-bio-31680-exec-51" - Thread t@118 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
>  "http-bio-31680-exec-50" - Thread t@117 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> 
> 
> "http-bio-31680-exec-49" - Thread t@116 java.lang.Thread.State:
> RUNNABLE at java.lang.Class.getClassLoader0(Native Method) at
> java.lang.Class.getClassLoader(Class.java:589) at
> com.sun.xml.internal.bind.v2.model.annotation.LocatableAnnotation.create(LocatableAnnotation.java:63)
>
> 
at
com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllFieldAnnotations(RuntimeInlineAnnotationReader.java:60)
> at
> com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllFieldAnnotations(RuntimeInlineAnnotationReader.java:42)
>
>  "http-bio-31680-exec-48" - Thread t@115 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481)
>  "http-bio-31680-exec-47" - Thread t@114 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
>  "http-bio-31680-exec-46" - Thread t@113 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
>  "http-bio-31680-exec-45" - Thread t@112 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> at
> com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47)
>
> 
> 
> "http-bio-31680-exec-44" - Thread t@111 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
> at
> com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
>
> 
> 
> "http-bio-31680-exec-43" - Thread t@110 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
> 
> 
> "http-bio-31680-exec-42" - Thread t@109 java.lang.Thread.State:
> TIMED_WAITING at sun.misc.Unsafe.park(Native Method) - parking to
> wait for <2aa68578> (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>
> 
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
>
> 
at
java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424)
> at
> org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86) at
> org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) at
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:955)
>
> 
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
> at java.lang.Thread.run(Thread.java:662)
> 
> Locked ownable synchronizers: - None
> 
> "http-bio-31680-exec-40" - Thread t@107 java.lang.Thread.State:
> TIMED_WAITING at sun.misc.Unsafe.park(Native Method) - parking to
> wait for <2aa68578> (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>
> 
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
>
> 
at
java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424)
> at
> org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86) at
> org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) at
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:955)
>
> 
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
> at java.lang.Thread.run(Thread.java:662)
> 
> Locked ownable synchronizers: - None
> 
> "http-bio-31680-exec-39" - Thread t@106 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
> 
> 
> "http-bio-31680-exec-38" - Thread t@105 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
> at
> javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154)
>
> 
at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:241)
> 
> 
> "http-bio-31680-exec-37" - Thread t@104 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> at
> com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47)
>
> 
at
com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.loadObjectFactory(ModelBuilder.java:249)
> 
> 
> "http-bio-31680-exec-36" - Thread t@103 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
> at
> com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:289)
> 
> 
> "http-bio-31680-exec-35" - Thread t@102 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> 
> 
> "http-bio-31680-exec-34" - Thread t@101 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
>  "http-bio-31680-exec-33" - Thread t@100 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> 
> 
> "http-bio-31680-exec-32" - Thread t@99 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
> at
> com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
>
> 
> 
> "http-bio-31680-exec-31" - Thread t@98 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
> at
> javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154)
>
> 
> 
> "http-bio-31680-exec-30" - Thread t@97 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481)
> at
> javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:185) 
> 
> "http-bio-31680-exec-29" - Thread t@96 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> 
> 
> "http-bio-31680-exec-28" - Thread t@95 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
> at
> javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:154)
>
> 
> 
> "http-bio-31680-exec-27" - Thread t@94 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:119)
> 
> 
> "http-bio-31680-exec-26" - Thread t@93 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:505)
> at
> com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.findClass(ReflectionNavigator.java:47)
>
>  "http-bio-31680-exec-25" - Thread t@92 java.lang.Thread.State:
> BLOCKED at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1605)
>
> 
- - waiting to lock <264d40df> (a
org.apache.catalina.loader.WebappClassLoader) owned by
"http-bio-31680-exec-41" t@108
> at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
>
> 
at
com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:358)
> at
> com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:303)
>
>  .. and more

You didn't post the stack trace for the thread that owns the monitor
lock. Can you post that, too?

How long does that thread hold the lock? Perhaps something else is
wrong and the performance problem is just the symptom.

- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJTdjiAAAoJEBzwKT+lPKRY6OMP/0eA7F9kP+SzJ3auUBK4AoT3
iCgEctcAst1fZkxnah0vouHB1DbGIrBBPAuozIq16VM8OcWn/rWRKrOQFsIlXz6c
+UKrCkztIMJCvDU9OSRWKNa8WMewAfIOwzynHwjwe1kV5a9sH7A5oEpP5aONonEf
g+sXHu6WRBfvu8EMGlMHxhMi9/1JOnvdBQTTbMLK/ss4oJMw/azuC6Q+SbWS/WHJ
qNaCH2Ss3RBDaumtpieoCbJdQc+dY40kdk3xT4jfHol5S84H/uQP5paqcnY9XeXQ
YXpKmuRiCKnZsc6W1M6p84Z8sCpesGa7Kw6P/kWQ0XuU2GmehbVA+RoYwVd80SwO
lvSBXemNe8k1AK0XVTnasAxkZiAfi8BmHk6CAwFcdCPHMPi77MAMLIkg/VJyHS0m
zJfMw0k9b6NOwpb/QBS9z1Gm1tUncoW45NCkuck6n1gSztDaU7mxOAGN6T/BaBEl
RcQPrLw1plc/EcNqOtUYQIJS/y6HhL6X3TnDt1is7V6hCIQw/7pA2okSyzdBDFCI
D7hnXmKmfaIzhDNF2UfryM3UV8pOicbC7IykOi9dOiwBbCbHMzJBUt1Y4BzQrqzJ
BOmMEmjQAuh9gySqs4kqQNHC61A/CPFg3GRmTSHCFDMk2GaKs+Tp7M75Tu7Ck4jM
g99Iiq5C9RKnsvIx3IjI
=b6pg
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to