[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [equinox-dev] Issue with declarative services implementation?

Hi Jeremy -

So, I added immediate="true" to the instantiator XML. I realize that not
having the implementation class be public is the underlying reason but I
see the same behavior where the container is still started. Would I get
any indication that the instantiator service failed to start without
enabling some kind of logging?

Thanks,
Chris

-----Original Message-----
From: equinox-dev-bounces@xxxxxxxxxxx
[mailto:equinox-dev-bounces@xxxxxxxxxxx] On Behalf Of Jeremy Volkman
Sent: Monday, April 30, 2007 3:11 PM
To: Equinox development mailing list
Subject: Re: [equinox-dev] Issue with declarative services
implementation?

Chris,

I believe you ran into DS' lazy loading of implementation classes.
Since your component configurations checked out, DS went ahead and
registered a ServiceFactory proxy in place of your
com.cra.shared.instantiator.Instantiator.  At this point, the service
was actually provided.  Once the com.cra.shared.container.Container
came along and actually requested the service object, DS's
ServiceFactory proxy attempted to instantiate the service object and
it bombed.  This would not have happened if you had declared the
Instantiator as an immediate component.  The lazy instantiation of
component objects is outlined in the DS spec.

Hope that helps,
Jeremy

On 4/30/07, Chris Hopkins <chopkins@xxxxxxx> wrote:
>
>
>
>
> Hi all -
>
>
>
> We are using the Declarative Services implementation within Eclipse
3.2.2 as
> we are interested in exploring the use of DS. I'm running into an
issue
> right now where the implementation is not acting as I would expect. I
have
> one bundle that declares the following component:
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <component name="instantiator">
>
>       <implementation
> class="com.cra.shared.instantiator.InstantiatorImpl"/>
>
>       <service>
>
>             <provide
> interface="com.cra.shared.instantiator.Instantiator"/>
>
>       </service>
>
> </component>
>
>
>
> Another bundle defines another component thusly:
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <component name="container">
>
>       <implementation
> class="com.cra.shared.container.DefaultContainer"/>
>
>       <service>
>
>             <provide
> interface="com.cra.shared.container.Container"/>
>
>       </service>
>
>       <reference
>
>             name="instantiator"
>
>
> interface="com.cra.shared.instantiator.Instantiator"
>
>             cardinality="1..1"
>
>             bind="bindInstantiator"
>
>             unbind="unbindInstantiator"
>
>       />
>
> </component>
>
>
>
> I would expect that the container service would not be started until
the
> instantiator service was available. However, I mistakenly had the
> InstantiatorImpl class package private instead of public so,
apparently, it
> was not able to be instantiated. As I wouldn't have expected, the
container
> service was started and, having a null Instantiator, it blew up.
>
>
>
> Am I trying to hook things up incorrectly?
>
>
>
> Thanks,
>
> Chris
>
>
> _______________________________________________
> equinox-dev mailing list
> equinox-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/equinox-dev
>
>
_______________________________________________
equinox-dev mailing list
equinox-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/equinox-dev