Informationen zum Nachrichtenfluss 'XML_Reservation'
Mit dem Nachrichtenfluss 'XML_Reservation' werden Sitzplätze für den in der Eingabenachricht aufgeführten Flug reserviert. Die Reservierung wird mit Antwortnachrichten bestätigt. Die Antwortnachrichten werden in die Warteschlange XML_RESERVATION_OUT eingereiht.
In der nachfolgenden Abbildung sehen Sie den Nachrichtenfluss 'XML_Reservation'.

In der nachfolgenden Tabelle werden die Knotentypen aufgelistet, die im Nachrichtenfluss 'XML_Reservation' verwendet werden.
Knotentyp |
Knotenname |
MQEmpfang |
XML_RESERVATION_IN |
Database |
UpdateFlightTable |
Rechnen |
UpdatePassengerTable; BuildSingleMessage; PropagateMultipleMessages |
Filter |
MultipleOrSingleMessage
|
Ausnahme |
InvalidRequest |
MQSenden |
XML_RESERVATION_FAIL; XML_RESERVATION_OUT |
Traceknoten |
LogException |
Weitere Informationen finden Sie unter Die Knoten im Nachrichtenfluss 'XML_Reservation' in der WebSphere Message Broker-Dokumentation. Um den in diesem Nachrichtenfluss verwendeten ESQL-Code anzuzeigen, siehe Creating the XML_Reservation message flow (Den Nachrichtenfluss 'XML_Reservation' erstellen).
Der Nachrichtenfluss 'XML_Reservation' führt die folgenden Aktionen durch:
- Der Knoten XML_RESERVATION_IN ruft die Eingabenachricht aus der Warteschlange XML_RESERVATION_IN ab und identifiziert die Nachricht als selbstdefinierende XML-Nachricht.
- Der Knoten XML_RESERVATION_IN führt mit Hilfe des XML-Parsers eine vollständige syntaktische Analyse durch und gibt die Eingabenachricht über ein Ausgangsterminal an den Knoten 'UpdateFlightTable' weiter. Wenn hingegen in einem nachfolgenden Knoten eine Ausnahme ausgegeben wird und die Nachricht zurückgeleitet wird, übergibt der Knoten die Eingabenachricht über das Catch-Terminal an den Knoten XML_RESERVATION_FAIL, der die Nachricht an den Knoten 'LogException' weitergibt. Der Knoten 'LogException' schreibt den Fehler anschließend in das lokale Fehlerprotokoll; unter Windows ist dies 'Event Viewer', unter Linux 'syslog'.
- Der Knoten 'UpdateFlightTable' überprüft die Tabelle XMLFLIGHTTB, um zu überprüfen, ob die angefragten Sitze verfügbar sind. Anschließend aktualisiert er die Tabelle XMLFLIGHTTB, um anzuzeigen, dass die Sitze zugewiesen wurden und dass nun weniger Sitze zur Verfügung stehen.
- Der Knoten 'UpdateFlightTable' fügt den Wert RESERVATIONSEQNO der Tabelle XMLFLIGHTTB in eine Umgebungsvariable ein, die an den Knoten 'UpdatePassengerTable' weitergeleitet wird. Der Knoten 'UpdateFlightTable' fügt in eine Umgebungsvariable auch die Anzahl der verbleibenden Sitze in jeder Klasse ein.
- Der Knoten 'UpdateFlightTable' übergibt die Eingabenachricht über das Ausgangsterminal an den Knoten 'UpdatePassengerTable'.
- Der Knoten 'UpdatePassengerTable' ruft die Passagierliste aus der Eingabenachricht und die Flugdaten aus der Umgebungsbaumstruktur ab und fügt die Namen und Reservierungsinformationen der neuen Passagiere zur Tabelle XMLPASSENGERTB in der Datenbank RESERVDB hinzu.
- Der Knoten 'UpdatePassengerTable' erzeugt für jeden Passagier eine eindeutige Reservierungsnummer und weist sie ihm zu. Die Reservierungsnummer setzt sich aus folgenden Bestandteilen zusammen:
FlightNumber + FlightDate + RESERVATIONSEQNO
Der Wert für RESERVATIONSEQNO wird aus der Umgebungsvariable entnommen, die vom Knoten 'UpdateFlightTable' übernommen wurde.
Die Reservierungsnummer für die Passagierin Mary Smith lautet beispielsweise CA937200305251. Der Knoten 'UpdatePassengerTable' aktualisiert die Tabelle XMLPASSENGERTB mit diesen Reservierungsnummern.
- Der Knoten 'UpdatePassengerTable' leitet die Eingabenachricht über das Ausgangsterminal an den Knoten 'MultipleOrSingleMessage'.
- Der Knoten 'MultipleOrSingleMessage' überprüft das Eingabenachrichtenfeld namens 'Request' (Anforderung), und legt fest, wohin die Nachricht als Nächstes weitergegeben werden soll:
- Das Feld 'Request' in der ersten Eingabenachricht für 'XML_Reservation' (reservation1.enqueue) enthält
den Wert 'M'; daher leitet der Knoten die Nachricht über das True-Terminal an den Knoten 'PropagateMultipleMessages' weiter.
- Das Feld 'Request' in der zweiten Eingabenachricht für 'XML_Reservation' (reservation2.enqueue) enthält
den Wert 'S'; daher leitet der Knoten die Nachricht über das False-Terminal an den Knoten 'BuildSingleMessage' weiter.
- Wenn der Knoten den Wert im Feld 'Request' nicht ermitteln kann, übergibt er die Nachricht
über das Unknown-Terminal an den Knoten 'Invalid Request'. Der Knoten 'InvalidRequest' generiert eine Fehlernachricht, die den Nachrichtenkatalog, die Nachrichtennummer und den Nachrichtentext beinhaltet. Alle diese Werte werden der Baumstruktur der Ausnahmeliste entnommen.
- Wenn die Nachricht an den Knoten 'PropagateMultipleMessages' weitergeleitet wird, erstellt der Knoten 'PropagateMultipleMessages' eine Antwortnachricht für einen der in der Eingabenachricht aufgeführten Passagiere und gibt die Antwort über das Ausgangsterminal an den Knoten XML_RESERVATION_OUT weiter. Der Knoten 'PropagateMultipleMessages' erstellt eine Antwortnachricht dieser Art für jeden in der Eingabenachricht aufgeführten Passagier.
- Wenn die Nachricht an den Knoten 'BuildSingleMessage' weitergeleitet wird, erstellt der Knoten 'BuildSingleMessage' eine einzelne Antwortnachricht, die die Liste der Passagiere und deren Reservierungsnummern enthält, und gibt die Antwort über das Ausgangsterminal an den Knoten XML_RESERVATION_OUT weiter.
- Der Knoten XML_RESERVATION_OUT reiht die Antwortnachrichten in die Warteschlange XML_RESERVATION_OUT ein.
Die Eingabenachrichten für den Nachrichtenfluss 'XML_Reservation' verändern die Daten in der Benutzerdatenbank RESERVDB. Dabei werden auch Daten zur Tabelle XMLPASSENGERTB hinzugefügt. Die anderen Nachrichtenflüsse rufen einige der vom Nachrichtenfluss 'XML_Reservation' in der Tabelle RESERVDB gespeicherten Daten ab. Damit
die Datenbank genügend Daten enthält, die von anderen Nachrichtenflüssen abgefragt werden können,
stehen zwei Eingabenachrichten zur Verfügung, die durch den Nachrichtenfluss 'XML_Reservation'
gesendet werden können. Führen Sie zunächst den Nachrichtenfluss 'XML_Reservation' mit diesen
beiden Nachrichten aus, bevor Sie einen anderen Nachrichtenfluss ausführen.
Entwurfsvorschlag: Verwendung eines einzelnen Rechenknotens
Der Nachrichtenfluss 'XML_Reservation' verfügt über zwei Knoten zur Aktualisierung der Tabellen XMLFLIGHTTB und XMLPASSENGERTB in der Datenbank RESERVDB.
- UpdateFlightTable (ein Datenbankknoten)
- UpdatePassengerTable (ein Rechenknoten)
'UpdateFlightTable' aktualisiert in der Tabelle XMLFLIGHTTB die Anzahl der angeforderten Reservierungen für einen Flug. Der Knoten fügt die Flugdaten in die an den Knoten 'UpdatePassengerTable' zu übergebende Umgebungsbaumstruktur ein. Der Knoten 'UpdatePassengerTable' aktualisiert in der Tabelle XMLPASSENGERTB die Daten der Passagiere, welche die Reservierung vorgenommen haben, und weist ihnen eindeutige Reservierungsnummern zu. Anschließend fügt er diese Reservierungsnachricht in die Nachricht ein.
Es wäre zwar denkbar, die beiden Knoten in einem einzigen Rechenknoten zusammenzufassen, um somit die Leistung des Nachrichtenflusses zu erhöhen. Die Zusammenfassung der beiden Knoten zu einem Datenbankknoten hingegen wäre nicht möglich, da ein solcher Knoten keine Änderungen an der Nachricht vornehmen könnte. Der hier verwendete Nachrichtenfluss verfügt über zwei Knoten, um so die Funktionen von Rechen- und Datenbankknoten zu verdeutlichen.
Zurück zu "Das Beispielprogramm 'Airline Reservations'"