Hi,
I am looking for help in deciphering following issue.
If service listener and service publication happens in the same bundle, order of beans in spring-config is important.
Example 1:
If service is published after osgi:list with osgi:listener, listener is invoked properly.
Example 2:Code:<osgi:list id="menuContributions" interface="shared.ui.menu.MenuContribution" cardinality="0..N"> <osgi:listener bind-method="onBind" unbind-method="onUnbind"> <bean class="shared.ui.menu.support.MenuContributionListener"> <constructor-arg ref="menuBuilder"/> </bean> </osgi:listener> </osgi:list> <osgi:service ref="hostMenuContribution" interface="shared.ui.menu.MenuContribution"> <osgi:service-properties> <entry key="publisher" value="HOST"/> </osgi:service-properties> </osgi:service>
If service is published (osgi:service) before listener (osgi:list with osgi:listener), listener is not notified.
From looking at the source code of org.springframework.osgi.service.importer.support. internal.collection.OsgiServiceCollection, I would expect a call to OsgiListenerUtils.addServiceListener() to nullify the need for order of beans.Code:<osgi:service ref="hostMenuContribution" interface="shared.ui.menu.MenuContribution"> <osgi:service-properties> <entry key="publisher" value="HOST"/> </osgi:service-properties> </osgi:service> <osgi:list id="menuContributions" interface="shared.ui.menu.MenuContribution" cardinality="0..N"> <osgi:listener bind-method="onBind" unbind-method="onUnbind"> <bean class="shared.ui.menu.support.MenuContributionListener"> <constructor-arg ref="menuBuilder"/> </bean> </osgi:listener> </osgi:list>
From OsgiServiceCollection.
I debugged through the code and I actually do see published service with correct properties in the Framework service registry. But a call to bundleContext.getServiceReferences with a proper filter returns a null.Code:// now get the already registered services and call the listener // (the listener should be able to handle duplicates) dispatchServiceRegistrationEvents(OsgiServiceReferenceUtils.getServiceReferences(context, filter), listener);
Is there some timing issue that I am stumbling into? Felling very obtuse.
p.s. This might be a spring-dm question, but I am seeing it in the server so posting here.
Environment: dm-server 2 RC1, spring.dm 1.2.1, springframework 3 RELEASE


