XML_FlightQueryIn 메시지 플로우 작성

XML_FlightQueryIn 메시지 플로우를 작성하려면 다음 지시사항을 따르십시오. 자세한 정보는 각 단계의 끝에서 제공되는 링크를 누르십시오.

XML_FlightQueryReply 메시지 플로우를 작성하기 전에, XML_FlightQueryOut 및 XML_FlightQueryReply 메시지 플로우를 작성해야 합니다. 지시사항은 XML_FlightQueryOut 메시지 플로우 작성XML_FlightQueryReply 메시지 플로우 작성을 참조하십시오.

XML_FlightQueryIn 메시지 플로우를 작성하고 구성하려면 다음을 수행하십시오.

  1. XML_FlightQueryIn이라는 새 메시지 플로우를 작성하십시오.
    지시사항은 메시지 플로우 작성을 참조하십시오.
  2. 메시지 플로우 편집기에서 다음 표에 나열된 노드를 추가하고 노드의 이름을 바꾸십시오.
    지시사항은 노드 추가를 참조하십시오.
    노드 유형 노드 이름
    MQInput XML_FLIGHTQUERY_REPLIES
    MQOutput XML_FLIGHTQUERY_OUT
    MQOutput XML_FLIGHTQUERY_TIMEOUT
    MQOutput XML_FLIGHTQUERY_FAIL
    Compute BuildOutputMessage
    Compute ProcessTimeout
    AggregateReply AggregateReplies
  3. 다음 표에 표시된 대로 노드를 서로 연결하십시오.
    지시사항은 노드 연결을 참조하십시오.
    노드가 서로 올바르게 연결되었는지 점검하려면 XML_FlightQueryIn 메시지 플로우 정보에 있는 그림을 참조하십시오.
    노드 이름 터미널 연결할 대상
    XML_FLIGHTQUERY_REPLIES Out AggregateReplies(In 터미널)
    Catch XML_FLIGHTQUERY_FAIL
    AggregateReplies Out BuildOutputMessage
    Timeout ProcessTimeout
    BuildOutputMessage Out XML_FLIGHTQUERY_OUT
    ProcessTimeout Out XML_FLIGHTQUERY_TIMEOUT
  4. 다음 표에 표시된 대로 노드 등록 정보를 구성하십시오. 표에 대체 값이 표시된 경우를 제외하고 모든 등록 정보의 디폴트 값을 승인하십시오.
    지시사항은 노드 구성을 참조하십시오.
    노드 이름 페이지 등록 정보
    XML_FLIGHTQUERY_REPLIES 기본 큐 이름 XML_FLIGHTQUERY_REPLIES
    (XML_FlightQueryOut에서 제어 메시지를 넣는 큐입니다.)
    디폴트 메시지 도메인 XML
    (브로커에게 일반 XML 구문 분석기를 사용하도록 알려줍니다.)
    Aggregate Replies 기본 집계 이름 FLIGHTDETAILSAGG
    (이 이름은 FlightQuery_Out 메시지 플로우에 있는 Request details 노드의 집계 이름 등록 정보와 일치해야 합니다.)
    기본 알 수 없는 메시지 시간 종료 60
    (Unknown 터미널로 전달되기 전에 응답으로 식별될 수 없는 메시지가 보류되는 시간의 길이입니다.)
    Build Output Message 기본 ESQL 모듈 BuildOutputMessage
    (처리 중에 이 노드에서 사용하는 ESQL 모듈의 이름입니다. 이 이름은 ESQL 파일의 CREATE COMPUTE MODULE문에 있는 이름과 일치해야 합니다.)
    XML_FLIGHTQUERY_OUT 기본 큐 이름
    (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.)
    XML_FLIGHTQUERY_OUT
    (메시지 플로우가 메시지를 넣는 로컬 큐입니다.)
    Process Timeout 기본 ESQL 모듈 ProcessTimeout
    (처리 중에 이 노드에서 사용하는 ESQL 모듈의 이름입니다. 이 이름은 ESQL 파일의 CREATE COMPUTE MODULE문에 있는 이름과 일치해야 합니다.)
    XML_FLIGHTQUERY_TIMEOUT 기본

    큐 이름
    (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.)

    XML_FLIGHTQUERY_TIMEOUT
    (모든 응답 메시지가 XML_FlightQueryOut 메시지 플로우의 Request Details 노드에 지정된 시간종료 이전에 Aggregate Replies 노드에 이르지 못할 경우, 메시지 플로우가 불완전한 집계 메시지를 넣는 로컬 큐입니다.)
    XML_FLIGHTQUERY_FAIL 기본 큐 이름
    (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.)
    XML_FLIGHTQUERY_FAIL
    (처리에 실패할 경우 메시지 플로우가 메시지를 넣는 곳입니다.)
  5. XML Airline 메시지 플로우 프로젝트에서 ESQL 파일 프로젝트를 두 번 눌러 ESQL 편집기로 열고, 다음 ESQL 코드 모듈을 ESQL 파일로 복사하여 붙여넣으십시오. 자세한 정보는 ESQL 개발을 참조하십시오.
    -- ************************************************
    -- * 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;
    

이제, XML_FlightQuery 메시지 플로우의 fan-in 부분을 집계하는 XML_FlightQueryIn 메시지 플로우가 작성되었습니다. XML_FlightQueryIn 메시지 플로우는 XML_FlightQueryOut 및 XML_FlightQueryReply 메시지 플로우에 작동하여 특정 항공기에 대한 정보 및 항공기에 좌석을 예약한 승객에 대한 정보를 요청합니다.

기본 페이지 아이콘   Airline Reservations 샘플 빌드로 돌아가기