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.

Gehen Sie wie folgt vor, um mehrere Instanzen von Konfigurationselementen der obersten Ebene in der Datei server.xml zu unterstützen:
<server>
    <teenager name="joy" age="15" />
    <teenager name="angela" age="18" />
</server>
Sie müssen die Konfiguration in Metadaten definieren, indem Sie ein factoryPid-Attribut zum Element Designate hinzufügen.
Anmerkung: Wenn Sie eine ManagedServiceFactory-Schnittstelle verwenden, um die Konfiguration zu erhalten, wird immer noch ein pid-Attribut benötigt. Verwenden Sie eine DS-Komponente (Declarative Service), ist dies nicht erforderlich.
<?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>
Die Implementierung von ManagedServiceFactory wird als ManagedServiceFactory-Servicetyp mit der Factory-PID wie folgt registriert:
bundleContext.registerService(ManagedServiceFactory.class, new MgdSvcFactoryImpl(), new Hashtable();
defaults.put(org.osgi.framework.Constants.SERVICE_PID, "teenager"));
Die ManagedServiceFactory-Implementierung erhält eine Gruppe mit Eigenschaften für jede Instanz der teenager-Konfiguration, wobei jede Eigenschaft durch ihre eigene (intern generierte) PID eindeutig gekennzeichnet ist. Die PID wird wie folgt an die Methode updated() übergeben:
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.


Symbol das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 01.12.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=rwlp_extensions_instances
Dateiname: rwlp_extensions_instances.html