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