20 August 2009

Registro y exposición de servicios en un Bundle

La arquitectura OSGi es una buena candidata para implementar aplicaciones orientadas a servicios. Todo Bundle exporta servicios que otros bundles pueden consumir.

Para exportar un servicio necesitamos:
  1. Una interfaz de nuestro modelo de dominio
  2. Un POJO que implemente esta interfaz
  3. Registrar/Exportar una instancia del POJO como servicio en una clase BundleActivator



La interfaz del modelo de dominio

package edu.emmerson.osgi.holamundo1_bundle;

public interface HolaMundoService {

public String saluda(String nombre);

}


El POJO que implementa esta interfaz

package edu.emmerson.osgi.holamundo1_bundle.impl;

import edu.emmerson.osgi.holamundo1_bundle.HolaMundoService;

public class HolaMundoServiceImpl implements HolaMundoService {

public HolaMundoServiceImpl(){}

public String saluda(String nombre) {
return "HolaMundo1 - hola " + nombre;
}

}


Registrando/Exportando el servicio en una clase que implementa BundleActivator (para la labor de exportación se dispone del método registerService de la clase BundleContext)

package edu.emmerson.osgi.holamundo1_bundle;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import edu.emmerson.osgi.holamundo1_bundle.impl.HolaMundoServiceImpl;

public class HolaMundoActivator implements BundleActivator {

ServiceRegistration servicioRegistrado;

public void start(BundleContext arg0) throws Exception {
System.out.println("HolaMundo1 - activandose");
HolaMundoService helloService = new HolaMundoServiceImpl();
servicioRegistrado =arg0.registerService(HolaMundoService.class.getName(), helloService, null);

}

public void stop(BundleContext arg0) throws Exception {
System.out.println("HolaMundo1 - deteniendose");
servicioRegistrado.unregister();
}
}



En el fichero MANIFEST.MF hay que exportar el paquete donde se encuentra la interfaz para que pueda ser accesible y también el activator.

Export-Package: edu.emmerson.osgi.holamundo1_bundle
Bundle-Activator: edu.emmerson.osgi.holamundo1_bundle.HolaMundoActivator



- FIN -

No comments: