ConcurrentModificationException and duplicate class definition

Robert Marcano robert at marcanoonline.com
Tue Feb 16 14:29:39 UTC 2016


On 02/16/2016 01:49 AM, Jiri Vanek wrote:
> On 02/15/2016 03:30 PM, Robert Marcano wrote:
>> On 02/15/2016 09:54 AM, Robert Marcano wrote:
>
>
> Hello!
>
> I will e happy to help with this..but... although this is error in 
> ITW's classlaoder - how is ITW involved?

Thanks. The application is loaded with javaws, Using Fedora 23 packaged 
version 1.6.1. Will test with 1.6.2.

>
> It do not run JNLP file, right? How can I reproduce it?

Well, the application start because Weld initialization is done on a 
different thread, it is unusable because after login that initialization 
is needed to have been satisfactory. I am still trying to package a test 
case that reproduce the problem on a small app. Will post the link when 
available.
>
> Also - that linkage error, is it fatal? I guess so...

Yes, fatal for that thread. I have implemented a workaround that when I 
detect the ITW class loader I do Weld initialization on the same startup 
thread, the users get a 5 second delay that could be used to type the 
userid and password in parallel. This is only temporary until I get an 
example I can post

>
> J.
>>> Greetings. I am trying to narrow down a bug I experience only when 
>>> using
>>> icedtea-web JNLP implementation. It doesn't happen with closed source
>>> Oracle implementation. I am using Weld (CDI on a SE environment). When
>>> using default Weld configuration it do concurrent bean deployment and I
>>> get:
>>
>> I forgot to say that this doesn't happen every time. It is reported 
>> by a few users randomly,
>> apparently when the application is updated. On a developer machine it 
>> happens randomly like 1 in 20
>> startups with forced updates.
>>
>>>
>>> java.lang.LinkageError: loader (instance of
>>> net/sourceforge/jnlp/runtime/JNLPClassLoader): attempted duplicate
>>> class definition for name: "com/...../ClassName" [1]
>>>
>>> At first I thought it was some kind on Weld bug with concurrency. I
>>> disabled concurrent deployment with a Weld configuration property. Then
>>> I get java.util.ConcurrentModificationException [2] inside
>>> JNLPClassLoader. Weld without concurrency doesn't mean the applications
>>> is not concurrent. I start Weld initialization on a separate thread
>>> meanwhile the login screen is shown and the user is typing the
>>> credentials, This reduce the startup time of the application for a few
>>> seconds.
>>>
>>> I have seen a few concurrency related old fixed bugs for 
>>> icedtea-web. It
>>> does looks to me like another one. Any hints?
>>>
>>>
>>> [1] When Weld concurrency is enabled
>>>
>>>> org.jboss.weld.exceptions.DeploymentException: loader (instance of
>>>> net/sourceforge/jnlp/runtime/JNLPClassLoader): attempted duplicate
>>>> class definition for name: "com/.../Classname"
>>>>     at
>>>> org.jboss.weld.executor.AbstractExecutorServices.checkForExceptions(AbstractExecutorServices.java:66) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions(AbstractExecutorServices.java:43) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions(AbstractExecutorServices.java:51) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.ConcurrentBeanDeployer.addClasses(ConcurrentBeanDeployer.java:62) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.BeanDeployment.createClasses(BeanDeployment.java:209) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.WeldStartup.startInitialization(WeldStartup.java:366) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.WeldBootstrap.startInitialization(WeldBootstrap.java:76) 
>>>>
>>>>
>>>>     at org.jboss.weld.environment.se.Weld.initialize(Weld.java:149)
>>>>     at com.....WeldInitializer.run(Unknown Source)
>>>> Caused by: java.lang.LinkageError: loader (instance of
>>>> net/sourceforge/jnlp/runtime/JNLPClassLoader): attempted duplicate
>>>> class definition for name: "com/.../Classname"
>>>>     at java.lang.ClassLoader.defineClass1(Native Method)
>>>>     at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
>>>>     at
>>>> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
>>>>
>>>>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
>>>>     at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
>>>>     at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
>>>>     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
>>>>     at java.security.AccessController.doPrivileged(Native Method)
>>>>     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.access$1601(JNLPClassLoader.java:106) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader$5.run(JNLPClassLoader.java:1800) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader$5.run(JNLPClassLoader.java:1798) 
>>>>
>>>>
>>>>     at java.security.AccessController.doPrivileged(Native Method)
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.findClass(JNLPClassLoader.java:1797) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClassExt(JNLPClassLoader.java:1834) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClass(JNLPClassLoader.java:1624) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.environment.deployment.discovery.jandex.JandexClassFileInfo.loadClass(JandexClassFileInfo.java:281) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.environment.deployment.discovery.jandex.JandexClassFileInfo.isAssignableTo(JandexClassFileInfo.java:225) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.environment.deployment.discovery.jandex.JandexClassFileInfo.isAssignableTo(JandexClassFileInfo.java:231) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.environment.deployment.discovery.jandex.JandexClassFileInfo.isAssignableTo(JandexClassFileInfo.java:101) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.util.Beans.isTypeManagedBeanOrDecoratorOrInterceptor(Beans.java:519) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.loadAnnotatedType(FastAnnotatedTypeLoader.java:83) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:97)
>>>>     at
>>>> org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:65) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:62) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53) 
>>>>
>>>>
>>>>     at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>>>>     at
>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
>>>>
>>>>
>>>>     at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
>>>>
>>>>
>>>>     at java.lang.Thread.run(Thread.java:744)
>>>
>>>
>>>
>>>
>>> [2] when Weld concurrency is disabled
>>>
>>>> Caused by: java.util.ConcurrentModificationException
>>>>     at 
>>>> java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
>>>>     at java.util.ArrayList$Itr.next(ArrayList.java:851)
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.getPermissions(JNLPClassLoader.java:1180) 
>>>>
>>>>
>>>>     at
>>>> java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206) 
>>>>
>>>>
>>>>     at
>>>> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
>>>>
>>>>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
>>>>     at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
>>>>     at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
>>>>     at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
>>>>     at java.security.AccessController.doPrivileged(Native Method)
>>>>     at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.access$1701(JNLPClassLoader.java:103) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader$5.run(JNLPClassLoader.java:1666) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader$5.run(JNLPClassLoader.java:1663) 
>>>>
>>>>
>>>>     at java.security.AccessController.doPrivileged(Native Method)
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.findClass(JNLPClassLoader.java:1662) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClassExt(JNLPClassLoader.java:1699) 
>>>>
>>>>
>>>>     at
>>>> net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClass(JNLPClassLoader.java:1498) 
>>>>
>>>>
>>>>     at java.lang.Class.getDeclaredFields0(Native Method)
>>>>     at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
>>>>     at java.lang.Class.getDeclaredFields(Class.java:1916)
>>>>     at
>>>> org.jboss.weld.security.GetDeclaredFieldsAction.run(GetDeclaredFieldsAction.java:30) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.security.GetDeclaredFieldsAction.run(GetDeclaredFieldsAction.java:22) 
>>>>
>>>>
>>>>     at java.security.AccessController.doPrivileged(Native Method)
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.SecurityActions.getDeclaredFields(SecurityActions.java:47) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.computeValue(BackedAnnotatedType.java:179) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.computeValue(BackedAnnotatedType.java:173) 
>>>>
>>>>
>>>>
>>>>     at 
>>>> org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:35)
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$EagerlyInitializedLazyValueHolder.<init>(BackedAnnotatedType.java:156) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.<init>(BackedAnnotatedType.java:173) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedFields.<init>(BackedAnnotatedType.java:173) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.<init>(BackedAnnotatedType.java:62) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.of(BackedAnnotatedType.java:44) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.load(ClassTransformer.java:83) 
>>>>
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.load(ClassTransformer.java:80) 
>>>>
>>>>
>>>>
>>>>     at
>>>> com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) 
>>>>
>>>>
>>>>     at
>>>> com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) 
>>>>
>>>>     at
>>>> com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) 
>>>>
>>>>
>>>>     at
>>>> com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
>>>>     at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
>>>>     at 
>>>> com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
>>>>     at
>>>> com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:49) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils.java:74) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:175) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:194) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.loadAnnotatedType(FastAnnotatedTypeLoader.java:109) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.createContext(FastAnnotatedTypeLoader.java:98) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.loadAnnotatedType(FastAnnotatedTypeLoader.java:87) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:97)
>>>>     at
>>>> org.jboss.weld.bootstrap.BeanDeployer.addClasses(BeanDeployer.java:135) 
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.BeanDeployment.createClasses(BeanDeployment.java:203) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.WeldStartup.startInitialization(WeldStartup.java:375) 
>>>>
>>>>
>>>>     at
>>>> org.jboss.weld.bootstrap.WeldBootstrap.startInitialization(WeldBootstrap.java:76) 
>>>>
>>>>
>>>>     at org.jboss.weld.environment.se.Weld.initialize(Weld.java:556)
>>>
>>
>



More information about the distro-pkg-dev mailing list