Nachrichtenfluss 'XML_FlightQueryIn' erstellen

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

Vor Erstellung des Nachrichtenflusses 'XML_FlightQueryReply' müssen zunächst die Nachrichtenflüsse 'XML_FlightQueryOut' und 'XML_FlightQueryReply' erstellt werden. Anweisungen hierzu finden Sie unter Nachrichtenfluss 'XML_FlightQueryOut' erstellen und Nachrichtenfluss 'XML_FlightQueryReply' erstellen.

So erstellen und konfigurieren Sie den Nachrichtenfluss 'XML_FlightQueryIn':

  1. Erstellen Sie einen Nachrichtenfluss namens 'XML_FlightQueryIn'.
    Anweisungen hierzu finden Sie unter Nachrichtenfluss erstellen.
  2. Fügen Sie im Nachrichtenflusseditor die in der folgenden Tabelle aufgelisteten Knoten hinzu, und benennen Sie diese um.
    Eine Anleitung hierfür finden Sie im Abschnitt Knoten hinzufügen.
    Knotentyp Knotenname
    MQEmpfang XML_FLIGHTQUERY_REPLIES
    MQSenden XML_FLIGHTQUERY_OUT
    MQSenden XML_FLIGHTQUERY_TIMEOUT
    MQSenden XML_FLIGHTQUERY_FAIL
    Rechnen BuildOutputMessage
    Rechnen ProcessTimeout
    Knoten für Aggregationsantworten AggregateReplies
  3. Verbinden Sie die Knoten anhand der nachfolgenden Tabelle miteinander.
    Eine Anleitung hierfür finden Sie im Abschnitt Knoten verbinden.
    Überprüfen Sie anhand der Abbildung unter Informationen zum Nachrichtenfluss 'XML_FlightQueryIn', ob Sie die Knoten richtig miteinander verbunden haben.
    Knotenname Terminal Verbinden mit
    XML_FLIGHTQUERY_REPLIES Out AggregateReplies (In-Terminal)
    Catch XML_FLIGHTQUERY_FAIL
    AggregateReplies Out BuildOutputMessage
    Timeout ProcessTimeout
    BuildOutputMessage Out XML_FLIGHTQUERY_OUT
    ProcessTimeout Out XML_FLIGHTQUERY_TIMEOUT
  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.
    Eine Anleitung hierfür finden Sie im Abschnitt Knoten konfigurieren.
    Knotenname Seite Eigenschaft Wert
    XML_FLIGHTQUERY_REPLIES Grundeinstellung Name der Warteschlange XML_FLIGHTQUERY_REPLIES
    (Die Warteschlange, in die der Nachrichtenfluss 'XML_FlightQueryOut' die Steuerungsnachricht eingereiht hat.)
    Default Nachrichtendomäne XML
    (Weist den Broker an, den generischen XML-Parser zu verwenden.)
    Aggregate Replies (Antworten kumulieren) Grundeinstellung Aggregationsname FLIGHTDETAILSAGG
    (Dieser Name muss mit der Eigenschaft 'Aggregate Name' des Knotens 'Request Details' im Nachrichtenfluss 'FlightQuery_Out' übereinstimmen.)
    Grundeinstellung Zeitlimit bei unbekannten Nachrichten 60
    (Dies ist die Zeit, während der Nachrichten, die nicht als Antworten identifizierbar sind, in der Warteschleife gehalten werden, bevor sie an das Unknown-Terminal weitergeleitet werden.)
    Build Output Message Grundeinstellung ESQL-Modul BuildOutputMessage
    (Der Name des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls. Der Name muss dem Namen in der Anweisung CREATE COMPUTE MODULE in der ESQL-Datei entsprechen.)
    XML_FLIGHTQUERY_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_FLIGHTQUERY_OUT
    (Die lokale Warteschlange, in die der Nachrichtenfluss die Nachricht einreiht.)
    Process Timeout Grundeinstellung ESQL-Modul ProcessTimeout
    (Der Name des vom Knoten während der Verarbeitung verwendeten ESQL-Moduls. Der Name muss dem Namen in der Anweisung CREATE COMPUTE MODULE in der ESQL-Datei entsprechen.)
    XML_FLIGHTQUERY_TIMEOUT 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_FLIGHTQUERY_TIMEOUT
    (Die lokale Warteschlange, in die der Nachrichtenfluss die unvollständige zusammengefasste Nachricht einreiht, wenn nicht alle Antwortnachrichten den Knoten 'Aggregate Replies' erreichen, bevor das im Knoten 'Request Details' des Nachrichtenflusses 'XML_FlightQueryOut' angegebene Zeitlimit überschritten ist.
    XML_FLIGHTQUERY_FAIL 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_FLIGHTQUERY_FAIL
    (In diese Warteschlange reiht der Nachrichtenfluss die Nachricht ein, wenn die Verarbeitung fehlschlägt.)
  5. Klicken Sie im Projekt 'XML-Nachrichtenflüsse für Airline' doppelt auf das ESQL-Dateiprojekt, um es im ESQL-Editor zu öffnen, und kopieren Sie folgende ESQL-Code-Module in die ESQL-Datei. Weitere Informationen hierzu finden Sie im Abschnitt ESQL entwickeln.
    -- ************************************************
    -- * ESQL for the XML_FlightQueryIn message flow
    -- ************************************************
    
    CREATE COMPUTE MODULE BuildOutputMessage
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		-- fix the aggregate reply message for output to a queue
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.StrucId = MQMD_STRUC_ID;
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    
    		DECLARE inflight REFERENCE TO InputRoot.ComIbmAggregateReplyBody.FlightDetails.XML.Flight;
    		DECLARE inpass REFERENCE TO InputRoot.ComIbmAggregateReplyBody.PassengerDetails.XML.ListOfPassengers;
    		CREATE FIELD OutputRoot.XML.FlightDetailsInfoResponse;
    		DECLARE outresp REFERENCE TO OutputRoot.XML.FlightDetailsInfoResponse;
    
    		-- populate the output message with flight info from the aggregate reply
    		CREATE FIRSTCHILD OF outresp.Flight TYPE NameValue NAME 'number' VALUE inflight.FLIGHTNO;
    		SET outresp.Flight.(XML.Attribute)Flightdate VALUE = inflight.FLIGHTDATE;
    		SET outresp.Flight.FirstClass.Capacity = inflight.TOTALFIRST;
    		SET outresp.Flight.FirstClass.Used = inflight.FIRSTCLASS;
    		SET outresp.Flight.FirstClass.Price = inflight.FIRSTPRICE;
    		SET outresp.Flight.EconomyClass.Capacity = inflight.TOTALECONOMIC;
    		SET outresp.Flight.EconomyClass.Used = inflight.ECONOMICCLASS;
    		SET outresp.Flight.EconomyClass.Price = inflight.ECONOMICPRICE;
    		SET outresp.Flight.Origin = inflight.STARTPOINT;
    		SET outresp.Flight.Destination = inflight.ENDPOINT;
    
    		-- populate the output message with passenger info from the aggregate reply		
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(inpass.*[]);
    		WHILE I <= J DO
    			SET outresp.ListOfPassengers.Passenger[I].ReservationNumber = inpass.PassengerDetails[I].RESERVATIONNO;
    			SET outresp.ListOfPassengers.Passenger[I].FirstName = inpass.PassengerDetails[I].FIRSTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].LastName = inpass.PassengerDetails[I].LASTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].Class = inpass.PassengerDetails[I].CLASSTYPE;
    			SET I = I + 1;
    		END WHILE;
    	RETURN TRUE;
    	END;
    END MODULE;
    
    CREATE COMPUTE MODULE ProcessTimeout
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.StrucId = MQMD_STRUC_ID;
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    		CREATE FIELD OutputRoot.XML.ComIbmAggregateReplyBody;
    		DECLARE timedout REFERENCE TO OutputRoot.XML.ComIbmAggregateReplyBody;
    		DECLARE reps REFERENCE TO InputRoot.ComIbmAggregateReplyBody;
    		MOVE reps FIRSTCHILD;
    		IF LASTMOVE(reps) THEN -- there will either be one reply, or none
    			SET timedout.TimedOut = reps.XML;
    		END IF;
    		RETURN TRUE;
    	END;
    END MODULE;
    

Nun haben Sie den Nachrichtenfluss 'XML_FlightQueryIn' erstellt, der innerhalb des Aggregationsbeispiels den Endpunkt des Nachrichtenflusses 'XML_FlightQuery' darstellt. Der Nachrichtenfluss 'XML_FlightQueryIn' fordert in Verbindung mit den Nachrichtenflüssen 'XML_FlightQueryOut' und 'XML_FlightQueryReply' Informationen zu einem bestimmten Flug und zu den Passagieren an, die auf diesem Flug Sitzplätze reserviert haben.

Symbol Hauptseite   Zurück zu "Das Beispielprogramm 'Airline Reservations' erstellen"