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 fréquent de prendre en charge plusieurs instances du même type de configuration, par exemple de la même façon que le profil Liberty prend en charge plusieurs entrées pour des applications et des 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.
<server>
<teenager name="joy" age="15" />
<teenager name="angela" age="18" />
</server>
<?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>
bundleContext.registerService(ManagedServiceFactory.class, new MgdSvcFactoryImpl(), new Hashtable();
defaults.put(org.osgi.framework.Constants.SERVICE_PID, "teenager"));
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.