Erste Schritte mit OSGi - JAXenter

Erste Schritte mit OSGi

Heiko Seeberger

Die OSGi Service Platform (OSGi) hat sich zu einem sehr bedeutenden Standard im Java-Umfeld entwickelt. Also wird es für den engagierten Java-Entwickler allerhöchste Zeit, sich damit näher auseinander zu setzen.

OSGi prägt schon heute vielerorts die Java-Welt und schickt sich an, zu einer universellen Basistechnologie zu werden. So mancher Leser wird diesem bereits seit 2000 existierenden Standard vermutlich erstmalig in Form des Eclipse SDK oder der Eclipse Rich Client Platform begegnet sein, da die Eclipse-Plug-in-Architektur seit Version 3.0 auf OSGi basiert. Damit hat Eclipse zweifelsohne einen bedeutenden Anteil an der aktuellen Popularität dieser Technologie, die jedoch viel mehr zu bieten hat als ein „Modulsystem für Rich Clients“.

Diese fünfteilige Serie führt in die technischen Grundlagen von OSGi ein. Dabei wird Schritt für Schritt ein kleines Beispiel umgesetzt, sodass sich der Leser gleich mit der Praxis vertraut machen kann. Beginnen wir mit einem Überblick über OSGi und natürlich einem obligatorischen „Hello World!“-Beispiel.

Ein Blick zurück

Bevor wir uns den Eigenschaften und Vorzügen von OSGi widmen und den ersten Schritten in der Praxis widmen, werfen wir einen kurzen Blick auf die Historie. Ursprünglich wurde OSGi nicht mit Blick auf Rich Clients oder gar Server, sondern für so genannte Residential Internet Gateways – Systeme aus der Gebäudetechnik – konzipiert. Derartige Systeme erfordern üblicherweise Fernmanagement sowie Installation von Komponenten im laufenden Betrieb. Mit diesen Anforderungen im Fokus entstand die erste Version der OSGi-Spezifikation, deren Urheber zahlreiche namhafte Unternehmen sind, die sich 1999 zu diesem Zweck in einer internationalen Organisation zusammenfanden, der OSGi Alliance [1]. OSGi stand ursprünglich als Abkürzung für „Open Service Gateway Initiative“, heute steht der Begriff für sich bzw. als Teil von OSGi Service Platform, Titel der aktuellen Spezifikation (Version 4.1).

Ein dynamisches und serviceorientiertes Modulsystem

Warum ist OSGi eigentlich so erfolgreich? Welchen Eigenschaften ist zu verdanken, dass OSGi aus der Java-Welt kaum mehr wegzudenken ist?

Die OSGi Alliance definiert OSGi bzw. die OSGi-Technologie als dynamisches Modulsystem für Java. Damit werden zwei der drei aus unserer Sicht entscheidenden Merkmale aufgeführt: Modularisierung und Dynamik.

Modularisierung ist ein „altes Hausmittel“ – nicht nur in der Informatik -, um komplexe Probleme zu lösen. Schließlich lassen sich überschaubare Häppchen leichter verdauen als das große Ganze. Die Objektorientierung im Allgemeinen und Java im Speziellen bieten bereits Möglichkeiten zur Modularisierung, z.B. in Form von Klassen, Paketen, Sichtbarkeitsregeln etc. Allerdings hat sich in der Praxis herausgestellt, dass Java ein Modulkonzept „oberhalb“ von Packages vermissen lässt. OSGi schließt diese Lücke, sodass anstelle der sonst oft anzutreffenden monolithischen Systeme solche treten, die aus verschiedenen Modulen mit wohl definierten öffentlichen Schnittstellen und Abhängigkeiten bestehen.

Wer meint, Modularisierung sei auch organisatorisch zu erzielen, z.B. durch mehrere Projekte oder durch den Einsatz von komponentenorientierten Build-Systemen wie Maven, der betrachtet nur die halbe Wahrheit bzw. den halben Lebenszyklus von Software. OSGi hingegen adressiert nicht nur den Zeitraum der Entwicklung, sondern insbesondere auch das Laufzeitverhalten: Es wird spezifiziert, wie Module im laufenden Betrieb unter Berücksichtigung ihrer Abhängigkeiten installiert, aktualisiert und entfernt werden können. Gerade diese Dynamik macht OSGi für serverseitige bzw. hochverfügbare Systeme ausgesprochen interessant, da Hot Deployment im Standard inklusive ist.

Die dritte aus unserer Sicht wesentliche Eigenschaft von OSGi ist ein serviceorientiertes Programmiermodell: Module können Objekte als Services bereitstellen, indem sie diese an der OSGi Service Registry registrieren. Andere Module können diese Services abrufen und auf diese Weise untereinander kommunizieren. Dies führt zu einer losen Kopplung der beteiligten Module.

Abb. 1: Herausragende OSGi-Eigenschaften

Jede dieser drei Eigenschaften, Modularisierung, Laufzeitdynamik und Serviceorientierung, ist nichts Neues an sich, aber OSGi verbindet diese synergetisch, sodass sich die folgenden konkreten Nutzenpotenziale ergeben (Abb. 1):

  • Erhöhte Flexibilität durch rigorose Trennung von API und Implementierung
  • Einsparung von Entwicklungskosten durch Wiederverwendung von Modulen
  • Einsparung von Betriebskosten durch standardisiertes Lifecycle Management, z.B. Hot Deployment oder parallelen Betrieb mehrerer Modulversionen
  • Hohe Qualitätseffizienz durch gute Testbarkeit aufgrund von loser Kopplung
  • Nutzung neuer Möglichkeiten, z.B. in der Softwareverteilung

Diese und weitere Vorzüge (obige Aufzählung ist ohne Anspruch auf Vollständigkeit) haben OSGi einen festen und bedeutenden Platz in der Java-Welt verschafft. Doch wie unterstützt OSGi die beschriebenen Eigenschaften? Um diese Frage zu beantworten, werfen wir zunächst einen Blick auf die Gesamtarchitektur. Die vorzügliche OSGi-Spezifikation, die in Form von Core Specification und Service Compendium vorliegt, definiert im Wesentlichen das OSGi Framework sowie die OSGi Standard Services. Das OSGi Framework bzw. eine Implementierung dieses stellt die Laufzeitumgebung für Software auf Basis von OSGi dar. Die Standardservices, z.B. Log Service oder Http Service, standardisieren die Lösung typischer Problemstellungen und können in eigenen Systemen genutzt werden. Wir werden auf ausgewählte Standardservices in einer späteren Folge eingehen, das nächste mal aber soll das OSGi Framework unter die Lupe genommen werden.

Heiko Seeberger ist als Technical Director für die Weigle Wilczek GmbH tätig. Sein technischer Schwerpunkt liegt in der Entwicklung von Unternehmensanwendungen mit OSGi, Eclipse RCP, Spring, AspectJ und Java EE. Seine Erfahrungen aus über zehn Jahren IT-Beratung und Softwareentwicklung fließen in die Eclipse Training Alliance ein. Zudem ist Heiko Seeberger aktiver Committer in Eclipse-Projekten, Autor zahlreicher Fachartikel und Redner auf einschlägigen Konferenzen.

Geschrieben von
Heiko Seeberger
Kommentare

Schreibe einen Kommentar

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