Mit dem Apachen durch den Integrationsdschungel

Aus alt mach neu: Integration leicht gemacht
Kommentare

Die meisten Softwareprojekte starten heute nicht mehr auf der grünen Wiese. Meist geht es um Anbauten oder Altbausanierungen bestehender Anwendungen und Systeme. Wie Integration mit den Open-Source-Produkten von Apache einfacher wird, zeigt dieser Artikel.

Zu einer Zeit als IT noch EDV hieß und auf Großrechnern in abgeschotteten Rechenzentren stattfand, war das beliebteste Dateiaustauschverfahren das Versenden von Bändern mit Daten. Mangels Standards ein sehr fehleranfälliges, langsames und aufwändiges Verfahren. Einfacher wurde der Austausch zumindest intern, wenn die Daten in einem geteilten Dateisystem oder einer zentralen Datenbank abgelegt wurden. Durch das Aufkommen von verteilten Plattformen wie UNIX wurden die Systeme mit SMTP, FTP, NFS und RPC dann kommunikationsfreundlicher. Statt Punkt-zu-Punkt-Verbindungen wurden sternförmige Broker-Architekturen wie CORBA oder MQ eingesetzt. Jedoch war ein Austausch von Daten zwischen Firmen mit dem gleichzeitig aufkommenden Internet auf kleinere Datenmengen über HTTP begrenzt. Web Service sollte die alten Systeme mit SOA für das Internet bereit machen, letztendlich sind diese Integrationsansätze aber gescheitert, da sie zusätzliche Komplexität und Aufwände erzeugten. Außerdem schufen sie hinsichtlich Sicherheit und Zuverlässigkeit neue Probleme, denn die Standards waren oft nicht weitgehend genug oder nur sehr aufwändig zu benutzen. SOA verkam zu einer server- und produktorientierten Architektur.

Einen eher produktunabhängigen Ansatz für den Integrationsdschungel stellen seit 2003 die Enterprise Integration Patterns von Gregor Hohpe und Bobby Woolf dar. Diese Patterns beschreiben mit einem einfachen „Notation 65“- Muster in 7 Kategorien, wie man Integrationsprobleme strukturieren und ihre Lösung besser dokumentieren kann. Das Muster wurde das erste Mal fast vollständig im Apache-Produkt Camel (Abb. 1) umgesetzt. Bereits 2000 beschrieb Roy Fielding in seiner Dissertation den Representational-State-Transfer-Architekturstil (REST), der konsequent auf den bestehenden Verfahren und Protokollen des World Wide Webs aufsetzt, um damit leichtgewichtige RESTful Web Services über das Hyper Text Transfer Protocol (HTTP) anzubieten. Beide Ansätze erleichtern die Integration ohne viele neue Zusatzprodukte zu benötigen. Wie Tabelle 1 zeigt, setzen die hier besprochenen Apache-Produkte eine große Zahl der EIP-Muster um. Dadurch lassen sich Integrationsprobleme elegant und einfach lösen.

Abb. 1: Integrationsmuster mit Apache-Camel

Mustername ActiveMQ Camel ServiceMix
Kanal (9) 9 9 9
Endpunkt (1) 8 10 9
Erstellung (10) 9 10 10
Routing (12) 8 10
Transformation (7) 2 7 7
Überwachung (8) 3 6 6

Tabelle 1: In Apache-Produkten verwendete Integrationsmuster

CXF: das offene Serviceframework

CXF ist ein Multifunktionswerkzeug, das 2006 aus IONA Celtix und Codehaus XFire hervorgegangen ist. Über einen Minibus und angeschlossene Komponenten lassen sich verschiedene Frontends, wie JAX-WS oder JAX-RS verwenden, um mit Java oder JavaScript auf dessen Dienste über verschiedene Transportprotokolle, wie HTTP, JMS oder direkt innerhalb einer JVM Nachrichten auszutauschen. CXF erlaubt sowohl die Wahl zwischen einem Contract-First- oder Code-First-Ansatz als auch zwischen den Technologien REST und Web Services. Unterstützt wird eine breite Palette von Web-Service-Standards wie SOAP, das WSI-Basic Profile, WSDL, WS-Adressierung, WS-Policy, WS-ReliableMessaging, WS-Security, WS-SecurityPolicy, WS-Trust und WS-SecureConversation.

