Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • The Greeter Interface bundle
  • The Greeter Service Implementation bundle
  • The Greeter Service Consumer bundle
    The Greeter Interface bundle exports the GreeterInterface GreeterService interface which both other bundles depend on. This is the interface:
    Code Block
    java
    java
    public interface GreeterService {
        Map<GreetingPhrase, String> greetMe(String name) throws GreeterException;
    }
    The GreetingPhase and GreeterException classes are also defined by this bundle.

The Greeter Service bundle provides a trivial implementation of the GreeterService interface. Additionally, it has an Activator:

Code Block
java
java
public class Activator implements BundleActivator {
    private ServiceRegistration registration;

    public void start(BundleContext bc) throws Exception {
        Dictionary props = new Hashtable();

        props.put("osgi.remote.interfaces", "*");
        props.put("osgi.remote.configuration.type", "pojo");
        props.put("osgi.remote.configuration.pojo.address", "http://localhost:9090/greeter");
        
        registration = bc.registerService(GreeterService.class.getName(), new GreeterServiceImpl(), props);
    }

    public void stop(BundleContext bc) throws Exception {
        registration.unregister();
    }
}

Besides creating the service instance, the activator sets the additional properties on the service that are required to make it available remotely:

  • The osgi.remote.interfaces property is set to '*', which means that all the interfaces passes to registerService are good for remoting. In this case it's just the GreeterService interface.
  • The osgi.remote.configuration.type is set to pojo, which is a CXF specific configuration type that can be used to set the URL at which the service is to be exposed. This is done via the osgi.remote.configuration.pojo.address property.