[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [equinox-dev] Regarding Lazy Activation
- From: Neil Bartlett <njbartlett@xxxxxxxxx>
- Date: Wed, 16 Feb 2011 14:48:07 +0000
- Delivered-to: firstname.lastname@example.org
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=CaEn+qAUYutwKuYTcWwJCKJ46iaZrPt2NeHkfWs3JIr0KC9PiCy2VZLs82mvjafF8R aiCeTz71oYLmNFsgLOhOh3Xu7qWgREC1xdmvGfixV+Objaodsflib7Xo6qDiT2danljS fELQKg3U2Enm3CofU0E6w+quegZhfWItDSuAA=
Answer inline below...
On Wed, Feb 16, 2011 at 2:36 PM, ajinkya prabhune
> Super help from both of u. I am now gng through the articles and seeing how
> it works...
> Yes I am trying to use a Service declared in A bundle --- to use in B
> Can I make the A Bundle As Lazy so that when B bundle ask for service in A
> ... the A bundles gets Active and Registers the Service
> will this work ?
No, this is not what "lazy activation" in OSGi is for. It has nothing
to do with services.
Declarative Services provides the right kind of laziness. If you
define a component in B that has a mandatory reference (i.e.
cardinality 1..1 or 1..n) to the service published from A, then it
will only create the component when the service becomes available,
which would be after A is activated.
In most cases the "lazy activation policy" is not required and is IMHO
an annoying distraction. All you really need is the following:
1) Create a DS component and declare it with a component.xml file
2) Do NOT create a BundleActivator... you don't need it when using DS.
3) Start both bundles A and B, in any order.
> Thanks for ur quick reply...
> On Wed, Feb 16, 2011 at 3:32 PM, Neil Bartlett <njbartlett@xxxxxxxxx> wrote:
>> Do not do this. It is a common newbie mistake: there should be no
>> start-ordering dependency between bundles.
>> You do not state *why* you want B to start after A has started. I
>> assume that you want to publish a service from A and consume it from
>> B? The correct way to do this is have B *listen* for the availability
>> of the service it needs to use, then A and B can be started in any
>> As Petar points out, using Declarative Services (DS) is a much easier
>> way to implement services, since it takes care of all the aspects of
>> listening for availability etc. I strongly recommend that you use DS
>> instead of coding against the low-level OSGi services APIs.
>> On Wed, Feb 16, 2011 at 1:36 PM, ajinkya prabhune
>> <ajinkya.prabhune@xxxxxxxxx> wrote:
>> > Hello,
>> > I am quite new to the concept of OSGi and bundles.
>> > I have this issue.
>> > For eg - I have 2 bundles
>> > Bundle A and Bundle B,Â Bundle A depends on Bundle B
>> > But I want to start Bundle B only when Bundle A is started...
>> > what are the ways to do it ? I manually found out the Bundle B using the
>> > Bundle object and started the Bundle B with bundle.start() but I
>> > would like to do it without the Java Code. can the Framework Help me.
>> > I am not sure but how does Bundle ActivationPolicy lazy works ?
>> > Thank u and regards
>> > --
>> > Thank you and Regards
>> > Ajinkya Prabhune
>> > _______________________________________________
>> > equinox-dev mailing list
>> > equinox-dev@xxxxxxxxxxx
>> > https://dev.eclipse.org/mailman/listinfo/equinox-dev
>> equinox-dev mailing list
> Thank you and Regards
> Ajinkya Prabhune
> equinox-dev mailing list