Nachrichtenfluss 'XML_CancelReservation' erstellen

Befolgen Sie die nachfolgenden Anweisungen, um den Nachrichtenfluss 'XML_CancelReservation' zu erstellen. Ausführlichere Anweisungen erhalten Sie jeweils über die Links am Ende eines jeden Schritts.

So erstellen und konfigurieren Sie den Nachrichtenfluss 'XML_CancelReservation':

  1. Erstellen Sie einen Nachrichtenfluss namens 'XML_CancelReservation'.
    Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenfluss erstellen.
  2. Fügen Sie im Nachrichtenflusseditor die in der folgenden Tabelle aufgelisteten Knoten hinzu und benennen Sie diese um.
    Anweisungen hierzu finden Sie in der Dokumentation von WebSphere Message Broker im Abschnitt Nachrichtenflussknoten hinzufügen.
    Palettenfächer Knotentyp Knotenname
    WebSphere MQ MQInput XML_CANCELRESERVATION_IN
    WebSphere MQ MQOutput XML_CANCELRESERVATION_OUT
    WebSphere MQ MQOutput XML_CANCELRESERVATION_FAIL1_1
    WebSphere MQ MQOutput XML_CANCELRESERVATION_FAIL1_2
    WebSphere MQ MQOutput XML_CANCELRESERVATION_FAIL2
    Transformation Rechnen DeleteReservation
    Transformation Rechnen IncrementSeat
    Aufbau Traceknoten Traceknoten
    Aufbau Traceknoten Trace1
    Aufbau Traceknoten Trace2
  3. Verbinden Sie die Knoten anhand der nachfolgenden Tabelle miteinander.
    Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenflussknoten verbinden.
    Überprüfen Sie anhand des Diagramms unter Informationen zum Nachrichtenfluss 'XML_CancelReservation', ob Sie die Knoten richtig miteinander verbunden haben.
    Knotenname Terminal Verbinden mit
    XML_CANCELRESERVATION_IN Ausgangsterminal DeleteReservation
    Abfangterminal XML_CANCELRESERVATION_FAIL1_1
    DeleteReservation Fehlerterminal Traceknoten
    Ausgangsterminal Trace1
    Traceknoten Ausgangsterminal XML_CANCELRESERVATION_FAIL1_2
    Trace1 Ausgangsterminal IncrementSeat
    IncrementSeat Fehlerterminal Trace2
    Ausgangsterminal XML_CANCELRESERVATION_OUT
    Trace2 Ausgangsterminal XML_CANCELRESERVATION_FAIL2
  4. Konfigurieren Sie die Knoteneigenschaften anhand der nachfolgenden Tabelle. Übernehmen Sie die Standardwerte für die Eigenschaften, sofern die Tabelle keinen davon abweichenden Wert enthält.
    Anweisungen hierzu finden Sie in der Dokumentation von WebSphere Message Broker im Abschnitt Nachrichtenflussknoten konfigurieren.
    Knotenname Seite Eigenschaft Wert
    XML_CANCELRESERVATION_IN Grundeinstellung Name der Warteschlange XML_CANCELRESERVATION_IN
    (Dieser Wert bezeichnet die lokale Warteschlange, aus der der Nachrichtenfluss die Nachricht abruft.)
    Syntaxanalyse der Eingabenachricht Nachrichtendomäne XMLNSC: Für XML-Nachrichten (Berücksichtigung von Namensbereichen, Überprüfung, geringe Speicherbelegung)
    (Mit diesem Wert wird der Broker angewiesen, den optimierten generischen XML-Parser zu verwenden.)
    DeleteReservation Grundeinstellung Datenquelle RESERVDB
    (Dieser Wert gibt die von diesem Knoten verwendete Datenbank an.)
    Grundeinstellung ESQL-Modul DeleteReservation
    (Dieser Wert gibt den Namen des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls an. Der Name muss dem Namen in der Anweisung CREATE COMPUTE MODULE in der ESQL-Datei entsprechen.)
    Grundeinstellung Ausnahmebedingung für Datenbankfehler ausgeben Inaktivieren Sie das Kontrollkästchen, damit Sie in ESQL angeben können, wie der Nachrichtenfluss mit Datenbankfehlern umgehen soll. Ist das Kontrollkästchen aktiviert, erzeugt der Nachrichtenfluss bei einem Datenbankfehler standardmäßig eine Ausnahmebedingung und reiht die Nachricht in die FAIL-Warteschlange ein.
    Traceknoten Grundeinstellung Destination (Zieladresse) lokales Fehlerprotokoll
    (Mit diesem Wert wird der Knoten angewiesen, die Trace-Informationen im lokalen Fehlerprotokoll zu speichern. Unter Windows ist 'Event Viewer' das lokale Fehlerprotokoll; unter Linux 'syslog'.)
    Grundeinstellung Muster (Pattern) ==== Fehler von Knoten 'DeleteReservation' ==================
    ${ExceptionList}

    (Mit diesem Wert wird der Teil der Nachricht mit der ExceptionList-Baumstruktur protokolliert.)
    Grundeinstellung Nachrichtennummer 3051
    XML_CANCELRESERVATION_FAIL1_1 Grundeinstellung Name der Warteschlange
    (Die Angabe des WS-Managernamens ist nicht erforderlich, da die Warteschlange in demselben WS-Manager wie der Broker definiert ist.)
    XML_CANCELRESERVATION_FAIL1
    (Dieser Wert gibt die lokale Warteschlange an, in die der Nachrichtenfluss die Nachricht einreiht, wenn die Verarbeitung fehlschlägt.)
    XML_CANCELRESERVATION_FAIL1_2 Grundeinstellung Name der Warteschlange
    (Die Angabe des WS-Managernamens ist nicht erforderlich, da die Warteschlange in demselben WS-Manager wie der Broker definiert ist.)
    XML_CANCELRESERVATION_FAIL1
    (Dieser Wert gibt die lokale Warteschlange an, in die der Nachrichtenfluss die Nachricht einreiht, wenn die Verarbeitung fehlschlägt.)
    Trace1 Grundeinstellung Destination (Zieladresse) lokales Fehlerprotokoll
    (Mit diesem Wert wird der Knoten angewiesen, die Trace-Informationen im lokalen Fehlerprotokoll zu speichern. Unter Windows ist 'Event Viewer' das lokale Fehlerprotokoll; unter Linux 'syslog'.)
    Grundeinstellung Muster (Pattern) ========== Nachricht nach Knoten 'DeleteReservation' ===================
    ${Root}
    ${Environment}

    (Mit diesem Wert wird der Teil der Nachricht mit der Nachrichten- und Umgebungsbaumstruktur protokolliert.)
    Grundeinstellung Nachrichtennummer 3051
    IncrementSeat Grundeinstellung Datenquelle RESERVDB
    (Dieser Wert gibt die von diesem Knoten verwendete Datenbank an.)
    Grundeinstellung ESQL-Modul IncrementSeat
    (Dieser Wert gibt den Namen des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls an. Dieser Name muss mit dem Namen in der Anweisung CREATE COMPUTE MODULE in der Datei XML_CancelReservation.esql übereinstimmen.)
    Trace2 Grundeinstellung Destination (Zieladresse) lokales Fehlerprotokoll
    (Mit diesem Wert wird der Knoten angewiesen, die Trace-Informationen im lokalen Fehlerprotokoll zu speichern. Unter Windows ist 'Event Viewer' das lokale Fehlerprotokoll; unter Linux 'syslog'.)
    Grundeinstellung Muster (Pattern) ========== Fehler von Knoten 'IncrementSeat' ===================
    ${ExceptionList}


    Mit diesem Wert wird der Teil der Nachricht mit der ExceptionList-Baumstruktur protokolliert.)
    Grundeinstellung Nachrichtennummer 3051
    XML_CANCELRESERVATION_FAIL2 Grundeinstellung Name der Warteschlange
    (Die Angabe des WS-Managernamens ist nicht erforderlich, da die Warteschlange in demselben WS-Manager wie der Broker definiert ist.)
    XML_CANCELRESERVATION_FAIL2
    (Dieser Wert gibt die lokale Warteschlange an, in die der Nachrichtenfluss die Nachricht einreiht, wenn die Verarbeitung fehlschlägt.)
    XML_CANCELRESERVATION_OUT Grundeinstellung Name der Warteschlange
    (Die Angabe des WS-Managernamens ist nicht erforderlich, da die Warteschlange in demselben WS-Manager wie der Broker definiert ist.)
    XML_CANCELRESERVATION_OUT
    (Dieser Wert gibt die lokale Warteschlange an, in die der Nachrichtenfluss die Nachricht einreiht.)
  5. Klicken Sie im Projekt 'XML Airline Message Flows' doppelt auf die ESQL-Datei, um sie im ESQL-Editor zu öffnen. Kopieren Sie die im Folgenden wiedergegebenen ESQL-Code-Module in die ESQL-Datei und speichern Sie dann die Datei. Weitere Informationen hierzu finden Sie in der WebSphere Message Broker-Dokumentation unter ESQL erstellen.
    -- ************************************************
    -- * ESQL for the XML_CancelReservation message flow
    -- ************************************************
    
    CREATE COMPUTE MODULE DeleteReservation
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		DECLARE SQLState1 CHARACTER;
    		DECLARE SQLErrorText1 CHARACTER;
    		DECLARE SQLCode1 INTEGER;
    		DECLARE SQLNativeError1 INTEGER;
    
    		SET OutputRoot = InputRoot;
    		DECLARE cancel REFERENCE TO InputRoot.XMLNSC.CancelReservation.ListOfReservations;
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(cancel.ReservationNumber[]);
    		WHILE I <= J DO -- in einer Schleife die Reservierungen durchlaufen, die storniert werden sollen
    			-- Überprüfen, ob die angeforderte Reservierung vorhanden ist
    			SET Environment.ListOfReservations.Info[I] =
    				THE(SELECT T.CLASSTYPE, T.FLIGHTNO, T.FLIGHTDATE
    					FROM Database.XMLPASSENGERTB AS T
    					WHERE T.RESERVATIONNO = cancel.ReservationNumber[I]);
    			IF (SELECT COUNT(*) FROM Environment.ListOfReservations.Info[I].*[] AS I1) IS NULL THEN
    				THROW USER EXCEPTION CATALOG 'MyCatalog' MESSAGE 1234 VALUES('No record to delete');
    			END IF;
    
    			-- Datensatz aus Datenbank löschen
    			DELETE FROM Database.XMLPASSENGERTB AS T WHERE T.RESERVATIONNO = cancel.ReservationNumber[I];
    			SET I = I + 1;
    
    			SET SQLCode1 = SQLCODE;
    			IF SQLCode1 <> 0 THEN
    				SET SQLState1 = SQLSTATE;
    				SET SQLErrorText1 = SQLERRORTEXT;
    				SET SQLNativeError1 = SQLNATIVEERROR;
    				THROW USER EXCEPTION MESSAGE 2950 VALUES('The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , SQLErrorText1);
    			END IF;
    		END WHILE;
    		RETURN TRUE;
    	END;
    END MODULE;
    
    CREATE COMPUTE MODULE IncrementSeat
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		DECLARE SQLState1 CHARACTER;
    		DECLARE SQLErrorText1 CHARACTER;
    		DECLARE SQLCode1 INTEGER;
    		DECLARE SQLNativeError1 INTEGER;
    
    		SET OutputRoot = InputRoot;
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(Environment.ListOfReservations.*[]);
    		-- loop through the cancellations, updating the seat availability
    		WHILE I <= J DO
    			IF Environment.ListOfReservations.Info[I].CLASSTYPE = 'Y' THEN
    				UPDATE Database.XMLFLIGHTTB AS T 
    					SET ECONOMICCLASS = T.ECONOMICCLASS-1, TOTALECONOMIC = T.TOTALECONOMIC+1
    					WHERE T.FLIGHTNO = Environment.ListOfReservations.Info[I].FLIGHTNO
    					AND T.FLIGHTDATE = Environment.ListOfReservations.Info[I].FLIGHTDATE;
    			END IF;
    			IF Environment.ListOfReservations.Info[I].CLASSTYPE = 'F' THEN
    				UPDATE Database.XMLFLIGHTTB AS T 
    					SET FIRSTCLASS = T.FIRSTCLASS-1, TOTALFIRST= T.TOTALFIRST+1
    					WHERE T.FLIGHTNO = Environment.ListOfReservations.Info[I].FLIGHTNO
    					AND T.FLIGHTDATE = Environment.ListOfReservations.Info[I].FLIGHTDATE;
    			END IF;
    			SET I = I + 1;
    
    			SET SQLCode1 = SQLCODE;
    			IF SQLCode1 <> 0 THEN
    				SET SQLState1 = SQLSTATE;
    				SET SQLErrorText1 = SQLERRORTEXT;
    				SET SQLNativeError1 = SQLNATIVEERROR;
    				THROW USER EXCEPTION MESSAGE 2950 VALUES('The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , SQLErrorText1);
    			END IF;
    		END WHILE;
    		RETURN TRUE;
    	END;
    END MODULE;
    
  6. Speichern Sie den Nachrichtenfluss.
Nun haben Sie den Nachrichtenfluss 'XML_CancelReservation' erstellt, mit dem Reservierungen storniert werden, die der Nachrichtenfluss 'XML_Reservation' zuvor getätigt hat.

Zurück zur Erstellung des Mustercodes 'Airline Reservations'