Instance de configuration unique et instances de configuration multiples

Vous pouvez aussi configurer plusieurs instances de configuration avec les services des métatypes OSGi.

Comme décrit dans Description de la configuration à l'aide du service des métatypes OSGi, vous pouvez utiliser le service de métatype OSGi afin de prendre en charge un ensemble unique de propriétés de configuration pour un service donné (identifié par un PID de configuration). Il est également courant de gérer plusieurs instances du même type de configuration, par exemple via la prise en charge par Liberty de plusieurs entrées pour les applications et les sources de données. Pour ce faire, vous pouvez fournir une définition de métatype qui indique à l'analyseur syntaxique de la configuration Liberty et au service d'administration de la configuration qu'il s'agit d'une configuration de fabrique. De plus, la classe qui reçoit la configuration doit implémenter l'interface org.osgi.service.cm.ManagedServiceFactory.

Pour prendre en charge plusieurs instances, définissez des éléments de configuration de niveau supérieur dans le fichier server.xml comme suit :
<server>
    <teenager name="joy" age="15" />
    <teenager name="angela" age="18" />
</server>
Vous devez définir la configuration dans les métadonnées en ajoutant un attribut factoryPid à l'élément Designate.
Remarque : Un attribut pid est également nécessaire si vous utilisez une interface ManagedServiceFactory pour recevoir la configuration ; si vous utilisez un composant de service déclaratif, il n'est pas requis.
<?xml version="1.0" encoding="UTF-8"?>
<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.1.0"  
                   xmlns:ibm="http://www.ibm.com/xmlns/appservers/osgi/metatype/v1.0.0">

    <OCD id="teenager-ocd" name="teenager" >
       <AD id="name" name="name" type="String" />
       <AD id="age" name="age" type="Integer" />
    </OCD>

    <Designate factoryPid="teenager" pid="teenager">
        <Object ocdref="teenager-ocd" />
    </Designate>
  
</metatype:MetaData>
L'implémentation ManagedServiceFactory est enregistrée en tant que type de service ManagedServiceFactory avec le PID de fabrique, comme suit :
bundleContext.registerService(ManagedServiceFactory.class, new MgdSvcFactoryImpl(), new Hashtable();
defaults.put(org.osgi.framework.Constants.SERVICE_PID, "teenager"));
The ManagedServiceFactory implementation receives a set of properties for each instance of the teenager configuration, each one uniquely identified by its own (internally generated) PID which is provided to the updated() method as follows:
public void updated(String pid, Dictionary<String, ?> properties)
			throws ConfigurationException {
	  String name = (String) properties.get("name");
    Integer age = (Integer) properties.get("age");
	}

Si une instance de configuration particulière est supprimée, par exemple parce que l'un des éléments teenager est supprimé du fichier server.xml, l'implémentation ManagedServiceFactory est notifiée via la méthode deleted() et le PID de l'instance supprimée est fourni. Ainsi, l'implémentation ManagedServiceFactory peut effectuer le suivi des instances qui sont valides à tout moment.


Icône indiquant le type de rubrique Rubrique de référence

Nom du fichier : rwlp_extensions_instances.html