Software Engineering

Open-Source Integration mit ServiceMix: die OSGi-Plattform

Bei einem Blick auf etablierte Enterprise-Software stellt sich die Frage, warum der Einsatz von Open-Source Software im Unternehmenskontext nicht häufiger in Erwägung gezogen wird. Und tatsächlich haben Analysen des Marktforschungsunternehmens Gartner festgestellt, dass Open-Source Lösungen auch in größeren Unternehmen immer mehr Bedeutung zukommt. Die Motive für den Einsatz von Open-Source Lösungen in unternehmenskritischen Bereichen sind höchst unterschiedlich.

Mit Apache ServiceMix existiert ein Open-Source Enterprise Service Bus (ESB), der das Potential hat, etablierte kommerzielle Lösungen in Unternehmen abzulösen. Da das kommerziell ausgerichtete Produkt JBoss Fuse von Red Hat auf dem Open-Source ESB basiert, hat das Projekt zusätzlich einen Unterstützer hinter sich, der großes Interesse an der Pflege und Weiterentwicklung von ServiceMix hat.

Diese Blogserie gibt Einsteigern einen Überblick über grundlegende Bestandteile des Open-Source ESB. In drei Teilen werden technische Grundlagen und Möglichkeiten des ServiceMix beschrieben. Oft haben Einsteiger Probleme, sich im Technologie-Dschungel von ServiceMix zurechtzufinden, weshalb sich die Einträge zunächst mit technologischen Konzepten befassen, bevor im letzten Eintrag ein konkretes Beispielszenario behandelt wird. Da ServiceMix eine OSGi-Plattform (Apache Karaf) als zugrundeliegende Laufzeitumgebung verwendet, wird starten wir mit einem Blick auf die OSGi-Spezifikation.

Das OSGi-Komponentenmodell

Ursprünglich für den Einsatz bei Embedded- und Netzwerkgeräten entworfen, stellt die OSGi-Plattform ein dynamisches Modulsystem für Java dar. Der Standard verfolgt die Idee, Softwareentwicklung mit Hilfe wiederverwendbarer Systemkomponenten zu vereinfachen. In OSGi sollen einzelne Softwarekomponenten durch eine Art Konfiguration in verschiedenen Anwendungsfällen beziehungsweise Kontexten verwendet werden können, um dadurch das dynamische Zusammensetzen von Anwendungen zu ermöglichen.

Einzelne Softwarekomponenten werden in der OSGi-Welt als Bundles bezeichnet. Ein Bundle ist einfach eine Menge von Java-Klassen und anderen Ressourcen, zusammengepackt in einem Java-Archiv (JAR). Im Wesentlichen unterscheidet sich ein solches Bundle von einem herkömmlichen Java-Archiv durch einige zusätzliche Metadaten, wie Name, Version oder Abhängigkeiten, im Archiv-Manifest. Solch ein Bundle stellt eine zusammenhängende abgeschlossene Einheit dar, die in eine eigenständige OSGi-Laufzeitumgebung installiert werden kann.

Um ein in dem Bundle enthaltenes Package nach außen hin zugänglich zu machen, muss dieses mit Hilfe der Manifest-Datei exportiert werden. Andere Bundles können in ihrer Manifest-Datei angeben, bestimmte exportierte Packages zu importieren. Das OSGi-Framework übernimmt dafür zur Laufzeit die Zuordnung der exportierten und importierten Packages. So ist es möglich Softwarekomponenten zu jeder Zeit dynamisch in die OSGi Umgebung integrieren zu können oder auch wieder zu entfernen ohne den Betrieb unterbrechen zu müssen. Aus diesem Grund wird OSGi-Technologie häufig für Einsatzgebiete mit besonderen Anforderungen an die Verfügbarkeit sowie Erweiterbarkeit in Betracht gezogen.

Apache ServiceMix auf Basis einer OSGi-Laufzeitumgebung

Was hat OSGi nun mit Apache ServiceMix zu tun? Seit Version 4 basiert ServiceMix auf der OSGi-Spezifikation und stellt eine Reihe unterschiedlicher, aufeinander abgestimmter OSGi-Bundles bereit. Durch das Zusammenfügen verschiedener Bundles in einem OSGi-Container entsteht ein vollwertiger ESB. Hier ein Überblick über die wichtigsten Komponenten in ServiceMix:

Von ServiceMix bereitgestellte Systemkomponenten (Auswahl)

Von ServiceMix bereitgestellte Systemkomponenten (Auswahl)

Apache Karaf bildet als OSGi-Container die Basis des Systems. Alle weiteren Bestandteile in ServiceMix sind OSGi kompatible Projekte, wie zum Beispiel Apache Camel. Die Camel JAR Dateien können also als Bundles in den Container deployed werden. In ServiceMix kommt Camel die Aufgabe eines Integrationsframeworks zu. Für die Integration anderer Systeme kann Camel dabei auf weitere verfügbare Komponenten wie Apache CXF, Jetty, etc. zurückgreifen. Für den Nachrichtenaustausch kann der JMS Message Broker (ActiveMQ) verwendet werden. Eigene Funktionalität wird ebenfalls in Form von OSGi-Bundles in den Karaf-Container deployed. Sind die Bundles von den Funktionalitäten anderer Komponenten abhängig, müssen diese explizit importiert werden.

Durch den Einsatz einer OGSi-Laufzeitumgebung reduziert ServiceMix den Grad der Kopplung einzelner Systembestandteile. Diese können fachlich getrennt als eigenständige Komponenten implementiert und betrieben werden. Wie Apache Camel als Integrationsframework die Interoperabilität zu anderen Systemen gewährleistet, wird im zweiten Teil erklärt. In einem dritten Artikel wende ich die Konzepte an, um exemplarisch ein konkretes Integrationsszenario zu lösen.