summaryrefslogtreecommitdiffstats
path: root/Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx')
-rw-r--r--Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx1054
1 files changed, 1054 insertions, 0 deletions
diff --git a/Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx b/Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx
new file mode 100644
index 0000000..00f9889
--- /dev/null
+++ b/Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx
@@ -0,0 +1,1054 @@
+#LyX 1.6.4 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 oneside,openright,titlepage,fleqn,pointlessnumbers,headinclude,10pt,a4paper,BCOR5mm,footinclude,cleardoubleempty
+\use_default_options true
+\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
+\leftmargin 1cm
+\topmargin 1cm
+\rightmargin 2cm
+\bottommargin 1cm
+\headheight 1cm
+\headsep 1cm
+\footskip 1cm
+\secnumdepth 2
+\tocdepth 2
+\paragraph_separation indent
+\defskip medskip
+\quotes_language polish
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\author ""
+\author ""
+\end_header
+
+\begin_body
+
+\begin_layout Chapter
+Prototypische Implementierung
+\end_layout
+
+\begin_layout Standard
+Anhand des hier beschriebenen fiktiven Geschäftsprozesses veranschaulichen
+ die nachfolgenden Abschnitte verschiedene Implementierungen von Funktions-
+ und Datenintegration, deren Konzepte in Form von EIPs dargestellt sind,
+ mittels Apache Camel.
+\end_layout
+
+\begin_layout Section
+Beschreibung des Integrationsszenarios
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:Beschreibung-des-Szenarios"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+In diesem Abschnitt soll ein fiktives Szenario zur Integration mehrerer
+ Anwendung auf Funktions- und Datenebene beschrieben werden.
+\end_layout
+
+\begin_layout Subsection
+Der Beispielgeschäftsprozeß
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:Der-Beispielgeschäftsprozeß"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Dem Integrationskonzept und der prototypischen Implementierung liegt ein
+ einfacher fiktiver Geschäftsprozeß zugrunde, der einen Bestellvorgang beschreib
+t.
+\end_layout
+
+\begin_layout Standard
+Die Bestellungen durch Kunden erreichen das System auf zwei Wegen.
+ Erstens sollen Dateien im CSV-Format in einem bestimmten Verzeichnis beispielsw
+eise per ftp abgelegt werden.
+ Dabei folgen die Dateinamen der Konvention <Kundennummer>.csv.
+ Jede Zeile in der CSV-Datei stellt eine Bestellposition im Format <Artikel-Numm
+er>,<Artikel-Bezeichnung>,<Bestellmenge> dar.
+ Das Verzeichnis soll regelmäßig auf neue Dateien überprüft werden.
+ Neue Dateien sollen automatisch verarbeitet werden.
+\end_layout
+
+\begin_layout Standard
+Desweiteren soll eine Webservice-Schnittstelle bereit gestellt werden, über
+ die Kunden Bestellungen senden können.
+ Bei Bestellungen auf diesem Weg soll dem Kunde die Bestellnummer der neuen
+ Bestellung zurückgegeben werden.
+\end_layout
+
+\begin_layout Standard
+Diese Bestellnummer wird von einem auf Funktionsebene zu integrierenden
+ Legacy-System erzeugt.
+\end_layout
+
+\begin_layout Standard
+Nach Verarbeitung einer Bestellung durch das Legacy-System soll eine E-Mail
+ zur Benachrichtigung mit den Bestelldaten an eine bestimmte Adresse versendet
+ werden.
+ Jede verschickte E-Mail soll in einem bestimmten Verzeichnis als Sicherungsdate
+i aufbewahrt werden.
+\end_layout
+
+\begin_layout Subsection
+Darstellung als EIP Diagramm
+\end_layout
+
+\begin_layout Standard
+Die Abbildung
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "Abb:intergationsdiagramm"
+
+\end_inset
+
+ zeigt das Integrationsszenario zur Realisierung des Prototyps unter Verwendung
+ der EIP-Symbolik.
+ Die nachfolgende Beschreibung der Implementierung orientiert sich an diesem
+ Diagramm, ebenso wie die Implementirung selbst.
+ Zwar existiert kein Verfahren zur direkten Ableitung einer Camel-Implementierun
+g aus einem EIP-Diagramm, allerdings lassen sich Teile der Implementierung
+ anhand eines Diagramms manuell identifizieren.
+ Ebenso erhält der Integrator einen
+\begin_inset Quotes pld
+\end_inset
+
+roten Faden
+\begin_inset Quotes prd
+\end_inset
+
+ zur Implementierung der Routing- und Mediationsregeln.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+placement h
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename gfx/eip_diag_detail.png
+ width 120text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Integrationsszenario
+\end_layout
+
+\end_inset
+
+
+\begin_inset CommandInset label
+LatexCommand label
+name "Abb:intergationsdiagramm"
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section
+Apache Camel Implementierung
+\end_layout
+
+\begin_layout Subsection
+Konzept der Implementierung
+\end_layout
+
+\begin_layout Standard
+Wie bereits in Abschnitt
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sec:CamelDSLXML"
+
+\end_inset
+
+ angemerkt, bestehen zwei Möglichkeiten, wie sich Integrationslösungs mit
+ Apache Camel implementieren lassen.
+ Die hier vorgestellte Implementierung verwendet größtenteils die JavaDSL,
+ da die Verwendung der XML-Konfiguration eine Betrachtung des Spring 2 Framework
+s, die den Rahmen dieser Arbeit überschreiten würde, erfordern würde.
+ Durch Verwendung der JavaDSL ist es möglich eine Integrationslösung in
+ einer Entwicklungsumgebung wie z.
+ B.
+ Eclipse zu schreiben bzw.
+ zu programmieren.
+ Dabei stehen dem Integrator alle Hilfsmittel der Entwicklungsumgebung wie
+ z.
+ B.
+ Auto-Vervollständigung zur Verfügung.
+ Eine Datenintegration erfolgt innerhalb dieses Prototyps an allen Stellen,
+ an denen das Format von Daten verändert wird.
+ So z.
+ B.
+ innerhalb der Transformer im OrderNormalizer
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sub:OrderNormalizer"
+
+\end_inset
+
+.
+ Der Prototyp verzichtet dabei bewußt auf jede Form der Ausnahme- und Fehlerbeha
+ndlung zugunsten der Einfachheit und Übersichtlichkeit.
+\end_layout
+
+\begin_layout Subsection
+Einbindung der Webservice-Schnittstelle
+\end_layout
+
+\begin_layout Standard
+Apache Camel bietet mittels entsprechender Plugins die Möglichkeit, eine
+ Webservice-Schnittstelle direkt als Endpunkt zu definieren.
+
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/main/resources/OrderService.wsdl"
+lstparams "caption={OrderService.wsdl},columns=2,frame=shadowbox,label={lst:OrderService.wsdl},language=XML,tabsize=2"
+
+\end_inset
+
+Dazu verwendet der Prototyp den Servletcontainer Jetty
+\begin_inset CommandInset citation
+LatexCommand citep
+key "jetty"
+
+\end_inset
+
+ und Apache CXF
+\begin_inset CommandInset citation
+LatexCommand citep
+key "cxf"
+
+\end_inset
+
+ als Webservice-Framework.
+ Beide Komponenten stehen als Apache Camel Plugins zur Verfügung.
+ Dieser Ansatz erlaubt es, die Webservice-Schnittstelle nach deren Definition
+ in einer WSDL-Datei
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderService.wsdl"
+
+\end_inset
+
+ ohne implementierende Java-Klasse bereitzustellen.
+ Dazu sind die Konfigurationsdateien pom.xml
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:pom.xml"
+
+\end_inset
+
+, camel-config.xml
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:camel-context.xml"
+
+\end_inset
+
+ und web.xml
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:web.xml"
+
+\end_inset
+
+ entsprechend anzupassen.
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/pom.xml"
+lstparams "caption={pom.xml},frame=shadowbox,label={lst:pom.xml},language=XML,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/main/resources/META-INF/spring/camel-context.xml"
+lstparams "caption={camel-context.xml},frame=shadowbox,label={lst:camel-context.xml},language=XML,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/main/webapp/WEB-INF/web.xml"
+lstparams "caption={web.xml},frame=shadowbox,label={lst:web.xml},language=XML,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Die Generierung der Java-Klassen aus der WSDL-Datei
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderService.wsdl"
+
+\end_inset
+
+ erfolgt innerhalb des Maven Build-Vorgangs.
+ Das Starten von Jetty erfolgt im Zuge des Starts von Camel durch Maven.
+ In der Spring-Konfigurationsdatei
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:camel-context.xml"
+
+\end_inset
+
+ werden zwei Beans definiert, die die Einbindung des Bestellsystems realisieren.
+ Das Spring-Framework übernimmt dabei die Verwaltung der Lebenszyklen der
+ Bean-Objekte.
+\end_layout
+
+\begin_layout Subsection
+Zentrale Route
+\end_layout
+
+\begin_layout Standard
+Den zentralen Verarbeitungsablauf der Integrationslösung realisiert die
+ Java-Klasse
+\shape italic
+OrderRoutes
+\shape default
+.
+ Sie erbt wie zuvor beschrieben von der Camel-Klasse
+\shape italic
+RouteBuilder
+\shape default
+ und überschreibt die Methode
+\shape italic
+configure
+\shape default
+.
+ Diese Methode enthält eine Abfolge von Routing- und Mediationsregeln entspreche
+nd der Anforderungen.
+\end_layout
+
+\begin_layout Standard
+Im ersten Schritt erfolgt die Definition der Endpunkte für den Webservice
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderService.wsdl"
+
+\end_inset
+
+ und das Verzeichnis für die CSV-Dateien.
+ Sobald eine Bestellung an einem dieser beiden Endpunkt eintrifft, wird
+ sie in eine entsprechende Nachricht umgewandelt und im Kopf der Nachricht
+ der Ursprung der Bestellung (
+\shape italic
+cxf
+\shape default
+ bwz.
+
+\shape italic
+csvinput
+\shape default
+) vermerkt.
+ Danach erfolgt die Weiterleitung in den Kanal
+\shape italic
+new-orders-in
+\shape default
+.
+ Die Nachrichten in diesem Kanal werden vom OrderNormalizer
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "sub:OrderNormalizer"
+
+\end_inset
+
+ konsumiert.
+ Dieser stellt die Nachrichten in einem einheitlichen Datenformat im Kanal
+
+\shape italic
+normalized-orders
+\shape default
+ bereit.
+ Kanäle mit einheitlichen Nachrichten stellen das EIP
+\shape italic
+Datatype Channel
+\shape default
+ dar.
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderRoutes.java"
+lstparams "caption={OrderRoutes.java},frame=shadowbox,label={lst:OrderRoutes.java},language=Java,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Subsection
+OrderNormalizer
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset label
+LatexCommand label
+name "sub:OrderNormalizer"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Die Implementierung des EIP
+\shape italic
+Normalizer
+\shape default
+ zur Realisierung des OrderNormalizers erfolgt in einer separaten Java-Klasse,
+ die ebenfalls von
+\shape italic
+RouteBuilder
+\shape default
+ erbt.
+ Dadurch bleiben die Routen übersichtlich und lassen sich ggf.
+ leichter wiederverwenden.
+ Ebenso folgt die Auslagerung des OrderNormalizers in eigene Klasse dem
+ in Diagramm
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "Abb:intergationsdiagramm"
+
+\end_inset
+
+ dargestellten Implementierungskonzept.
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderNormalizer.java"
+lstparams "caption={OrderNormalizer.java},frame=shadowbox,label={lst:OrderNormalizer.java},language=Java,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Der OrderNormalizer konsumiert die Nachrichten in unterschiedlichen Formaten
+ aus dem Kanal
+\shape italic
+new-orders-in
+\shape default
+.
+ Mithilfe eines Content Based Router, der das zuvor eingefügte Kopfzeilenfeld
+
+\shape italic
+from
+\shape default
+ auswertet.
+ Im Falle von
+\shape italic
+cxf
+\shape default
+ erfolgt die Konvertierung ohne weiteren Aufwand durch Verwendung der methode
+
+\shape italic
+convertTo
+\shape default
+.
+\end_layout
+
+\begin_layout Standard
+Lautet das
+\shape italic
+from
+\shape default
+-Feld
+\shape italic
+csvinput
+\shape default
+, so wird die Nutzlast der Nachricht nach Konvertierung in das Camel-CSV-Format
+ an die Methode
+\shape italic
+transformFromCsv
+\shape default
+ einer Bean-Instanz der Klasse
+\shape italic
+OrderTransformer
+\shape default
+ übergeben.
+ Dort stehen die Daten als zweidimensionale Liste zur Verfügung.
+ Aus diesen Daten wird ein Objekt vom Typ
+\shape italic
+InputNewOrder
+\shape default
+ generiert und als Nutzlast der Nachricht gesetzt.
+\end_layout
+
+\begin_layout Subsection
+Normalized-Orders
+\end_layout
+
+\begin_layout Standard
+Der Kanal
+\shape italic
+normalized-orders
+\shape default
+enthält somit ausschließlich Nachrichten, deren Nutzlast im Format
+\shape italic
+InputNewOrder
+\shape default
+ vorliegt.
+ Der Einfachheit halber benutzt der Prototyp dieses Format als normalisiertes
+ Datenformat.
+ Alle nachfolgenden Verarbeitungsschritte, die diesen Kanal verwenden, finden
+ die Nutzlast der Nachrichten in einem festen Format vor.
+\end_layout
+
+\begin_layout Subsection
+Funktionsintegration des Legacy-Systems
+\end_layout
+
+\begin_layout Standard
+Der hier gezeigte Prototyp repräsentiert ein fiktives Legacy-System, das
+ den Bestellprozeß abwickelt, als einfache Java-Klasse
+\shape italic
+OrderSystem
+\shape default
+, die keinerlei Bestandteile von Camel verwendet und somit sehr lose gekoppelt
+ ist.
+ Die Integration erfolgt mithilfe der Java-Klasse
+\shape italic
+OrderSystemAdaptor
+\shape default
+
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderSystemAdaptor.java"
+
+\end_inset
+
+, die einen Adapter nach dem EIP
+\shape italic
+Event-Driven Consumer
+\shape default
+ zwischen Camel und dem Legacy-System darstellt.
+ Der Einfachheit halber verwendet das Legacy-System hier direkt das normalisiert
+e Datenformat, es könnte aber im Adapter durch einen integrierten Transformer
+ in ein beliebiges Format konvertiert werden.
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/main/java/de/h_da/fbi/dsi/ws0910/camelprototype/OrderSystemAdaptor.java"
+lstparams "caption={OrderSystemAdaptor.java},frame=shadowbox,label={lst:OrderSystemAdaptor.java},language=Java,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Das EIP
+\shape italic
+Event-Driven Consumer
+\shape default
+ läßt sich mit Camel durch Implementieren des Interfaces Processor realisieren.
+ An dieser Stelle findet eine Integration eines Legacy-Systems auf Funktionseben
+e statt, indem der
+\shape italic
+OrderSystemAdaptor
+\shape default
+ die Methode
+\shape italic
+handleNewOrder
+\shape default
+ der
+\shape italic
+OrderSystem
+\shape default
+-Instanz mit dem
+\shape italic
+InputNewOrder
+\shape default
+ Objekt als Parameter aufruft.
+ Diese Methode liefert die generierte Bestellnummer als String zurück.
+\end_layout
+
+\begin_layout Standard
+Die Funktion des Bestellsystem beschränkt sich auf das Speichern der Bestellung
+ in einer relationalen SQL-Datenbank mit dem Zeitstempel des Bestelleingangs
+ und die Rückgabe der Bestellnummer.
+ Diese speichert der
+\shape italic
+OrderSystemAdaptor
+\shape default
+
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderSystemAdaptor.java"
+
+\end_inset
+
+ in der Kopfzeile
+\shape italic
+orderno
+\shape default
+ der Nachricht.
+\end_layout
+
+\begin_layout Standard
+Der Aufruf des Bestellsystems erfolgt dabei über eine Bean-Referenz durch
+ die Camel-Methode
+\shape italic
+processRef
+\shape default
+.
+ Der Parameter dieser Methode ist ein String, der mit der id einer Bean
+ aus der Spring-Konfigurationsdatei
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:camel-context.xml"
+
+\end_inset
+
+ übereinstimmen muss.
+\end_layout
+
+\begin_layout Subsection
+Generierung und Speicherung der Benachrichtigungs-E-Mails
+\end_layout
+
+\begin_layout Standard
+Die vom Bestellsystem generierte Bestellnummer dient der eindeutigen Speicherung
+ der Sicherungskopie der Benachrichtigungs-E-Mail nach dem Muster ordermail-<Bes
+tellnummer>.txt.
+ Das Templating-System Velocity
+\begin_inset CommandInset citation
+LatexCommand citep
+key "velocityWebsite"
+
+\end_inset
+
+, das Camel als Endpunkt im Plugin
+\shape italic
+camel-velocity
+\shape default
+ bereitstellt, befüllt die Vorlage
+\shape italic
+OrderMailBody.vm
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderMailBody.vm"
+
+\end_inset
+
+
+\shape default
+ mit den Daten der jeweils zu verarbeitenden Bestellung.
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/main/resources/OrderMailBody.vm"
+lstparams "caption={OrderMailBody.vm},frame=shadowbox,label={lst:OrderMailBody.vm}"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Der nachgelagerte Routing-Eintrag speichert die E-Mail-Dateien im Verzeichnis
+
+\begin_inset Quotes pld
+\end_inset
+
+target/ordermails
+\begin_inset Quotes prd
+\end_inset
+
+ mittels einer Dateiendpunkt-Komponente.
+ Eine Polling-Consumer-Komponte überwacht dieses Verzeichnis und übergibt
+ dort gefundene E-Mail-Dateien an eine SMTP-Komponente.
+ Diese übernimmt das Versenden der E-Mail an die konfigurierte Zieladresse.
+ Schließlich erfolgt das Speichern der E-Mail-Datei im Verzeichnis
+\begin_inset Quotes pld
+\end_inset
+
+target/ordermails/sent
+\begin_inset Quotes prd
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Subsection
+Rückgabe der Bestellnummer an den Webservice-Konsumenten
+\end_layout
+
+\begin_layout Standard
+Ein zusätzlicher Content Based Router nach dem
+\shape italic
+OrderSystemAdaptor
+\shape default
+
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderSystemAdaptor.java"
+
+\end_inset
+
+ leitet die Nachricht an einen weiteren Prozessor weiter, falls die Kopfzeile
+
+\shape italic
+from
+\shape default
+ den Text
+\shape italic
+cxf
+\shape default
+ enthält.
+ Dieser ist als Inline-Prozessor implementiert und setzt als Nutzlast der
+ Ausgangsnachricht des Nachrichtenaustauschs eine neue Objektinstanz der
+ Klasse
+\shape italic
+OutputNewOrder
+\shape default
+ mit entsprechendem Erfolgsstatus und der generierten Bestellnummer.
+ Dieses Objekt stellt die Antwort der Webservice-Schnittstelle
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:OrderService.wsdl"
+
+\end_inset
+
+ an den Webservice-Konsumenten dar.
+\end_layout
+
+\begin_layout Section
+Testfall
+\end_layout
+
+\begin_layout Standard
+Zum Testen des Prototypen dient ein JUnit-Test, der in der Java-Klasse CreateOrd
+erRoutesTest
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:CreateOrderRoutesTest.java"
+
+\end_inset
+
+ implementiert ist.
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/test/java/de/h_da/fbi/dsi/ws0910/camelprototype/CreateOrderRoutesTest.java"
+lstparams "caption={CreateOrderRoutesTest.java},frame=shadowbox,label={lst:CreateOrderRoutesTest.java},language=Java,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand lstinputlisting
+filename "../CamelPrototype/src/test/resources/CreateOrderRoutesTest-context.xml"
+lstparams "caption={CreateOrderRoutesTest-context.xml},frame=shadowbox,label={lst:CreateOrderRoutesTest-context.xml},language=XML,tabsize=2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Diese Test-Klasse enthält zwei Tests, sowie die Definition der Testumgebung.
+ Die Testumgebung beinhaltet den in der Datei
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "lst:CreateOrderRoutesTest-context.xml"
+
+\end_inset
+
+ definierten Camel-Context und einen Mailbox-Mock, der die generierten E-Mails
+ empfängt.
+ Dabei wird die zentrale Route
+\shape italic
+OrderRoutes
+\shape default
+ durch Konstruktor-Parameter so konfiguriert, dass sie anstatt an eine reale
+ E-Mail-Adresse an den Mailbox-Mock sendet.
+ Der erste Test generiert fünf Bestellungen und überträgt sie nacheinander
+ über die Webservice-Schnittstelle.
+ Nach jedem Senden überprüft sie die Test-Mailbox-Mock, ob sie jeweils eine
+ Nachricht mehr als im vorherigen Testdurchlauf enthält und ob die Antwort
+ des Webservice eine Bestellnummer enthält.
+\end_layout
+
+\begin_layout Standard
+Zum Test der CSV-Funktionalität generiert der Testfall eine CSV-Datei, legt
+ sie im Zielverzeichnis ab und überprüft Mailbox-Mock auf eine neue Nachricht.
+ Jede Testbestellung enthält drei Positionen.
+\end_layout
+
+\begin_layout Standard
+Die
+\shape italic
+tearDown
+\shape default
+ Methode gibt den Inhalt der Bestelldatenbank zur Überprüfung auf der Konsole
+ aus.
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename gfx/screenshot_orders.png
+ width 120text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Inhalt der Tabelle
+\shape italic
+orders
+\end_layout
+
+\end_inset
+
+
+\begin_inset CommandInset label
+LatexCommand label
+name "Abb:orders-table"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename gfx/screenshot_orderpos.png
+ width 120text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Inhalt der Tabelle
+\shape italic
+orderpos
+\end_layout
+
+\end_inset
+
+
+\begin_inset CommandInset label
+LatexCommand label
+name "Abb:orderpos-table"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+Der Start des Testfalls erfolgt durch das Kommando
+\shape italic
+mvn test
+\shape default
+ auf der Konsole im Wurzelverzeichnis des Projekts.
+\end_layout
+
+\begin_layout Standard
+Mithilfe eines geeigneten Datenbank-Betrachters wie z.
+ B.
+ Squirrel
+\begin_inset CommandInset citation
+LatexCommand citep
+key "Squirrel"
+
+\end_inset
+
+ lassen sich die Einträge der Bestell-Datenbank ansehen.
+ Die Abbildungen
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "Abb:orders-table"
+
+\end_inset
+
+ und
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "Abb:orderpos-table"
+
+\end_inset
+
+ zeigen die beiden Tabellen mit den Testdaten.
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename gfx/screenshot_email.png
+ width 80text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption
+
+\begin_layout Plain Layout
+Sicherungsdatei einer Bestellbenachrichtigung
+\end_layout
+
+\end_inset
+
+
+\begin_inset CommandInset label
+LatexCommand label
+name "Abb:orderemail"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Die Abbildung
+\begin_inset CommandInset ref
+LatexCommand ref
+reference "Abb:orderemail"
+
+\end_inset
+
+ zeigt den Inhalt einer vom System generierten Benachrichtigungs-E-Mail
+ aus dem Ordner
+\begin_inset Quotes pld
+\end_inset
+
+target/ordermails/sent
+\begin_inset Quotes prd
+\end_inset
+
+.
+\end_layout
+
+\end_body
+\end_document