Ubicación de las aplicaciones OSGi

Puede utilizar las clases del paquete org.apache.aries.blueprint para ampliar el modelo de programación OSGi; esta SPI de terceros se proporciona mediante la característica de servidor blueprint-1.0. Debe acceder a los paquetes de aplicación OSGi para solicitar las ampliaciones. En el perfil Liberty, las aplicaciones OSGi se ejecutan como subsistemas. Para ubicar una aplicación OSGi puede crear un ServiceTracker en una característica de usuario.

Acerca de esta tarea

En este tema se describe cómo puede el desarrollador de una característica de usuario ubicar las aplicaciones OSGi en ejecución. Esta tarea suele ser necesaria para las características de usuario que proporcionan ampliaciones del modelo de programación a las aplicaciones OSGi. Por ejemplo, una nueva característica de usuario podría proporcionar tales ampliaciones implementando una nueva ampliación de paquete, a la que normalmente se hace referencia como contenedor, o bien, de forma más simple, llevando un seguimiento e invocando los servicios publicados desde determinadas aplicaciones OSGi.

Tales características de usuario deben utilizar BundleContext de una aplicación OSGi en ejecución determinada para crear nuevas instancias de BundleTracker y ServiceTracker. Este BundleContext se puede obtener del org.osgi.service.subsystem.Subsystem asociado a la aplicación OSGi. En el procedimiento siguiente se describe cómo obtener ese servicio Subsystem.

Procedimiento

Para ubicar una aplicación OSGi creando un ServiceTracker en una característica de usuario, lleve a cabo estos pasos:

  1. Construya un org.osgi.framework.Filter que esté orientado al Subsystem que desea ubicar.
  2. Cree un org.osgi.util.tracker.ServiceTracker que utiliza el filtro del paso 1 para obtener el servicio org.osgi.service.subsystem.Subsystem asociado a la aplicación OSGi que desea ubicar. Esta instancia de servicio Subsystem proporciona todo lo necesario para trabajar con la aplicación OSGi.

Ejemplo

En el ejemplo siguiente se muestra cómo ubicar una aplicación con nombre simbólico my.app utilizando un ServiceTracker en una característica de usuario:
import org.osgi.framework.BundleContext;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
En el extracto de código siguiente, la variable ctx es el BundleContext de uno de los paquetes de la característica de usuario:
String SERVICE_FILTER = "(&(objectClass=org.osgi.service.subsystem.Subsystem)
                           (subsystem.type=osgi.subsystem.application)(subsystem.symbolicName=my.app))"
    
      org.osgi.framework.Filter filter = ctx.createFilter(SERVICE_FILTER);
El último parámetro 'null' se puede sustituir por una instancia de una clase que implementa ServiceTrackerCustomizer<Subsystem, Subsystem>:
org.osgi.util.tracker.ServiceTracker<Subsystem, Subsystem> str = new ServiceTracker<Subsystem, Subsystem>(ctx, filter, null);
Se puede construir SERVICE_FILTER para hacer uso de esas constantes como:
org.osgi.framework.Constants.OBJECTCLASS;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_SYMBOLICNAME_PROPERTY;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_PROPERTY;

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_locate_osgi
Nombre de archivo:twlp_locate_osgi.html