aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bas (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (ARIES-1277) the lifecycle of a bundle is not respected according to the osgi spec. when trying to load a class from a bundle
Date Wed, 17 Dec 2014 14:14:13 GMT

    [ https://issues.apache.org/jira/browse/ARIES-1277?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14249876#comment-14249876
] 

Bas commented on ARIES-1277:
----------------------------

Hi,

Solved my problem by using lazy activation policy which makes sure the bundle activator is
called on usage of bundle classes. I thought it would not be possible to load a class from
a non activated bundle. But it probably is according to the specification, I still didn't
find a clear explanation to when classes become available. But re-reading the specification
is making me think it is on resolved. With the exception of the lazy activation policy lifecycle
which forces the bundle to be activated. Sorry for misreading.

Regards,

> 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 'child-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 subsystem 'child1' would start
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 now 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)

Mime
View raw message