#LyX 1.6.5 created this file. For more info see http://www.lyx.org/ \lyxformat 345 \begin_document \begin_header \textclass scrreprt \begin_preamble \usepackage{preamble} \end_preamble \options twoside,openright,titlepage,fleqn,pointlessnumbers,headinclude,10pt,a4paper,BCOR5mm,footinclude,cleardoubleempty \use_default_options false \language ngerman \inputencoding auto \font_roman default \font_sans default \font_typewriter default \font_default_family default \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 \graphics default \paperfontsize 10 \spacing single \use_hyperref false \papersize a4paper \use_geometry false \use_amsmath 1 \use_esint 0 \cite_engine natbib_numerical \use_bibtopic false \paperorientation portrait \secnumdepth 2 \tocdepth 2 \paragraph_separation indent \defskip medskip \quotes_language polish \papercolumns 1 \papersides 2 \paperpagestyle default \tracking_changes false \output_changes false \author "" \author "" \end_header \begin_body \begin_layout Chapter Apache Camel \end_layout \begin_layout Section Beschreibung \end_layout \begin_layout Standard Die Internetseite zum Projekt \begin_inset CommandInset citation LatexCommand citep key "Camel" \end_inset beschreibt Apache Camel als Opensource Integrationsframework für EIPs. Die Implementierung verwendet Java als Programmiersprache und legt besonderes Augenmerk auf eine starke Modularisierung des Frameworks. Dies führt zu einem Plugin-Konzept, das es dem Entwickler erlaubt, nur die Camel-Kompenenten seiner Lösung hinzuzufügen, die er für sie tatsächlich benötigt. In der Termininolgie des Camel Projekts tauchen sehr oft die Begriffe Component , im Deutschen Komponente, und Route auf. Zur Implementierung einer Integrationslösung auf Basis von Camel verbinden eine oder mehrere Routen mehrere Komponenten als eine Abfolge von Routing- und Mediationsregeln. Innerhalb einer Route lassen sich Komponenten über URIs referenzieren. Eine Route besteht aus dem Start- und einem Endpunkt, die jeweils durch Komponenten repräsentiert werden. Die meisten Kompontentypen stehen in eigenen Plugins zur Verfügung, wodurch der Entwickler nur die Plugins benötigt, deren Komponenten er verwendet. Dieses Konzept erleichert die Erweiterung von Camel um weitere Komponenten. \end_layout \begin_layout Standard Da Apache Camel auf Maven \begin_inset CommandInset citation LatexCommand citep key "Mvn" \end_inset als Build-System basiert, lassen sich zusätzlich Plugins sehr einfach über die zentrale Steuerungsdatei vom Maven (pom.xml) per dependency injection zum eigenen Projekt hinzufügen. Maven versucht neue Abhängigkeiten aufzulösen und die entsprechenden Artefakte, meistens jar-Dateien, aus zentralen Repositories im Internet herunterzuladen. Maven ist kein Bestandteil von Camel, weshalb es separat von \begin_inset CommandInset citation LatexCommand citep key "Mvn" \end_inset heruntergeladen und installiert werden muss. \end_layout \begin_layout Standard Der Kern von Apache Camel und die Plugins stehen auf \begin_inset CommandInset citation LatexCommand citep key "Camel" \end_inset zum Herunterladen bereit. Dort finden sich auch die Einträge für die Datei pom.xml, um ein Plugin als Abhängigkeit zu definieren und es so dem eigenen Projekt hinzuzufügen. Maven übernimmt dann automatisch das Herunterladen der benötigten Dateien. Leider würde eine tiefergehende Betrachtung von Maven den Rahmen dieser Arbeit überschreiten. \end_layout \begin_layout Standard Das zentrale Element einer Integrationslösung auf Basis von Apache Camel ist ein Java-Objekt vom Typ \shape italic CamelContext \shape default . Diesem Objekt fügt der Integrator Routen hinzu. Routen lassen sich in einer Java-Klasse definieren, die von der Klasse \shape italic RouteBuilder \shape default erbt und die Methode \shape italic configure \shape default überschreibt. Nachdem der \shape italic CamelContext \shape default über alle Routen verfügt läßt er sich durch den Aufruf der Methode \shape italic start \shape default starten bzw. durch die Methode \shape italic stop \shape default beenden. Nach dem Starten des CamelContextes lassen sich Nachrichten entlang der definierten Routen verschicken und verarbeiten. \end_layout \begin_layout Section Grundkonzept zur Implementierung von EIPs \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 Message \begin_inset space ~ \end_inset Channel: Apache Camel stellt das EIP Message Channel als interne Implementierung des Interfaces Endpoint bereit. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 Message \begin_inset space ~ \end_inset Endpoint: Dieses EIP läßt sich durch Implementieren des Interfaces Endpoint realisieren. Im Normalfall verwendet eine Camel-Lösung dieses EIP über URIs in Routen. \end_layout \begin_layout Labeling \labelwidthstring 00.00.0000 Message: Das Interface Message dient der Bereitstellung des EIP Message. Dabei lassen sich grundsätzlich zwei Typ von Nachrichten unterscheiden. Eingehende Nachrichten vom Typ \begin_inset Quotes pld \end_inset InOnly \begin_inset Quotes prd \end_inset wie z. B. ereignisgesteuerte Nachrichten und Nachrichten vom Typ \begin_inset Quotes pld \end_inset InOut \begin_inset Quotes prd \end_inset , deren Nachrichtenaustausch eine Antwortnachricht enthält. \end_layout \begin_layout Section Ausgewählte Endpunkte und ihre URIs \end_layout \begin_layout Standard \begin_inset Float table wide false sideways false status open \begin_layout Plain Layout \begin_inset Tabular \begin_inset Text \begin_layout Plain Layout Komponente \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout URI \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Beschreibung \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Direct \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset direct:destination \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Synchroner Aufruf eines internen Endpunkts im gleichen Kontext \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout JMS \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset jms:[topic:]destination \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Anbindung an ein Java Messaging System wie z. B. ApacheActiveMQ \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout JBI \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset jbi:serviceName \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Anbindung an ein JBI-System wie z. B. Apache ServiceMix \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout JDBC \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset jdbc:dataSourceName?options \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Zugriff auf JDBC Ressourcen \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout SEDA \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset seda:destination \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Asynchroner Aufruf eines internen Endpunkts im gleichen Kontext \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Bean \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset bean:beanRef \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Übergabe an einfache Java Objekte \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout CXF \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset cxf:address[?serviceClass=...] \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Integration von CXF basierten Webservices \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Velocity \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset velocity:someTemplateResource \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Verarbeitung einer Nachrichts mittels Velocity Vorlagen \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout SMTP \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset Quotes pld \end_inset smtp://user-info@host[:port] \begin_inset Quotes prd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Versenden von E-Mails mittels SMTP und JavaMail \end_layout \end_inset \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption \begin_layout Plain Layout Endpunkte und ihre URIs \end_layout \end_inset \begin_inset CommandInset label LatexCommand label name "Tab:EndpointsURIs" \end_inset \end_layout \end_inset \end_layout \begin_layout Standard Die Tabelle \begin_inset CommandInset ref LatexCommand ref reference "Tab:EndpointsURIs" \end_inset zeigt eine Auflistung interessanter Endpunkte, die Apache Camel bereitstellt. Eine vollständige Liste findet sich auf \begin_inset CommandInset citation LatexCommand citep key "Camel" \end_inset . Weiterhin erlaubt es Camel eigene Endpunkte zu implementieren. \end_layout \begin_layout Section Implementierungsalternativen \end_layout \begin_layout Standard \begin_inset CommandInset label LatexCommand label name "sec:CamelDSLXML" \end_inset \end_layout \begin_layout Standard Apache Camel bietet dem Entwickler zwei Möglichkeiten, Routen zu definieren. \end_layout \begin_layout Description JavaDSL: Mit dieser Variante der Routendefinition lassen sich in eine sog. domain specific language (DSL) formulieren. Diese Art der Formulierung ähnelt herkömmlichen Methodenaufrufen in Java und läßt sich in gängigen Entwicklungsumgebungen verwenden. Routen lassen sich somit programmieren. Eine weitere bedeutende Eigenschaft der JavaDSL ist die Typen-Sicherheit, da die implementierende Java-Klasse vor dem Start kompiliert werden muss. Somit kann der Javacompiler die formale Korrektheit der Routendefinition überprüfen. \end_layout \begin_layout Description XML: Bei dieser Methode werden die Routen in einer XML-Datei beschrieben und zur Laufzeit beim Start des Systems vom Spring-Framework \begin_inset CommandInset citation LatexCommand citep key "spring" \end_inset umgesetzt. Hierbei steht eine enge Verzahnung mit dem Spring Framework, das u. a. die Lebenszyklen der verwendeten Objekte steuert. Eine ausführliche Betrachtung des Spring Frameworks würde leider den Rahmen dieser Arbeit überschreiten. \end_layout \begin_layout Section Generierung eines Apache Camel Artefakts \end_layout \begin_layout Standard In der Windows-Konsole in einem leeren Verzeichnis erzeugt Maven mit dem Kommando \begin_inset listings lstparams "basicstyle={\ttfamily},breaklines=true,tabsize=2" inline false status open \begin_layout Plain Layout mvn archetype:generate -DarchetypeGroupId=org.apache.camel.archetypes -DarchetypeAr tifactId=camel-archetype-java -DarchetypeVersion=2.0.0 -DgroupId=de.h_da.fbi.dsi.ws091 0 -Dpackage=de.h_da.fbi.dsi.ws0910.camelprototype -DartifactId=camelprototype \end_layout \end_inset ein neues Artefakt, das als Ausgangspunkt für die zu entwickelnde Apache Camel Integrationslösung dienen kann. Dabei sind die Parameter artifactId und package entsprechend anzupassen. Das Artefakt enthält eine vordefinierte Beispielroute und läßt sich direkt mit dem Kommando \family typewriter mvn camel:run \family default ausführen. \end_layout \end_body \end_document