Declaración de los servicios en los servicios declarativos de OSGi

Puede utilizar un archivo XML aparte para declarar cada servicio dentro de un paquete.

Acerca de esta tarea

El soporte de servicios declarativos (DS) opera sobre componentes declarados, cada uno de ellos definido por un archivo XML del paquete. Cuando se añade un paquete que contiene declaraciones de componente a la infraestructura, DS lee cada declaración de componente y registra los servicios proporcionados en el registro de servicio. A continuación, DS gestiona el ciclo de vida del componente: controla el ciclo de vida basándose en una combinación de atributos declarados y dependencias satisfechas.

La descripción XML de los componentes permite a DS resolver las dependencias de servicio sin necesidad de crear una instancia del componente o cargar sus clases de implementación. Esto permite la carga tardía y poco diligente de los recursos, lo que permite mejorar el arranque del servidor y reducir la ocupación de memoria en tiempo de ejecución.

Los archivos XML que describen los componentes se enumeran en el archivo MANIFEST.MF del paquete con la cabecera Service-Component y por convención se ubican en el directorio /OSGI-INF del paquete.

Hay una serie de herramientas que se pueden utilizar para generar el XML necesario; los ejemplos siguientes muestran el XML en sí.

En este tema se describe un paquete OSGi simple con XML para declarar sus componentes a DS.

Procedimiento

  1. Identifique el componente a través de su nombre de clase de implementación.
    <component>
      <implementation class="com.example.bundle.HelloComponent"/>
    </component>
  2. Declare el servicio haciendo referencia al nombre de la interfaz que proporciona. Se trata del nombre que DS publicará al registro de servicio cuando se inicie el paquete.
    <component>
      <implementation class="com.example.bundle.HelloComponent"/>
      <service>
         <provide interface="com.example.HelloService"/>
      </service>
    </component>
  3. Nombre el componente. El nombre de componente actúa también como "identidad persistente" del servicio, o PID, que se utiliza para asociar las propiedades de configuración al servicio. Las propiedades de configuración con un PID coincidente se introducirán en el componente de activación y cada vez que se actualicen las propiedades.
    <component name="HelloService">
      <implementation class="com.example.bundle.HelloComponent"/>
      <service>
        <provide interface="com.example.HelloService"/>
      </service>
    </component>
    Nota: En el perfil Liberty, un usuario puede añadir el elemento siguiente al archivo de configuración server.xml y se introducirán las propiedades en la clase HelloComponent.
    <HelloService firstKey="firstValue" secondKey="secondValue" />
  4. Empaquete el archivo XML en el paquete.
    Por ejemplo, el archivo se encuentra en la ubicación OSGI-INF/HelloService.xml y añade una cabecera al archivo de manifiesto de paquete MANIFEST.MF de modo que DS pueda ubicar el archivo:
    Service-Component: OSGI-INF/HelloService.xml
    Si varios componentes se empaquetan en el mismo paquete, los archivos XML correspondientes se deben introducir como una lista separada por comas. Por ejemplo:
    Service-Component: OSGI-INF/HelloService.xml, OSGI-INF/GoodbyeService
  5. A continuación se detalla la implementación Java™ del componente HelloService:
    package com.example.bundle;
    
    import com.example;
    import org.osgi.service.component.ComponentContext;
    
    /*
     * Esta clase debe ser pública y tener un constructor público predeterminado para que lo
     * pueda utilizar DS. No es necesario exportar esta clase desde el paquete.
     */
    public class HelloComponent implements HelloService {
    	/**
    	 	 * Opcional: método de DS para activar este componente. Si existe este método,
    	 	 * se invocará cuando se active el componente. Práctica adecuada: este
    	 	 * método debe ser protegido, no público o privado.
    	 * 
    	 * @param properties
    	 	 *            : correlación que contiene las propiedades de configuración y servicio
    	 *            populated/provided by config admin
    	 */
    	protected void activate(ComponentContext cContext, Map<String, Object> properties) {
    		modified(properties);
    	}
    
    	/**
    	 	 * Opcional: método de DS para desactivar este componente. Si existe este método,
    	 	 * se invocará cuando se desactive el componente. Práctica adecuada: este
    	 	 * método debe ser protegido, no público o privado.
    	 * 
    	 	 * @param reason
    	 	 *            representación entera del motivo por el que se detiene el componente
    	 */
    	protected void deactivate(ComponentContext cContext, int reason) {
    	}
    
    	/**
    	 	 * Opcional: método de DS para modificar las propiedades de configuración. Pueden
    	 	 * invocarlo varias hebras: las actualizaciones del administrador de configuración se pueden procesar
    	   * de forma asíncrona. Este se invoca mediante el método de activación y si no cuando
    	 	 * se modifican las propiedades de configuración cuando el componente está
    	 	 * activado.
    	 * 
    	 * @param properties
    	 */
    	public synchronized void modified(Map<String, Object> properties) {
    				// procesar las propiedades de configuración aquí
    	}
    
    	/**
    	 	 * Método de servicio definido por la interfaz com.example.HelloService
    	 */
    		public void sayHello() {
    				System.out.println("Hello");
    	}
    }

Icono que indica el tipo de tema Tema de tarea

Términos y condiciones para centros de información | Comentarios


Icono de indicación de fecha y hora Última actualización: 15 de junio de 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_declare_services_ds
Nombre de archivo:twlp_declare_services_ds.html