Hi Holly,
This sounds like a bug. I agree that "For reference-list callbacks, the
service proxy is guaranteed to be available in the collection before a bind
callback is invoked" strongly suggests that the new reference should have
been injected before bind() was called.

Regards,
Mark

On 8 May 2011 13:55, Holly Cummins <[email protected]> wrote:

> Hi all,
>
> I'm hitting a problem with reference listeners which feels like a mini-bug
> to me, but I thought I'd see what everyone else thinks. I've got a bean with
> a blueprint-injected reference list. The same bean also has a reference
> listener. When the system is initializing, the bind() method is called
> before the reference list has been injected.
>
> The specification says: "For reference-list callbacks, the service proxy is
> guaranteed to be available in the collection before a bind callback
> is invoked, and to remain in the collection until after an unbind callback
> has completed."
>
> The specification doesn't actually say that anyone has to have been told
> about the collection which is being modified, so technically our behaviour
> is within the letter of the spec. However, it feels like the *intention* of
> the specification is that if the bind() method is called consumers of the
> service should have access to a collection which accurately represents the
> final state of the reference list.
>
> On the other hand, relying on the system being in a particularly consistent
> state during initialisation is obviously unwise, and against the more
> general spirit of OSGi dynamism, so maybe what we're doing is perfectly
> reasonable!
>
> What do people think?
>
> The code I'm using is:
>
>         <bean id=*"thingAggregator" *class=*"..."*>
>                 <property name=*"things"* ref=*"thinglist"* />
>         </bean>
>
>         <reference-list
>                 id=*"thinglist"*
>                 interface=*"Thing"*>
>                 <reference-listener
>                         ref=*"thingAggregator"*
>                         bind-method=*"bind"*/>
>         </reference-list>
>
>
>         *public* *void* bind(Thing thing) {
>                 System.out.println("DEBUG: bind called, things is " +
> things);
>         }
>
>
> Regards,
> Holly
>
> --
> Holly Cummins
> IBM Hursley, UK
> [email protected]
>
>
>
>  ------------------------------
>
> *
> *
>
> *Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number
> 741598.
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
> *
>
>
>
>
>
>
>

Reply via email to