This page describes the CXF Distributed OSGi with Declarative Services demo.
The Declarative Services demo uses a DS implementation to create a remoted OSGi service from a DS component. The consumer side uses DS to create a component that consumes the remote OSGi service. By using Declarative Services, you don't need to write code to interact with the OSGi Service Registry. That's all handled through injection which hugely simpliefies the code.
Declarative Services is similar to Spring-DM/OSGi Blueprint in that service dependencies are satisfied through injection. There are a few differences as well. DS is lighter weight than Spring-DM but also has less features. Declarative Services have been part of the OSGi specifications since version 4.0.
This demo can be used with any DOSGi distribution, in this document the single-bundle distribution is used with the Equinox implementation of DS.
Demo design
This demo is quite similar to the Spring-DM demo and the Greeter demo in structure. It consists of 3 bundles:
- An interface bundle defining the Adder Service interface.
- An Adder Service implementation bundle.
- An Adder Service consumer bundle.
The service implementation and consumer bundle are built using DS.
@@@@ image
The Adder Service interface is as follows:
public interface AdderService { int add(int a, int b); }
The Adder Service Implementation
The service implementation providers a simplistic implementation of the AdderService interface, which is instantiated as a DS component.
In the OSGI-INF/component.xml
file the AdderServiceImpl is instantiated and registered with the OSGi service registry with the distribution properties. These properties instruct. Distributed OSGi into making the service available on http://localhost:9090/adder.
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"> <implementation class="org.apache.cxf.dosgi.samples.ds.impl.AdderServiceImpl"/> <property name="osgi.remote.interfaces">*</property> <property name="osgi.remote.configuration.type" value="pojo" /> <property name="osgi.remote.configuration.pojo.address" value="http://localhost:9090/adder" /> <service> <provide interface="org.apache.cxf.dosgi.samples.ds.AdderService"/> </service> </scr:component>
So let's install the server side in Equinox, together with the Equinox DS implementation. You can do this from the Equinox command line, but in this document I'll launch Equinox from within Eclipse.
I'm starting off by importing the Single Bundle Distribution as a binary project in Eclipse by going File -> Import | Plug-ins and Fragments and then I select the directory that contains the single bundle distribution JAR file. My workspace now looks like this:
@@@ image
Next I'll create an OSGi Framework launch configuration that includes DS.