Localisation des applications OSGi

Vous pouvez utiliser les classes du package org.apache.aries.blueprint pour étendre le modèle de programmation d'application OSGi ; cette interface SPI tierce est mise à disposition via la fonction de serveur blueprint-1.0. Vous devez accéder aux bundles d'application OSGi afin d'appliquer vos extensions. Dans Liberty, les applications OSGi s'exécutent en tant que sous-systèmes. Pour localiser une application OSGi, vous pouvez créer un objet ServiceTracker dans une fonction utilisateur.

Pourquoi et quand exécuter cette tâche

Cette rubrique explique comment le développeur d'une fonction utilisateur peut localiser des applications OSGi existantes. Cette tâche est souvent requise pour les fonctions utilisateur qui fournissent des extensions de modèle de programmation dans les applications OSGi. Par exemple, une nouvelle fonction utilisateur peut fournir de telles extensions en implémentant un nouvel extenseur de bundle, souvent appelé conteneur, ou plus simplement, en effectuant le suivi des services publiés depuis certaines applications OSGi et en les appelant.

Ce type de fonctions utilisateur doivent utiliser l'élément BundleContext d'une application OSGi exécutée particulière afin de créer de nouvelles instances BundleTracker et ServiceTracker. Ce contexte BundleContext peut être obtenu du service org.osgi.service.subsystem.Subsystem qui est associé à l'application OSGi. La procédure ci-dessous explique comment obtenir ce service de sous-système.

Procédure

Pour localiser une application OSGi en créant un élément ServiceTracker dans une fonction utilisateur, procédez comme suit :

  1. Construisez un filtre org.osgi.framework.Filter qui cible le sous-système à localiser.
  2. Créez un élément org.osgi.util.tracker.ServiceTracker qui utilise le filtre de l'étape 1 afin d'obtenir le service org.osgi.service.subsystem.Subsystem associé à l'application OSGi à localiser. Cette instance de service Subsystem fournit tout ce dont vous avez besoin pour utiliser l'application OSGi.

Exemple

L'exemple suivant explique comment localiser une application dont le nom symbolique est my.app en utilisant un élément ServiceTracker dans une fonction utilisateur :
import org.osgi.framework.BundleContext;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
Dans l'extrait de code suivant, la variablectx est l'élément BundleContext de l'un des bundles de la fonction utilisateur :
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);
Le dernier paramètre 'null' peut être remplacé par une instance d'une classe qui implémente ServiceTrackerCustomizer<Subsystem, Subsystem> :
org.osgi.util.tracker.ServiceTracker<Subsystem, Subsystem> str = new ServiceTracker<Subsystem, Subsystem>(ctx, filter, null);
L'objet SERVICE_FILTER peut être construit en vue de l'utilisation de constantes telles que :
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;

Icône indiquant le type de rubrique Rubrique Tâche



Icône d'horodatage Dernière mise à jour: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_locate_osgi
Nom du fichier : twlp_locate_osgi.html