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