O'Reilly logo

Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox by Matthias Lübken, Bernd Kolb, Nils Hartmann, Gerd Wütherich

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

227
13 Der Config Admin Service
Motivation
Im ersten Teil dieses Buches haben Sie am Beispiel des Translation Ser-
vice unterschiedliche Möglichkeiten kennengelernt, mit Services inner-
halb des OSGi Frameworks zu arbeiten. Die Konfiguration des Trans-
lation Service (also seine Zielsprache) haben wir bei der Erzeugung der
Klasse
TranslationServiceImpl gesetzt, indem wir das Default-Locale
der Laufzeitumgebung als Konstruktorparameter übergeben haben. In
Kapitel 12 haben wir Ihnen außerdem gezeigt, wie Sie bei der Verwen-
dung von deklarativen Services Komponenten über Component Pro-
perties parametrisieren können.
In diesem Kapitel stellen wir Ihnen mit dem Config Admin Service
einen Service vor, der die zentrale Konfiguration von beliebigen Bund-
les und Services zur Laufzeit ermöglicht. Über eine definierte Schnitt-
stelle können Management Agents auf den Config Admin Service
zugreifen, um Konfigurationen anzuzeigen und zu bearbeiten.
Einige Management Agents, etwa der Knopflerfish-Desktop, bie-
ten grafische Frontends, über die Sie die Konfigurationen von Bundles
und Services verwalten können. Die Equinox-Konsole unterstützt das
Arbeiten mit dem Config Admin Service nicht explizit. Sie kann aber
einfach um entsprechende Kommandos erweitert werden.
Einordnung
Der Config Admin Service ist in Kapitel 104 »Configuration
Admin Service Specification« des Service Compendium und der
Mobile Specification beschrieben. Eng verwandt mit dem Config
Admin Service ist der Metatype Service, den wir Ihnen im nachfolgen-
den Kapitel vorstellen werden.
13.1 Tutorial: Ein administrierbarer Translation Service
Übersicht
Im Tutorial zu diesem Kapitel werden wir das Beispiel aus Kapitel 11
dahingehend umbauen, dass die Zielsprache des Translation Service
über den Config Admin Service konfigurierbar ist. Auf diese Art und
13 Der Config Admin Service228
Weise nnen Sie die Zielsprache zur Laufzeit setzen und ändern. Im
Einzelnen realisieren wir die folgenden Änderungen (vgl. Abb. 13–1):
Implementierung eines Managed Service: An der Klasse
Translati-
onServiceImpl
implementieren wir das Interface org.osgi.ser-
vice.cm.ManagedService
, über das der Config Admin Service Konfi-
gurationen setzen kann.
Implementierung eines
configure-Kommandos: Da die Eclipse-
Equinox-Konsole keine Kommandos für Arbeiten mit dem Config
Admin Service bereitstellt, implementieren wir ein zusätzliches
Bundle
org.osgibook.console.cm. Dieses Bundle realisiert das Kon-
solenkommando
configure, über das Konfigurationen am Config
Admin gesetzt werden können.
Abb. 13–1
Übersicht über die
beteiligten Bundles
CommandProvider
META-INF
MANIFEST.MF
org.osgibook.translation
META-INF
MANIFEST.MF
org.osgibook.translation.impl
TranslationService,
ManagedService
META-INF
MANIFEST.MF
translation_de_DE.properties
MANIFEST.MF
META-INF
org.osgibook.helloworld
CommandProvider
CommandProvider
r
MANIFEST.MF
META-INF
org.osgibook.console.cm
Config Admin
g
OSGi Service Platform /
Config Admin Service
verwendet
Klassen aus
verwendet
Service
22913.1 Tutorial: Ein administrierbarer Translation Service
Die Plug-in-Projekte
In Abb. 13–2 ist der Aufbau der fertigen Projekte aus diesem Beispiel
dargestellt.
Schritt 1: Den Translation Service zu einem Managed Service machen
Damit die Implementierung des Translation Service über den Config
Admin Service konfiguriert werden kann, muss diese das Interface
org.osgi.service.cm.ManagedService implementieren. Dieses Interface
definiert die Methode
update(), über die der Config Admin Service
neue oder geänderte Konfigurationen setzt. Wir nehmen deshalb in
diesem Schritt die folgenden Änderungen an der Implementierung des
Translation Service vor:
Die Implementierung des Config Admin Service ist in Eclipse Equinox 3.3 nicht
Bestandteil der Standard-Distribution, sondern muss zusätzlich aus dem
Equinox Incubator in Form des Bundles
org.eclipse.equinox.cm_<ver-
sion>.jar
heruntergeladen werden (vgl. Abschnitt 1.4.3).
Grund für die Nichtaufnahme des Bundles in die Standard-Distribution sind
verschiedene Probleme im Bereich der Multi-Threading-Fähigkeit. Es ist
jedoch zu erwarten, dass das Bundle Bestandteil der Standard-Distribution für
Eclipse Equinox 3.4 wird.
Abb. 13–2
Die Plug-in-Projekte
Achtung
13 Der Config Admin Service230
Implementierung des ManagedService-Interface: An der Klasse
TranslationServiceImpl implementieren wir das Interface Managed-
Service
. Innerhalb der update()-Methode setzen wir die Konfigura-
tion, die den Länder- und Sprachcode festlegt.
Propagieren der Service-Konfiguration: In der Spezifikation des
Config Admin Service wird empfohlen, die in einer Konfiguration
gesetzten Properties zusätzlich als Service Properties verfügbar zu
machen, damit diese bspw. über Management Agents ausgewertet
werden können. Um dies zu ermöglichen, implementieren wir eine
zusätzliche Methode
setServiceRegistration(), über die die Service
Registration des Translation Service gesetzt werden kann. Die Ser-
vice Registration wird in der
update()-Methode genutzt, um die in
einer Konfiguration gesetzten Properties als Service Properties ver-
fügbar zu propagieren.
Die angepasste
TranslationServiceImpl-Klasse ist in Listing 13–1 abge-
bildet.
package org.osgibook.translation.impl;
[...]
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedService;
public class TranslationServiceImpl
implements TranslationService, ManagedService {
private static final String TRANSLATION_COUNTRY =
"translation.country";
private static final String TRANSLATION_LANGUAGE =
"translation.language";
private ResourceBundle translations;
private ServiceRegistration registration;
public TranslationServiceImpl() {
translations = null;
}
public String getTranslation(String message) {
try {
return translations.getString(message);
} catch (MissingResourceException e) {
return "";
}
}
Listing 13–1
Die Klasse
TranslationServiceImpl
23113.1 Tutorial: Ein administrierbarer Translation Service
public void updated(Dictionary properties)
throws ConfigurationException {
Dictionary config =
properties == null ? getDefaultConfig() : properties;
registration.setProperties(config);
Locale locale = getLocaleFromConfiguration(config);
translations =
ResourceBundle.getBundle("translation", locale);
}
Dictionary getDefaultConfig() {
Dictionary defaultConfig = new Hashtable();
defaultConfig.put(TRANSLATION_LANGUAGE, "de");
defaultConfig.put(TRANSLATION_COUNTRY, "DE");
defaultConfig.put(Constants.SERVICE_PID,
TranslationService.class.getName());
return defaultConfig;
}
void setServiceRegistration(ServiceRegistration registration) {
this.registration = registration;
}
private Locale getLocaleFromConfiguration(Dictionary properties)
throws ConfigurationException {
String language =
(String) properties.get(TRANSLATION_LANGUAGE);
String country =
(String) properties.get(TRANSLATION_COUNTRY);
if (language == null) {
throw new ConfigurationException(TRANSLATION_LANGUAGE,
"Es muss eine Sprache angegeben sein.");
}
if (country == null) {
throw new ConfigurationException(TRANSLATION_COUNTRY,
"Es muss ein Land angegeben sein.");
}
return new Locale(language, country);
}
}
Schritt 2: Den Managed Service an der Service Registry anmelden
Damit der Managed Service vom Config Admin Service verwaltet wer-
den kann, muss er unter dem Interface-Namen
org.osgi.service.cm.
ManagedService
an der Service Registry registriert werden. Dies reali-
sieren wir in der Aktivatorklasse des Bundles
org.osgibook.translation.
impl
.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required