just out of curiosity; can you try adding an @Modified annotation somewhere in your component, and tell if you also observe a component restart ?
/pierre On Wed, Mar 9, 2016 at 2:01 PM, Jens Offenbach <wolle5...@gmx.de> wrote: > Yes, it is called between the two activates. > > This is the stack trace: > at > com.example.nodes.tree.impl.component.Component.deactivate(Component.java:131) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:483) > at > org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:222) > at > org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:37) > at > org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:615) > at > org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:499) > at > org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:295) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.disposeImplementationObject(SingleComponentManager.java:342) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.deleteComponent(SingleComponentManager.java:157) > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.doDeactivate(AbstractComponentManager.java:783) > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.deactivateInternal(AbstractComponentManager.java:757) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.reconfigure(SingleComponentManager.java:615) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.reconfigure(SingleComponentManager.java:566) > at > org.apache.felix.scr.impl.config.ConfigurableComponentHolder.configurationUpdated(ConfigurableComponentHolder.java:419) > at > org.apache.felix.scr.impl.config.ConfigurationSupport.configurationEvent(ConfigurationSupport.java:391) > at > org.apache.felix.cm.impl.ConfigurationManager$FireConfigurationEvent.sendEvent(ConfigurationManager.java:2046) > at > org.apache.felix.cm.impl.ConfigurationManager$FireConfigurationEvent.run(ConfigurationManager.java:2014) > at > org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:143) > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:110) > at java.lang.Thread.run(Thread.java:745) > > > > > Gesendet: Mittwoch, 09. März 2016 um 13:52 Uhr > Von: "Carsten Ziegeler" <cziege...@apache.org> > An: users@felix.apache.org > Betreff: Re: SCR: Sometimes component gets instantiated twice > Do you also have a debug log for the deactivate method? Is it called in > between the two activates? > > Carsten > > Jens Offenbach wrote > > Hi, > > I am facing a serious problem in Apache SCR 2.0.2: I have a component > that requires a valid configuration. Unfortunatley, it sometimes happens > that the component gets instantiated twice. I am using Eclipse Equinox > 3.10.2.v20150203-1939, Felix ConfigAdmin 1.8.8 and Apache Fileinstall 3.5.2. > > > > This is my component description created by the Apache SCR Plugin: > > <?xml version="1.0" encoding="UTF-8"?> > > <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.2.0" > immediate="true" name="com.example.nodes.tree.impl.component.Component" > configuration-policy="require" activate="activate" deactivate="deactivate"> > > <implementation class="com.example.nodes.tree.impl.component.Component"/> > > <service servicefactory="false"> > > <provide interface="com.example.nodes.tree.Tree"/> > > <provide interface="com.example.nodes.tree.HandlerService"/> > > </service> > > <property name="service.pid" > value="com.example.nodes.tree.impl.component.Component"/> > > <reference name="TreeEventListener" > interface="com.example.nodes.tree.eventing.TreeEventListener" > cardinality="0..n" policy="dynamic" bind="bind" unbind="unbind" > updated="updated"/> > > <reference name="DataHandler" > interface="com.example.nodes.tree.spi.handler.DataHandler" > cardinality="0..n" policy="dynamic" bind="bind" unbind="unbind" > updated="updated"/> > > <reference name="ExecuteHandler" > interface="com.example.nodes.tree.spi.handler.ExecuteHandler" > cardinality="0..n" policy="dynamic" bind="bind" unbind="unbind" > updated="updated"/> > > </scr:component> > > > > com.example.nodes.tree.impl.component.Component.cfg (no factory > configuration): > > > > locking.aquireTimeout.value = 30 > > locking.aquireTimeout.unit = SECONDS > > > > It is hard to debug. At the moment, I can only offer you the following > two stack traces. As you can see SCR seems to be triggered twice. The first > event comes from the framework and signals a bundle change. The second > event informs SCR about the corresponding configuration creation. It must > be a race condition in some place. > > > > at > com.example.nodes.tree.impl.component.Component.activate(Component.java:54) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:483) > > at > org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:222) > > at > org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:37) > > at > org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:615) > > at > org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:499) > > at > org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:295) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:302) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:113) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:866) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:833) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:774) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) > > at java.security.AccessController.doPrivileged(Native Method) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:496) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) > > at > org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:619) > > at > org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:72) > > at > org.apache.felix.scr.impl.helper.BindMethod.getServiceObject(BindMethod.java:646) > > at > org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2137) > > at > org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1048) > > at > org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1457) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:983) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:812) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:724) > > at > org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:954) > > at > org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:915) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1215) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1136) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:945) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:881) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1167) > > at > org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:120) > > at > org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) > > at > org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:914) > > at > org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > > at > org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225) > > at > org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:464) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:869) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:857) > > at > org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:915) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:715) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:399) > > at > org.apache.felix.scr.impl.config.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:676) > > at > org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:339) > > at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:360) > > at org.apache.felix.scr.impl.Activator.access$000(Activator.java:53) > > at > org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:260) > > at > org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:259) > > at > org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:232) > > at > org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482) > > at > org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:1) > > at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) > > at > org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) > > at > org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:902) > > at > org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > > at > org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) > > at > org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:165) > > at > org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:75) > > at > org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:67) > > at > org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:102) > > at org.eclipse.osgi.container.Module.publishEvent(Module.java:466) > > at org.eclipse.osgi.container.Module.start(Module.java:457) > > at > org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582) > > at > org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1562) > > at > org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533) > > at > org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476) > > at > org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) > > at > org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > > at > org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) > > > > > > 13:16:08.733 [Start Level: Equinox Container: > a04ce7b3-f0e5-0015-12b9-a18bd35d12e8] DEBUG > c.e.n.t.impl.component.Component - Component successfully created. > > at > com.example.nodes.tree.impl.component.Component.activate(Component.java:54) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:483) > > at > org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:222) > > at > org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:37) > > at > org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:615) > > at > org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:499) > > at > org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:295) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:302) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:113) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:866) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:833) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:774) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) > > at java.security.AccessController.doPrivileged(Native Method) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:496) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) > > at > org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:619) > > at > org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:72) > > at > org.apache.felix.scr.impl.helper.BindMethod.getServiceObject(BindMethod.java:646) > > at > org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2137) > > at > org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1048) > > at > org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1457) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:983) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:812) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:724) > > at > org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:954) > > at > org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:915) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1215) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1136) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:945) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:881) > > at > org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1167) > > at > org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:120) > > at > org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) > > at > org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:914) > > at > org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > > at > org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127) > > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225) > > at > org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:464) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:869) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:857) > > at > org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:915) > > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:715) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.reconfigure(SingleComponentManager.java:627) > > at > org.apache.felix.scr.impl.manager.SingleComponentManager.reconfigure(SingleComponentManager.java:566) > > at > org.apache.felix.scr.impl.config.ConfigurableComponentHolder.configurationUpdated(ConfigurableComponentHolder.java:419) > > at > org.apache.felix.scr.impl.config.ConfigurationSupport.configurationEvent(ConfigurationSupport.java:391) > > at > org.apache.felix.cm.impl.ConfigurationManager$FireConfigurationEvent.sendEvent(ConfigurationManager.java:2046) > > at > org.apache.felix.cm.impl.ConfigurationManager$FireConfigurationEvent.run(ConfigurationManager.java:2014) > > at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:143) > > at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:110) > > at java.lang.Thread.run(Thread.java:745) > > 13:16:08.749 [CM Event Dispatcher (Fire ConfigurationEvent: > pid=com.example.nodes.tree.impl.component.Component)] DEBUG > c.e.n.t.impl.component.Component - Component successfully created. > > > > This issue is a blocker for me... Can anybody please help me figuring > out what is the problem's source. Maybe the problem is on my side. > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > > For additional commands, e-mail: users-h...@felix.apache.org > > > > > > > > -- > Carsten Ziegeler > Adobe Research Switzerland > cziege...@apache.org > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > For additional commands, e-mail: users-h...@felix.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@felix.apache.org > For additional commands, e-mail: users-h...@felix.apache.org > >