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.

Reply via email to