From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../DSI-Assignment/Camel.lyx | 714 +++++++++++++++++++++ 1 file changed, 714 insertions(+) create mode 100644 Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx (limited to 'Master/Daten- und Systemintegration/DSI-Assignment/Camel.lyx') 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 + + + + + + + +\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 -- cgit v1.2.3