Bas created ARIES-1277: -------------------------- Summary: the lifecycle of a bundle is not respected according to the osgi spec. when trying to load a class from a bundle Key: ARIES-1277 URL: https://issues.apache.org/jira/browse/ARIES-1277 Project: Aries Issue Type: Bug Components: Subsystem Affects Versions: subsystem-core-1.0.0 Environment: Karaf version 3.0.1 org.eclipse.osgi - 3.8.2.v20130124-134944 Java Virtual Machine Java HotSpot(TM) 64-Bit Server VM version 24.55-b03 Version 1.7.0_55
Reporter: Bas When using a parent-child subsystem setup, the lifecycle of a bundle is not respected according to the osgi spec. when trying to load a class from a bundle the BundleActivator is not being called before returning the class in the following scenario. When I create the following environment where I create a subsystem parent 'parent1' which is a feature that has a subsystem constituent 'child1' (application subsystem) and a bundle 'parent-bundle1'. The child subsystem is an application subsystem and has a bundle 'child-bundle1'. So subsystem 'parent1' contains 'child1' and 'parent-bundle1'. Subsystem 'child1' contains 'child-bundle1'. The 'child-bundle1' tries to use a class from 'parent-bundle1' that should fetch state that is set in the BundleActivator of 'parent-bundle1'. Sometimes the logs indicated a nullpointerexception occurred while starting 'parent-bundle1'. While further analysing the problem it became clear to me it was possible to load a class while the bundle activator has not been executed. I added some logging to the code to confirm in the log what I suspected and the log confirmed my suspicions. I was also able to force the issue by using 'start-order' in the manifest to make sure 'child1' would load before 'parent-bundle1'. Before that I had to try 20x times before it randomly occurred. If I read the Osgi spec correctly it says the BundleActivator.start should finish before a class from that bundle is returned. I didn't find anything in the subsystem spec that describes a different flow when using subsystems. I would expect 'parent-bundle1' to be started and become active at the point where 'child-bundle1' tries to load a class from 'parent-bundle1'. What happens is 'parent-bundle1' is not being activated but the class is returned causing a nullpointerexception when the state is queried. At the point where 'parent1' is trying to start bundle 'parent-bundle1' it succeeds as you would expect. -- This message was sent by Atlassian JIRA (v6.3.4#6332)