In a dynamic system we can have multiple services of same bean type. In that case a consumer of a service can specify a filter to qualify the required bean as follows:
In one bundle publish the service as:
<bean id="helloService" class="com.ivy.example.service.factory.HelloServiceFactory" factory-method="getHelloService" />
<osgi:service ref="helloService" interface="com.ivy.example.service.HelloService">
<osgi:service-properties>
<entry key="product" value="account" />
</osgi:service-properties>
</osgi:service>
To consume the service in another bundle:
<osgi:reference id="helloService" filter="(product=account)" interface="com.ivy.example.service.HelloService" />
<bean id="testData" class="com.ivy.data.TestData" init-method="start" destroy-method="stop">
<property name="helloService" ref="helloService" /> <- dependency injection of the referenced bean
</bean>
Ranking attribute can be specified while advertising a bean:
the one with the higest rank if obtained i case of two similar services
<osgi:service ref="helloService" interface="com.ivy.example.service.HelloService" ranking=”1” >
The ranking attribute is useful for determining the 'best matching' OSGi service in case multiple candidates are available.
If one needs to pin point a service then a filter should be used.
Friday, March 13, 2009
Filter and Ranking attributes in OSGi
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment