Jan,

Sounds like you might be running into
https://bugs.eclipse.org/bugs/show_bug.cgi?id=186280

-Jeremy

On 8/7/07, Jan Stette <[EMAIL PROTECTED]> wrote:
> (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
>
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev

Reply via email to