CXF bietet hier deutlich mehr Funktionen, Optionen und Standard-Unterstützung als sein direkter Apache-Konkurrent „Axis“, der nur Web Service auf veralteten Standards ermöglicht. Statt es nur für ein Seifenkistenrennen mit SOAP-Nachrichten zu benutzen, kann man mit CXF auch auf anderen Wegen busfahren (Abb. 2). Es integriert sich gut in andere Apache-Produkte und wird deshalb auch im Applikationsserver Geronimo oder in Camel verwendet. Über letzteres können auch andere Transportprotokolle, wie FTP, SMTP etc. verwendet werden. Von der Firma Progress kann man für das auf CXF beruhende Produkt FUSE Services Framework weiteren Support oder Dokumentation erhalten. Die Talend Service Factory liefert zusätzlich neben CXF noch Karaf mit.

Abb. 2: CXF-Architektur

Camel: der flexible Vermittler

Apache Camel ging 2007 als Unterprojekt von ActiveMQ als regelbasierte Routing- und Konvertierungs-Engine für Java und Scala hervor, die die meisten Enterprise-Integrationsmuster umsetzt. Dabei können diese entweder in einer .xml-Datei spezifiziert werden oder in einer eigenen Java-DSL programmiert werden. Die .xml-Datei hat den Vorteil, dass sie einfach zu ändern ist oder mit einem Eclipse-Plug-in des FUSE Integration Designer oder der Talend ESB Studio Standard Edition (SE) grafisch erstellt werden kann.

Mit mehr als 70 Komponenten bleibt kein Integrationsproblem offen und die anfallenden typischen Aufgaben, wie Transport, Transformation und Weiterleitung lassen sich damit elegant lösen (Abb. 3). Zu Camel selbst gibt es neben der mitgelieferten, umfangreichen Dokumentation und Beispielen inzwischen eigene Konferenzen und ein Buch, was den Einstieg erleichtert. Professionellen Support kann man bei den Firmen Progress für das Produkt FUSE Mediation Router oder Talend für die Service Integration Factory erhalten, die Camel um eigene Pakete und Dokumentation erweitert.

Abb. 3: typische Camel-Architektur

Um eine Camel-Route zu spezifizieren, kann sie entweder in einer .xml-Datei oder in einem Java-API (DSL) ausgedrückt werden (s. Listing 1).

  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
      <!-- incoming requests from the servlet is routed -->
      <from uri="servlet:///hello"/>
      <choice>
        <when>
          <!-- is there a header with the key name? -->
          <header>name</header>
          <!-- yes so return back a message to the user -->
          <transform>
            <simple>Hello ${header.name} how are you?</simple>
          </transform>
        </when>
        <otherwise>
          <!-- if no name parameter then output a syntax to the user -->
          <transform>
            <constant>Add a name parameter to uri, eg ?name=foo</constant>
          </transform>
        </otherwise>
      </choice>
    </route>
  </camelContext>

ActiveMQ: der Nachrichtentransporter

Die Java-Message-Service-Programmierschnittstelle (JMS) für die asynchrone Nachrichtenverarbeitung unterstützt zwei unterschiedliche Ansätze zum Versenden von Nachrichten: Zum einem die Nachrichtenwarteschlange (Queue) für Point-to-Point-Verbindungen und zum anderen ein Anmelde-Versendesystem (Topic) für die lose Publish-Subscribe-Kommunikation. Bei der Warteschlange kann nur von genau einem Empfänger (Consumer) eine Nachricht von einem Sender (Producer) empfangen werden, ähnlich einem Paketdienst. Beim Anmelde-Versendesystem werden die Nachrichten an eine beliebige Anzahl von Empfängern geschickt, die ein Themengebiet abonniert haben, ähnlich einem Fernsehsender. ActiveMQ kommt ins Spiel, wenn eine transaktionssichere, asynchrone Verarbeitung benötigt wird. Durch seinen Cross Language Client wird neben Java eine Vielzahl von Programmiersprachen unterstützt, sodass ActiveMQ auch außerhalb von Java eingesetzt werden kann, wenn es auch selbst in Java realisiert ist. ActiveMQ kann als JMS-Provider oder -Broker verwendet und innerhalb eines Java-Programms gestartet werden oder als Webanwendung mit integrierter Verwaltungskonsole in einem Webserver gestartet werden. Verschiedene Transportprotokolle, wie AMQP, OpenWire oder Stomp eignen sich für den verlässlichen Nachrichtenaustausch mit weiteren Datenquellen in der activemq.xml-Datei (Listing 2).

<transportConnectors>
  <transportConnector name="default" uri="tcp://0.0.0.0:61616"/>
  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
  <transportConnector name="stomp" uri="stomp://0.0.0.0:61612?transport.closeAsync=false"/> 
  <transportConnector name="stomp+nio" uri="stomp+nio://0.0.0.0:61613?transport.closeAsync=false"/> 
  <transportConnector name="udp" uri="udp://0.0.0.0:61617"/>
  <transportConnector name="ssl" uri="ssl://0.0.0.0:61618"/>
  <transportConnector name="nio" uri="nio://0.0.0.0:61616"/>
  <transportConnector name="udp" uri="udp://0.0.0.0:61617"/>
  <transportConnector name="ssl" uri="ssl://0.0.0.0:61618"/>
  <transportConnector name="http" uri="http://0.0.0.0:61619)"/
