Software Engineering

Open Source Integration mit ServiceMix: Hands-on Tutorial

Einsteiger haben oft Probleme sich im Technologie-Dschungel von ServiceMix zurechtzufinden. Hilfestellung gibt es in den meinen beiden Blogeinträgen über die OSGI-Plattform und Apache Camel. Nun wird es Zeit ein erstes kleines Integrationsbeispiel umzusetzen. Das Verständnis für die Konzepte und Technologien hinter ServiceMix helfen zu verstehen, wie der Open-Source ESB tatsächlich verwendet wird um Integrationsprobleme zu lösen.

Integration durch Blueprint XML Konfigurationen

Wie wird das Integrationsframework Apache Camel verwendet um Integrationsprobleme zu lösen? Die einfachste Möglichkeit bietet ServiceMix mit Hilfe sogenannter Blueprint XML Konfigurationen. Dabei lassen sich in einer einfachen XML-Datei Camel-Routen erstellen und mit Hilfe des Hot-Deployment von Apache Karaf in das System installieren. Exemplarisch wird die Umsetzung des folgenden Szenarios gezeigt: Max hat sich Aktien der Firma Lufthansa gekauft und möchte seine Geldanlage immer im Blick behalten. Sobald Nachrichten zu seiner Aktie veröffentlicht werden, soll er automatisch eine E-Mail erhalten. Zur Lösung des Beispiels soll ServiceMix den RSS-Feed des Magazins Börse Online beobachten und Max bei zutreffenden Nachrichten durch eine E-Mail informieren.

Für die Realisierung wird nicht mehr benötigt als die aktuelle Version des ServiceMix sowie ein einfacher Texteditor zum Erstellen der XML Datei.

  1. Download des Apache ServiceMix
  2. ServiceMix starten: Navigiere in der Konsole zu dem entpackten ServiceMix Verzeichnis und starte den ESB mit ./bin/servicemix
  3. Durch das list Kommando werden die installierten OSGi Bundles angezeigt.
  4. Zur Lösung des Beispiels müssen die Camel Components camel-rss und camel-mail installiert werden. Diese beiden Camel Components können als OSGi Bundles in ServiceMix installiert werden, indem feature:install camel-rss und feature:install camel-mail in der Konsole ausgeführt wird.
  5. Nun muss die Route in einer XML Datei definiert werden, um den Anwendungsfall zu erfüllen:
    Blueprint Integrationsbeispiel ServiceMix
  6. Indem diese XML Datei in das Unterverzeichnis mit dem Namen deploy gespeichert wird, startet ServiceMix automatisch die definierte Route.

Als Quelle der Nachricht dient die von Camel bereitgestellte RSS Component. Diese verwendet einen sogenannten Polling Consumer, um von einem RSS Feed periodisch neue Einträge abzufragen. Anschließend wird der Route ein Processor (marshal) hinzugefügt, der die Nachricht in das RSS Format umwandelt. Zuletzt werden durch einen Filter nur die Nachrichten, die den Begriff Lufthansa enthalten,  an die Mail Component weitergeleitet und so an die angegebene E-Mail Adresse geschickt.

Zugegeben handelt es sich bei diesem Beispiel um ein sehr einfaches Szenario, es zeigt aber wie einfach Systeme beziehungsweise Dienste durch die Camel Routing Engine integriert werden können. Denn jede Integrationslösung nutzt dieselben Konzepte und erfolgt immer auf die gleiche Art und Weise: es existieren Producer, Consumer und Processors. Alle Bestandteile fügen sich in Routen zusammen. Solange eine Component für den benötigten Zweck bereitsteht, kann die Interoperabilität heterogener Systeme in ServiceMix durch Camel realisiert werden.

Entwicklungsumgebung und modulare Integration

