Instancia de configuración única y varias instancias de configuración
También puede configurar diversas instancias de configuración múltiples mediante los servicios metatype de OSGi.
Como se describe en el tema Descripción de la configuración mediante OSGi Metatype Service, puede utilizar el servicio metatype OSGi para admitir un único conjunto de propiedades de configuración para un servicio dado (identificado por un PID de configuración). También es común admitir varias instancias del mismo tipo de configuración, de la manera en que, por ejemplo, Liberty admite varias entradas para aplicaciones y orígenes de datos. Esto se puede realizar proporcionando una definición de metatype que indique al analizador de configuración de Liberty y al servicio de administración de configuración que está tratando con una configuración de fábrica. Además, la clase que recibe la configuración necesita para implementar la interfaz 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 se suprime una instancia de configuración determinada, por ejemplo, porque se suprime uno de los elementos teenager del archivo server.xml, se notifica de la implementación ManagedServiceFactory a través del método deleted(), y se proporciona el pid de la instancia suprimida. De esta manera, la implementación ManagedServiceFactory realiza un seguimiento de las instancias que son válidas en cualquier momento.