</transportConnectors>

Über die bei ActiveMQ mitgelieferte Camel-Konfigurationsdatei unter ${ACTIVEMQ_HOME}/conf/camel.xml können direkt Routing-Regeln definiert werden, um diese bei der Weiterleitung zu verwenden. ActiveMQ kann entweder über den JMX-Standard überwacht werden oder über die in einem Webcontainer deployte Webconsole admin.war unter http://localhost:8161/admin/ aufgerufen werden. Als Nachrichtentransporter vereint ActiveMQ die einfache Programmierbarkeit und Konfigurierbarkeit, sodass es in unterschiedlichen Kontexten, wie JSE, OSGI oder JEE und mit unterschiedlichen Programmiersprachen eingesetzt werden kann. Professionellen Support kann man bei der Firmen Progress für das auf ActiveMQ basierende FUSE Message Broker erhalten.

ServiceMix: die Nachrichtenzentrale

Die große Lösung ist letztendlich die Erweiterung aller vorher besprochenen Produkte durch den Enterprise Service Bus Apache ServiceMix. Dieser wurde ursprünglich als eigenständiger ESB mit Unterstützung des JBI-Standards entworfen. Ab Version 4 ist er durch die Umstellung auf OSGi mehr zu einer Zusammenstellung der Apache-Projekte Karaf, Camel und ActiveMQ geworden.

Apache Karaf wurde eigens als Unterproject des OSGi-Verwaltungsframeworks entwickelt, das von Talend für alle seine Anwendungsintegrationsprodukte als einheitliche Ablaufumgebung zur Verfügung gestellt wird (Abb. 4). Professionellen Support findet man bei den Firmen Progress für das Produkt „FUSE ESB“ oder bei Talend für „Talend ESB Studio Standard Edition“. Talend bietet mit dem Talend ESB Studio Enterprise Edition (EE) für Talend ESB Enterprise Edition (EE) for Data Services eine Teamentwicklungs- und Administrationsumgebung an. Diese wird ergänzt um die in einem Webserver lauffähigen Anwendungen „Talend Service Activity Monitoring“ (SAM), „Service Locator“, „Security Token Service“ (STS) und „Talend Administration Center“.

Abb. 4: Talend ESB

Zusammenfassung

Auch wenn es bei einzelnen Funktionen der Apache-Produkte Überschneidungen gibt, können diese sehr gut miteinander verwendet werden. Da sie als einfache Java-Bibliotheken ausgeliefert werden, kann man sie getrennt einsetzen und sie sehr einfach in jede beliebige Anwendung integrieren. Damit benötigen sie keinen zusätzlichen Installationsaufwand, da bestehende Infrastrukturen und Lösungen verwendet werden können. Die Entwicklung wird traditionell mit den weit verbreiteten Apache Build-Werkzeugen Ant und Maven unterstützt, die jedoch nicht den Komfort einer modernen grafischen Entwicklungs- und Modellierungsumgebung wie Eclipse oder NetBeans bieten. Die hier vorgestellten Open-Source-Lösungen unterstützen mit JavaEE als Grundlage viele offene Standards und Best Practices. Als Vorteile für Open-Source-Lösungen sprechen keine Lizenzkosten zu Beginn des Projekts und die Nutzung funktionaler Erweiterungen durch die Community. Noch viel wichtiger bei Integrationslösungen für SOA ist jedoch die einfache Anpassbarkeit des Codes und die größere Unabhängigkeit. Ähnlich wie beim Webserver oder XML Parser wird die Verwendung kostenloser SOA-Komponenten immer selbstverständlicher. Auch jetzt schon sind sie für kleinere Integrationsaufgaben gut geeignet und halten den Weg zu einer großen Lösung offen. Abhängig von den eigenen Projektanforderungen sollte entschieden werden, ob mehr auf eine zentrale Plattform, wie einen ESB, gesetzt wird oder mehr auf Integrationsbibliotheken für spezifische Problemlösungen, um die Integrationskomplexität in den Endpunkten der Anwendungskomponenten zu verstecken. Gerade durch das Aufkommen von Web-2.0-Anwendungen mit AJAX wird die Integration im Browser mit einfachen REST-Schnittstellen immer wichtiger. Die Anforderungen an Integration sind anspruchsvoller und komplexer geworden. Mit den hier besprochenen Apache-Produkten können Sie die Herausforderung angehen.

Aufmacherbild: House by the railroad von Shutterstock / Urheberrecht: Ana Cmelic

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -