Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

The Spring-DM demo uses Spring-DM to create a remoted OSGi service from a Spring Bean. The consumer side uses Spring-DM to create a consumer to a remote OSGi service. By using Spring-DM you don't need to write code to interact with the OSGi Service Registry. That's all handled through injection which hugely simplifies the code. Besides, you can use all the features of Spring together with OSGi.

It uses the CXF/DOSGi multi bundle distribution since that provides Spring-DM as a dependency. By installing the multi bundle distribution, you have all the prerequisites to run this demo. See here for instructions on installing the multi bundle distribution.

Demo design

From a high level the demo is very similar to the greeter demo. It comprises of 3 bundles:

  • The demo interface bundle providing the Dinner Service interface.
  • The Dinner Service implementation bundle.
  • The Dinner Service consumer bundle.

<image/>Image Added

The Dinner Service interface is as follows:

...

Code Block
xml
xml
<beans xmlns:osgi="...">
  <osgi:service interface="org.apache.cxf.dosgi.samples.springdm.DinnerService">
    <osgi:service-properties>
      <entry key="osgiservice.remoteexported.interfaces" value="*" />
    </osgi:service-properties>
    
    <bean class="org.apache.cxf.dosgi.samples.springdm.impl.DinnerServiceImpl" />
  </osgi:service>                      
</beans>

Unlike in the Greeter demo osgi.remote.configuration... properties are not set in the configuration, this means that the service is exposed on the default location of http://localhost:9000/org/apache/cxf/dosgi/samples/springdm/DinnerServiceImage Removed. The default location is based on the interface name of the service being remoted.

...

Code Block
-> start http://repo2.maven.org/maven2/org/apache/cxf/dosgi/samples/cxf-dosgi-ri-samples-spring-dm-interface/1.02/cxf-dosgi-ri-samples-spring-dm-interface-1.02.jar
-> start http://repo2.maven.org/maven2/org/apache/cxf/dosgi/samples/cxf-dosgi-ri-samples-spring-dm-impl/1.02/cxf-dosgi-ri-samples-spring-dm-impl-1.02.jar
... log messages may appear ...
-> ps
START LEVEL 32
   ID   State         Level  Name
[   0] [Active     ] [    0] System Bundle (1.8.0)
... bundles ...
[  35] [Active     ] [    1] CXF Distributed OSGi Spring-DM Sample Interface Bundle
[  36] [Active     ] [    1] CXF Distributed OSGi Spring-DM Sample Implementation Bundle

At this point the service should be available. You can check this by obtaining the WSDL: @@@<spring-dm-wsdl/>

Image Added

The Dinner Service Consumer

...

Like in the Greeter demo, the client side needs to be configured to know where the remote service actually is. When using a Discovery system this configuration is provided dynamically via Discovery (, see the Discovery demo - TODO) DOSGi Discovery Demo page. In this demo this information is provided statically in a OSGI-INF/remote-service/remote-services.xml file.

Code Block
xml
xml

<service<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/sdrsa/v1.0.0">
  <service<endpoint-description>
    <provide<property interfacename="org"objectClass">
      <array>
        <value>org.apache.cxf.dosgi.samples.springdm.DinnerService" DinnerService</>value>
     <property name="osgi.remote.interfaces">*</property>array>
    <property name="osgi.remote.configuration.type">pojo<</property>
    <property name="osgi.remote.configuration.pojo.addressendpoint.id">http://localhost:9000/org/apache/cxf/dosgi/samples/springdm/DinnerService</property>
    <property name="service.imported.configs">org.apache.cxf.ws</property>
  </serviceendpoint-description>
</serviceendpoint-descriptions>

Install and run the consumer side of the demo in a separate Felix instance:

Code Block
-> start http://repo2.maven.org/maven2/org/apache/cxf/dosgi/samples/cxf-dosgi-ri-samples-spring-dm-interface/1.02/cxf-dosgi-ri-samples-spring-dm-interface-1.02.jar
-> start http://repo2.maven.org/maven2/org/apache/cxf/dosgi/samples/cxf-dosgi-ri-samples-spring-dm-client/1.02/cxf-dosgi-ri-samples-spring-dm-client-1.02.jar
... log messages may appear, at some point the consumer will make an invocation on the remote service, you will see:
Found the following restaurants:
  Jojo's (1 food way) Rating: 3
  Boohaa's (95 forage ave) Rating: 1
  MicMac (Plastic Plaza) Rating: 1

...