(Changing threads as I've gone slightly off-topic now)

As a concrete example of a problem we're seeing is that we have a service on
which activate() is called twice on the same service instance, i.e. the same
object, without any intermediate calls to deactivate().  Is that something
that can legally occur in any circumstance?
This service has only static references, and references to it are all static
too.  Felix, could you elaborate on how you think thes e policies could be
affecting the issue?

Also, none of these services are registered as service factories in
themselves (though I guess DS registers a service factory on their behalf as
discussed below?)

Anyway, what we're seeing is basically this sequence of events:
- A service (X) is "immediate" so is registered on startup.
- Some time (much) later, a service (Y) declared in another bundle tries to
locate service X.
- This service is looked up OK so the right instance is found, but activate
is called on the method again.

Stepping through the code of the Declarative Services bundle we're using
(The ProSyst supplied equinox one), it seems to indeed find the existing
service within the corresponding ServiceFactory as registered by the DS
bundle (i.e. the "proxy" service).  However, after finding the existing
service, it still calls activate() on it.  The specific code fragment looks
like:

<...look up the component instance, in this case finding it... so the if()
statement below tests as false. >

        if (componentInstance == null) {
            componentInstance = new ComponentInstanceImpl(instance, this);
            componentInstance.setComponentContext(new ComponentContextImpl(
                    this, usingBundle, componentInstance, mgr));
        }

        bind(componentInstance);
        activate(usingBundle, componentInstance);

<return the component instance>

To me, it seems like activate (and maybe bind) above should have been called
inside the 'if' statement, i.e. only when creating a new instance?

Apologies if discussing details of an implementation if out of scope on this
list, but your comments on what is correct behaviour from the DS framework
in this case would be highly appreciated.

Regards,
Jan


On 07/08/07, Alexander Horn <[EMAIL PROTECTED]> wrote:
>
> > I can't see any circumstance where a valid DS implementation should
> register
> > a component with a single name several times, though I guess it's
> possible
> > we are doing something wrong somewhere to trigger this condition.
>
> Of course, I don't know your situation in great detail but maybe what
> your experiencing is due to the binding policy of your references.
>
> ...
> <reference policy="static" /> vs. <reference policy="dynamic" />
>
> On 8/7/07, BJ Hargrave <[EMAIL PROTECTED]> wrote:
> > If the pid is a factory configuration, then the component will be
> > activated once for each configuration of the factory.
> > --
> >
> > BJ Hargrave
> > Senior Technical Staff Member, IBM
> > OSGi Fellow and CTO of the OSGi Alliance
> > [EMAIL PROTECTED]
> >
>
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev

Reply via email to