Einzelne und mehrere Konfigurationsinstanzen
Sie können auch mehrere Konfigurationsinstanzen mit den OSGi-Metatypservices konfigurieren.
Wie im Artikel Konfiguration mit OSGi-Metatypservice beschreiben beschrieben, können Sie den OSGi-Metatypservice verwenden, um eine einzelne Gruppe mit Konfigurationseigenschaften für einen bestimmten Service (wie von einer Konfigurations-PID angegeben) zu unterstützen. Es ist auch üblich, mehrere Instanzen desselben Konfigurationstyps zu unterstützen, z. B. dergestalt, dass das Liberty-Profil mehrere Einträge für Anwendungen und Datenquellen unterstützt. Dies kann bewerkstelligt werden, indem man eine Metatypendefinition bereitstellt, die den Liberty-Konfigurationsparser und den Konfigurationsverwaltungsservice darüber informiert, dass eine Factory-Konfiguration vorliegt. Außerdem muss die Klasse, die die Konfiguration erhält, die Schnittstelle org.osgi.service.cm.ManagedServiceFactory implementieren.
<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");
}
Wenn eine bestimmte Konfigurationsinstanz gelöscht wird, zum Beispiel weil eines der teenager-Elemente aus der Datei server.xml gelöscht wird, wird die ManagedServiceFactory-Implementierung über die Methode deleted() benachrichtigt Methode, und die PID der gelöschten Instanz wird bereitgestellt. Dies ermöglicht der ManagedServiceFactory-Implementierung, die Instanzen, die zu einem bestimmten Zeitpunkt gültig sind, zu verfolgen.