Findet sich für ein Szenario keine passende Lösung in Form von Camel Components oder Processors, reicht die einfache Konfiguration von Camel Routen in XML Konfigurationen nicht mehr aus um das Integrationsproblem zu lösen. Für solch komplexe Probleme können Custom Components und Processors implementiert werden. Zur Unterstützung empfehle ich aufgrund der guten Camel Unterstützung die Verwendung der Red Hat JBoss Fuse IDE. Nach der Installation der IDE sollte die JBoss Fuse Development Erweiterung installiert werden.

Die Fuse Tooling Erweiterung bietet unter anderem einen praktischen Camel Editor

Die Fuse Tooling Erweiterung bietet unter anderem einen praktischen Camel Editor

Ist diese Erweiterung installiert, können neue Camel Projekte einfach durch Maven Archetypes aufgesetzt werden. Dazu in dem Menü den Punkt New Fuse Project auswählen und ein entsprechendes Archetype auswählen, zwei wichtige sind zum Beispiel die Folgenden:

  • camel-archetype-spring: Erstellt ein einfaches Camel Projekt, das mit Hilfe der Spring DSL eine Beispielroute definiert.
  • camel-archetype-component: Erstellt das Grundgerüst für eine neue Custom Camel Component.

Das oben gewählte Beispielszenario könnte also mit Hilfe von JBoss Fuse und dem ersten der beiden Archetypes auch als Camel Projekt implementiert werden. So zeigt die Abbildung die Darstellung der oben definierten Route in dem Apache Camel Editor. Dieser ermöglicht es Routen durch Drag and Drop zu erstellen und hilft bei der Konfiguration der einzelnen Komponenten. Neben der Definition von Routen können in dem Camel Projekt eigene Processors als Java Klassen implementiert werden und so eine Nachricht flexibel durch individuelle Funktionalitäten verarbeitet werden.

Die Beispielroute in dem Apache Camel Editor

Die Beispielroute in dem Apache Camel Editor

Indem mvn camel:run ausgeführt wird, kann das Camel Projekt mit Hilfe von Maven auch außerhalb von ServiceMix in der lokalen Entwicklungsumgebung gestartet und getestet werden. Für den Betrieb in ServiceMix muss das Projekt zuerst als OSGi Bundle verpackt und anschließend in ServiceMix deployed werden. Das Apache Felix Maven Bundle Plugin bietet die wohl einfachste Möglichkeit aus dem Projekt ein OSGi Bundle zu erstellen. Dazu muss der <plugins> Bereich der POM Datei entsprechend erweitert werden.

Apache Felix Maven Bundle Plugin (BND) in der POM Datei

Apache Felix Maven Bundle Plugin (BND) in der POM Datei

Durch mvn install erzeugt das Plugin nun eine OSGi kompatible JAR Datei. Diese kann durch Einfügen in das Unterverzeichnis mit dem Namen deploy zu ServiceMix hinzugefügt werden.

Wird eine Custom Component implementiert, muss diese nach demselben Vorgehen mit Hilfe des anderen Archetypes aufgesetzt werden. Die implementierte Component kann dann ebenfalls als OSGi Bundle verpackt beziehungsweise deployed werden und ist so für Routendefinitionen in Servicemix verwendbar. Insgesamt führt ein solch modularer Aufbau zu einem sehr flexiblen System, wo einzelne Bestandteile während des Betriebs ausgetauscht und erweitert werden können.

Diese Blogserie hat Einsteigern einen Überblick über grundlegende Bestandteile des Open-Source ESB gegeben. Wer sich jedoch weiter mit ServiceMix beschäftigen möchte oder tatsächlich den Einsatz des Produktes im Unternehmenskontext nachdenkt, sollte sich neben OSGi und Camel auch über restlichen Bestandteile des ESB informieren. Die BPMN Engine Activiti wird zum Beispiel in ServiceMix zur Modellierung und Automatisierung von Geschäftsprozessen genutzt und stellt damit eine weitere interessante Komponente in ServiceMix dar.