Die anpassbare Anwendung

Plug-ins installieren

Bis hierhin hat es sich gezeigt, dass auf Basis von OSGi recht gut ein Plug-in-System aufgebaut werden kann. Dennoch ist die technische Realisierung nicht alles, denn mindestens genauso wichtig ist die Benutzbarkeit. Administratoren einer Webanwendung müssen also zum einen wissen, welche Plug-ins überhaupt zur Verfügung stehen, zum anderen müssen eine einfache Installation und Aktualisierung gewährleistet sein. Die typische Lösung dafür ist ein Plug-in-Verzeichnis, das z. B. über eine Weboberfläche in die Anwendung integriert wird. Wird Apache Karaf als OSGi-Container verwendet, lässt sich ein solches Verzeichnis recht effizient realisieren, da hierbei die eingebaute Deployment-Infrastruktur benutzt wird. Dafür wird in Karaf eine Featureliste hinzugefügt. Listing 7 zeigt das beispielhaft an einer Liste von zwei Features, die jeweils unterschiedliche Bundles beinhalten.

Listing 7
mvn:de.tarent.osgi.plugins/project-list-plugin/1.0.1mvn:de.tarent.projects/projects-api/5.7.0mvn:de.tarent.osgi.plugins/slides-list-plugin/2.0.1mvn:de.tarent.documents/documents-api/1.0.0

Die URLs der angegeben Bundles können neben den gängigen URLs wie http:// oder file:// auch Maven-URLs wie im Beispiel sein. Die Maven Repositories, die Karaf verwendet, können konfiguriert werden, womit eine Installation von beliebigen Bundles aus dem Internet unterbunden werden kann. Um ein öffentliches oder auch nur unternehmensinternes Plug-in-Verzeichnis anzubieten, muss lediglich die Liste der verfügbaren Plug-ins bzw. Features auf einem Server oder in einem Maven Repository hinterlegt und Karaf hinzugefügt werden. Über die Karaf Console oder die optionale Webkonsole lassen sich die Features dann bequem installieren. Um einen Schritt weiter zu gehen und die Installation in die eigene Administrationsoberfläche zu integrieren, kann der Karaf-Featureservice genutzt werden, der Methoden zur Installation und Deinstallation von Features bereitstellt. Listing 8 zeigt die nötige Blueprint-Konfiguration, um den Featureservice zu referenzieren, denn der ist natürlich auch ein OSGi-Service.

Listing 8
Der Plug-in-Entwickler

Das beste Plug-in-System macht wenig Sinn, wenn am Ende niemand Erweiterungen dafür entwickelt. Daher ist es sehr wichtig, potenziellen Plug-in-Entwicklern das Leben von vornherein einfach zu machen, das heißt natürlich Dokumentation des Plug-in-APIs, eine Mailingliste für Fragen und das einfache Bereitstellen der Plug-ins im zentralen Plug-in-Verzeichnis. Selbst wenn es sich um eine unternehmensinterne Anwendung handelt, sind diese Punkte von Bedeutung. Mindestens genauso wichtig ist aber der einfache Start, um schnell ein Plug-in-Projekt aufsetzen und sich dann auf das Wesentliche bei der Entwicklung konzentrieren zu können. Ein einfacher Weg, um das zu realisieren, sind Maven Archetypes, also Maven-Projekt-Templates, mit denen sehr schnell das Projekt-Setup erledigt werden kann. Ein Archetype für Plug-in-Entwickler sollte dabei mindestens ein „Hello World“-Plug-in mitbringen. Grundsätzlich schadet es auch nicht, verschiedene Archetypes für unterschiedliche Arten von Plug-ins zu erzeugen, denn damit lassen sich auch hervorragende Beispiele zum Ausprobieren umsetzen. Ein wichtiger Unterschied zur normalen Anwendung ist allerdings, dass ein Plug-in nicht einfach in einen Application-Server oder OSGi-Container deployt wird, sondern eine direkte Erweiterung einer bestehenden Anwendung ist. Für Entwickler ist es daher sehr hilfreich, wenn sie ihr Plug-in direkt in der Zielanwendung testen können. Gott sei Dank, bietet das Maven-Pax-Plug-in hier Abhilfe. Wie in Listing 9 können nämlich zusätzliche OSGi Bundles angegeben werden, die ebenfalls gestartet werden sollen.

Listing 9
org.ops4jmaven-pax-pluginfelixcompendium,web,warmvn:de.tarent.osgi/employee-directory/2.0.0

Die Konfiguration im Beispiel lädt die Anwendung sogar aus dem Maven Repository herunter, wodurch sich der Aufwand für den Entwickler weiter reduziert.

Fazit

Ein Plug-in-System zu entwickeln, ist nicht unbedingt einfach und es muss schon einen Grund dafür geben. Doch das Gute ist, dass die Schwierigkeit eher im richtigen Design des Plug-in-APIs besteht, während mit OSGi eine inzwischen vernünftig benutzbare und ausgereifte technische Basis bereitsteht. Besonders sticht natürlich Apache Karaf mit seinen Features hervor, mit denen man sogar noch die Infrastruktur eines Plug-in-Verzeichnisses geschenkt bekommt.

Jan Ehrhardt arbeitet als Softwareentwickler bei der tarent solutions GmbH in Bonn (http://tarent.de). Seine Schwerpunkte sind große Webanwendungen, Eclipse RCP und freie Roboter (http://freedroidz.org). Kontakt: jan.ehrhardt[at]tarent.de, @derjan.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.