Hello,
I get an intermittent (very rare) exception while running tests using
declarative services under Felix.
The exception stack trace shows:
java.lang.IllegalArgumentException: Service object cannot be null.
at org.apache.felix.framework.Felix.registerService(Felix.java:2661)
at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:254)
at
org.apache.felix.scr.impl.AbstractComponentManager.registerComponentService(AbstractComponentManager.java:598)
at
org.apache.felix.scr.impl.AbstractComponentManager.activateInternal(AbstractComponentManager.java:426)
at
org.apache.felix.scr.impl.AbstractComponentManager.enableInternal(AbstractComponentManager.java:323)
at
org.apache.felix.scr.impl.AbstractComponentManager.access$000(AbstractComponentManager.java:36)
at
org.apache.felix.scr.impl.AbstractComponentManager$1.run(AbstractComponentManager.java:94)
at
org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:85)
Whenever I have seen the exception, logs suggest that the components were
being reactivated at around the same time. The stack trace from the debugger
when reactivate occurs shows:
ImmediateComponentManager.disposeImplementationObject(Object,
ComponentContext) line: 273
ImmediateComponentManager.deleteComponent() line: 151
ImmediateComponentManager(AbstractComponentManager).deactivateInternal()
line: 469
ImmediateComponentManager(AbstractComponentManager).reactivate()
line: 142
ImmediateComponentManager.reconfigure(Dictionary) line: 399
ImmediateComponentManager$1.updated(Dictionary) line: 90
ConfigurationManager$ManagedServiceUpdate.run() line: 863
UpdateThread.run() line: 89
Would it be possible to introduce some synchronization during
activate/deactivate to avoid the service/component being set to null? I am
using Felix framework 1.1.0-SNAPSHOT and SCR 1.0.0.
Thank you...
Regards,
Rajini