DepencyManager causes IllegalStateException by calling setProperties on
unregistered ServiceRegistration
--------------------------------------------------------------------------------------------------------
Key: FELIX-2752
URL: https://issues.apache.org/jira/browse/FELIX-2752
Project: Felix
Issue Type: Bug
Components: Dependency Manager
Environment: trunk revision: 1053368
Reporter: Bram de Kruijff
When DependecyManager unBinds a component it calls unregister on the underlying
ServiceRegistration but does NOT nullify the m_registration reference to it.
When at a later time it binds the component again the reference is overwritten
with a new one and all is well. However, when the service implementaion calls
setSetserviceProperties(props) on the component during the start callback (and
thus before registration) this method will call setProperties on the
unregistered m_registration resulting in an IllegalStateException thrown by
org.apache.felix.framework.ServiceRegistrationImpl. Below the stacktrace.
Simple setting m_registration to null at line 910 seems to resolve the issue.
The service registration is no longer valid.
java.lang.IllegalStateException: The service registration is no longer valid.
at
org.apache.felix.framework.ServiceRegistrationImpl.setProperties(ServiceRegistrationImpl.java:107)
at
org.apache.felix.dm.impl.ServiceRegistrationImpl.setProperties(ServiceRegistrationImpl.java:45)
at
org.apache.felix.dm.impl.ComponentImpl.setServiceProperties(ComponentImpl.java:501)
at
org.amdatu.core.fabrictest.internal.RemotableServiceImpl.start(RemotableServiceImpl.java:33)
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.felix.dm.InvocationUtil.invokeMethod(InvocationUtil.java:45)
at
org.apache.felix.dm.InvocationUtil.invokeCallbackMethod(InvocationUtil.java:13)
at
org.apache.felix.dm.impl.ComponentImpl.invokeCallbackMethod(ComponentImpl.java:684)
at org.apache.felix.dm.impl.ComponentImpl.invoke(ComponentImpl.java:675)
at
org.apache.felix.dm.impl.ComponentImpl.bindService(ComponentImpl.java:620)
at
org.apache.felix.dm.impl.ComponentImpl.access$400(ComponentImpl.java:52)
at org.apache.felix.dm.impl.ComponentImpl$7.run(ComponentImpl.java:178)
at org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:47)
at
org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84)
at
org.apache.felix.dm.impl.SerialExecutor.access$000(SerialExecutor.java:33)
at org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:50)
at
org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84)
at
org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:68)
at
org.apache.felix.dm.impl.ComponentImpl.calculateStateChanges(ComponentImpl.java:228)
at
org.apache.felix.dm.impl.ComponentImpl.dependencyAvailable(ComponentImpl.java:371)
at
org.apache.felix.dm.impl.dependencies.ServiceDependencyImpl.addedService(ServiceDependencyImpl.java:433)
at
org.apache.felix.dm.tracker.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1145)
at
org.apache.felix.dm.tracker.AbstractTracked.trackAdding(AbstractTracked.java:286)
at
org.apache.felix.dm.tracker.AbstractTracked.track(AbstractTracked.java:232)
at
org.apache.felix.dm.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1026)
at
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:871)
at
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:733)
at
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3721)
at org.apache.felix.framework.Felix.access$000(Felix.java:80)
at org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:717)
at
org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:107)
at org.apache.felix.framework.Felix.registerService(Felix.java:2842)
at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:251)
at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:229)
at
org.apache.felix.dm.impl.ComponentImpl.registerService(ComponentImpl.java:860)
at
org.apache.felix.dm.impl.ComponentImpl.bindService(ComponentImpl.java:624)
at
org.apache.felix.dm.impl.ComponentImpl.access$400(ComponentImpl.java:52)
at org.apache.felix.dm.impl.ComponentImpl$7.run(ComponentImpl.java:178)
at org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:47)
at
org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84)
at
org.apache.felix.dm.impl.SerialExecutor.access$000(SerialExecutor.java:33)
at org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:50)
at
org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84)
at
org.apache.felix.dm.impl.SerialExecutor.access$000(SerialExecutor.java:33)
at org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:50)
at
org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84)
at
org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:68)
at
org.apache.felix.dm.impl.ComponentImpl.calculateStateChanges(ComponentImpl.java:228)
at org.apache.felix.dm.impl.ComponentImpl.start(ComponentImpl.java:406)
at org.apache.felix.dm.DependencyManager.add(DependencyManager.java:81)
at
org.amdatu.core.fabric.service.FabricManagerServiceImpl.createRemote(FabricManagerServiceImpl.java:149)
at
org.amdatu.core.fabrictest.shell.FabricManagerCommand.executeRemoteCreateCommand(FabricManagerCommand.java:260)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.