You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Richard S. Hall (JIRA)" <ji...@apache.org> on 2013/02/05 19:10:16 UTC

[jira] [Resolved] (FELIX-3242) Concurrent modification problem in StatefulResolver$ResolverStateImpl.getCandidates

     [ https://issues.apache.org/jira/browse/FELIX-3242?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Richard S. Hall resolved FELIX-3242.
------------------------------------

    Resolution: Fixed
      Assignee: Richard S. Hall

The issue here really is that some of the resolver state API is only intended to be called by the resolver implementation during a resolve operation. We were sort of treating these methods as if they could be called in another context, but they cannot. To try to deal with this situation, I've tried to provide better separation by keeping track of some data (resolver hooks in this case) in local variables that I pass around rather than have them as member variables. Please close if satisfied, thanks.
                
> Concurrent modification problem in StatefulResolver$ResolverStateImpl.getCandidates
> -----------------------------------------------------------------------------------
>
>                 Key: FELIX-3242
>                 URL: https://issues.apache.org/jira/browse/FELIX-3242
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-4.0.1
>            Reporter: David Jencks
>            Assignee: Richard S. Hall
>             Fix For: framework-4.2.0
>
>
> I occasionally see this stack trace (2 examples) starting stuff in karaf running on felix 4.0.1  Unfortunately it happens rarely and with no pattern I can discern.
> [Blueprint Extender: 3] ERROR org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe$Listener - Error calling listener method public synchronized void org.apache.karaf.shell.console.jline.ConsoleFactory.registerCommandProcessor(org.apache.felix.service.command.CommandProcessor) throws java.lang.Exception
> java.lang.reflect.InvocationTargetException
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:597)
>        at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:238)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe$Listener.invokeMethods(AbstractServiceReferenceRecipe.java:460)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe$Listener.bind(AbstractServiceReferenceRecipe.java:442)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.bind(AbstractServiceReferenceRecipe.java:339)
>        at org.apache.aries.blueprint.container.ReferenceRecipe.bind(ReferenceRecipe.java:149)
>        at org.apache.aries.blueprint.container.ReferenceRecipe.retrack(ReferenceRecipe.java:114)
>        at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.updateListeners(AbstractServiceReferenceRecipe.java:331)
>        at org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:93)
>        at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:71)
>        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>        at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:79)
>        at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:220)
>        at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:154)
>        at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:630)
>        at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:326)
>        at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:228)
>        at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
>        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
>        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>        at java.lang.Thread.run(Thread.java:680)
> Caused by: java.util.ConcurrentModificationException
>        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
>        at java.util.AbstractList$Itr.next(AbstractList.java:343)
>        at org.apache.felix.framework.StatefulResolver$ResolverStateImpl.getCandidates(StatefulResolver.java:1333)
>        at org.apache.felix.framework.StatefulResolver.isAllowedDynamicImport(StatefulResolver.java:521)
>        at org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:216)
>        at org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1539)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1439)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at java.lang.ClassLoader.defineClass1(Native Method)
>        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2128)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1432)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1317)
>        at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1481)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1427)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at org.apache.karaf.shell.console.jline.ConsoleFactory.start(ConsoleFactory.java:71)
>        at org.apache.karaf.shell.console.jline.ConsoleFactory.registerCommandProcessor(ConsoleFactory.java:51)
>        ... 30 more
> ----------------------------------------------------
> [Thread-8] ERROR org.apache.karaf.features.internal.FeaturesServiceImpl - Error installing boot feature management
> java.io.IOException: javax.xml.bind.JAXBException: Unable to create context
> - with linked exception:
> [java.lang.reflect.InvocationTargetException] : mvn:org.apache.karaf.features/enterprise/3.0.0-SNAPSHOT/xml/features
>        at org.apache.karaf.features.internal.RepositoryImpl.load(RepositoryImpl.java:96)
>        at org.apache.karaf.features.internal.RepositoryImpl.getRepositories(RepositoryImpl.java:69)
>        at org.apache.karaf.features.internal.FeaturesServiceImpl.getFeatures(FeaturesServiceImpl.java:910)
>        at org.apache.karaf.features.internal.FeaturesServiceImpl.getFeature(FeaturesServiceImpl.java:870)
>        at org.apache.karaf.features.internal.FeaturesServiceImpl$1.run(FeaturesServiceImpl.java:994)
> Caused by: java.lang.RuntimeException: javax.xml.bind.JAXBException: Unable to create context
> - with linked exception:
> [java.lang.reflect.InvocationTargetException]
>        at org.apache.karaf.features.internal.model.JaxbUtil.unmarshal(JaxbUtil.java:126)
>        at org.apache.karaf.features.internal.RepositoryImpl.load(RepositoryImpl.java:88)
>        ... 4 more
> Caused by: javax.xml.bind.JAXBException: Unable to create context
> - with linked exception:
> [java.lang.reflect.InvocationTargetException]
>        at javax.xml.bind.ContextFinder.find(ContextFinder.java:116)
>        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:65)
>        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:56)
>        at org.apache.karaf.features.internal.model.JaxbUtil.unmarshal(JaxbUtil.java:107)
>        ... 5 more
> Caused by: java.lang.reflect.InvocationTargetException
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:597)
>        at javax.xml.bind.ContextFinder.find(ContextFinder.java:114)
>        ... 8 more
> Caused by: java.util.ConcurrentModificationException
>        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
>        at java.util.AbstractList$Itr.next(AbstractList.java:343)
>        at org.apache.felix.framework.StatefulResolver$ResolverStateImpl.getCandidates(StatefulResolver.java:1333)
>        at org.apache.felix.framework.StatefulResolver.isAllowedDynamicImport(StatefulResolver.java:521)
>        at org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:216)
>        at org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1539)
>        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1439)
>        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>        at java.lang.Class.forName0(Native Method)
>        at java.lang.Class.forName(Class.java:247)
>        at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95)
>        at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
>        at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
>        at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370)
>        at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:181)
>        at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
>        at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
>        at java.lang.reflect.Method.declaredAnnotations(Method.java:693)
>        at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:686)
>        at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:175)
>        at com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllMethodAnnotations(RuntimeInlineAnnotationReader.java:89)
>        at com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader.getAllMethodAnnotations(RuntimeInlineAnnotationReader.java:57)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.ensureNoAnnotation(ClassInfoImpl.java:1130)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.collectGetterSetters(ClassInfoImpl.java:1069)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.findGetterSetterProperties(ClassInfoImpl.java:943)
>        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:314)
>        at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getProperties(RuntimeClassInfoImpl.java:186)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:247)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:104)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:85)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:213)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:99)
>        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:85)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:319)
>        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:334)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:483)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:319)
>        at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1170)
>        at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:145)
>        ... 13 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira