diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx')
| -rw-r--r-- | Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx | 714 |
1 files changed, 714 insertions, 0 deletions
diff --git a/Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx b/Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx new file mode 100644 index 0000000..32e77b6 --- /dev/null +++ b/Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx @@ -0,0 +1,714 @@ +#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
+<lyxtabular version="3" rows="10" columns="3">
+<features>
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="0">
+<column alignment="left" valignment="top" width="60text%">
+<row>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Komponente
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+URI
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Beschreibung
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Direct
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Synchroner Aufruf eines internen Endpunkts im gleichen Kontext
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+JMS
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Anbindung an ein Java Messaging System wie z.
+ B.
+ ApacheActiveMQ
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+JBI
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Anbindung an ein JBI-System wie z.
+ B.
+ Apache ServiceMix
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+JDBC
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Zugriff auf JDBC Ressourcen
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+SEDA
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Asynchroner Aufruf eines internen Endpunkts im gleichen Kontext
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Bean
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Übergabe an einfache Java Objekte
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+CXF
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Integration von CXF basierten Webservices
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Velocity
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Verarbeitung einer Nachrichts mittels Velocity Vorlagen
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+SMTP
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\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
+</cell>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Versenden von E-Mails mittels SMTP und JavaMail
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\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
|
