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)

Reply via email to