Hi Neil,

Thanks for your reply.
You caught the point of my problem. You're right. The best practice is
letting the DS component has a reference to other components. However, I
introduced the DS on the legacy code base, need more efforts and testing to
refactoring the existing code. For now ServiceEvent can ensure my code to
wait for completing the service registration.

Best Regards
Kane



On Mon, Feb 22, 2010 at 7:39 PM, Neil Bartlett <[email protected]> wrote:

> Hello Kane,
>
> It's not 100% clear from your description, but it sounds like you are
> calling BundleContext.getServiceReference() immediately after calling
> enableComponent, and expecting it to always return non-null. As you
> have noticed, this is not the case. Not only do you have potential
> race conditions because of asynchronous registration of the service,
> but you might find that the service will never appear because of a
> missing mandatory reference, or because of configuration policy.
>
> The event you are looking for is simply ServiceEvent... but it is not
> a good idea to program at such a low level. The best way to access the
> service published by a DS component is to write another component that
> has a reference to the first. DS will take care to only activate the
> second component once the service from the first is published.
>
> Regards,
> Neil
>
> On Mon, Feb 22, 2010 at 10:15 AM, zhu kane <[email protected]> wrote:
> > I have a DS component that is not enabled when started. It won't be
> enabled
> > until some conditions are satisfied. So I manually call
> > ComponentContext.enableComponent to enable the specified component.
> However,
> > the implementation of equinox's ds indeed do the enabling operation in a
> > work thread. My app intermittently suffer the NPE when using the service
> due
> > to the enabling operation is not completed yet in other thread.
> > I read the source code of equinox's ds, but I don't see any event is
> > broadcasted after enabling a component.
> > Is there a way to be notified after the component is changed? Or enable
> the
> > component via a synchronized calling.
> >
> > Best Regards
> > Kane
> >
> >
> > _______________________________________________
> > equinox-dev mailing list
> > [email protected]
> > https://dev.eclipse.org/mailman/listinfo/equinox-dev
> >
> >
> _______________________________________________
> equinox-dev mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/equinox-dev
>
_______________________________________________
equinox-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/equinox-dev

Reply via email to