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/Prototyp.lyx | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx')
| -rw-r--r-- | Master/Daten- und Systemintegration/DSI-Assignment/Prototyp.lyx | 1054 |
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 |
