XML_CancelReservation 메시지 플로우 작성

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

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

  1. XML_CancelReservation이라는 새 메시지 플로우를 작성하십시오.
    지시사항은 메시지 플로우 작성을 참조하십시오.
  2. 메시지 플로우 편집기에서 다음 표에 나열된 노드를 추가하고 노드의 이름을 바꾸십시오.
    지시사항은 노드 추가를 참조하십시오.
    노드 유형 노드 이름
    MQInput XML_CANCELRESERVATION_IN
    MQOutput XML_CANCELRESERVATION_OUT
    MQOutput XML_CANCELRESERVATION_FAIL1_1
    MQOutput XML_CANCELRESERVATION_FAIL1_2
    MQOutput XML_CANCELRESERVATION_FAIL2
    Compute DeleteReservation
    Compute IncrementSeat
    Trace Trace
    Trace Trace1
    Trace Trace2
  3. 다음 표에 표시된 대로 노드를 서로 연결하십시오.
    지시사항은 노드 연결을 참조하십시오.
    노드가 서로 올바르게 연결되었는지 점검하려면 XML_CancelReservation 메시지 플로우 정보에 있는 그림을 참조하십시오.
    노드 이름 터미널 연결할 대상
    XML_CANCELRESERVATION_IN Out DeleteReservation
    Catch XML_CANCELRESERVATION_FAIL1_1
    DeleteReservation Failure Trace
    Out Trace1
    Trace Out XML_CANCELRESERVATION_FAIL1_2
    Trace1 Out IncrementSeat
    IncrementSeat Failure Trace2
    Out XML_CANCELRESERVATION_OUT
    Trace2 Out XML_CANCELRESERVATION_FAIL2
  4. 다음 표에 표시된 대로 노드 등록 정보를 구성하십시오. 표에 대체 값이 표시된 경우를 제외하고 모든 등록 정보의 디폴트 값을 승인하십시오.
    지시사항은 노드 구성을 참조하십시오.
    노드 이름 페이지 등록 정보
    XML_CANCELRESERVATION_IN 기본 큐 이름 XML_CANCELRESERVATION_IN
    (메시지 플로우가 메시지를 가져오는 로컬 큐입니다.)
    디폴트 메시지 도메인 XML
    (브로커에게 일반 XML 구문 분석기를 사용하도록 알려줍니다.)
    DeleteReservation 기본 데이터 소스 RESERVDB
    (이 노드에서 사용하는 데이터베이스입니다.)
    기본 ESQL 모듈 DeleteReservation
    (처리 중에 이 노드에서 사용하는 ESQL 모듈의 이름입니다. 이 이름은 ESQL 파일의 CREATE COMPUTE MODULE문에 있는 이름과 일치해야 합니다.)
    기본 데이터베이스 오류시 예외 전달 ESQL에서 메시지 플로우가 데이터베이스 오류를 처리하는 방법을 지정할 수 있도록 이 선택란을 지우십시오. 이 선택란을 선택하면 데이터베이스 오류가 발생할 때 메시지 플로우는 디폴트로 예외를 전달하고 이 메시지를 FAIL 큐로 전달합니다.
    Trace 기본 목적지 로컬 오류 로그
    (노드에게 로컬 오류 로그에 추적 정보를 쓰도록 지시합니다. Windows에서 로컬 오류 로그는 이벤트 뷰어이고, Linux에서는 syslog입니다.)
    기본 패턴 ==== Delete Reservation 노드부터의 오류 ==================
    ${ExceptionList}

    (메시지의 ExceptionList 트리 부분을 로그합니다.)
    기본 메시지 번호 3051
    XML_CANCELRESERVATION_FAIL1_1 기본 큐 이름
    (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.)
    XML_CANCELRESERVATION_FAIL1
    (처리에 실패할 경우에 메시지 플로우가 메시지를 넣는 로컬 큐입니다.)
    XML_CANCELRESERVATION_FAIL1_2 기본 큐 이름
    (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.)
    XML_CANCELRESERVATION_FAIL1
    (처리에 실패할 경우에 메시지 플로우가 메시지를 넣는 로컬 큐입니다.)
    Trace1 기본 목적지 로컬 오류 로그
    (노드에게 로컬 오류 로그에 추적 정보를 쓰도록 지시합니다. Windows에서 로컬 오류 로그는 이벤트 뷰어이고, Linux에서는 syslog입니다.)
    기본 패턴 ========== Delete Reservation 노드 이후의 메시지 ===================
    ${Root}
    ${Environment}

    (메시지의 메시지 및 환경 트리 부분을 로그합니다.)
    기본 메시지 번호 3051
    IncrementSeat 기본 데이터 소스 RESERVDB
    (이 노드에서 사용하는 데이터베이스입니다.)
    기본 ESQL 모듈 IncrementSeat
    (처리 중에 이 노드에서 사용하는 ESQL 모듈의 이름입니다. 이름은 XML_CancelReservation.esql 파일에서 CREATE COMPUTE MODULE문의 이름과 일치해야 합니다.)
    Trace2 기본 목적지 로컬 오류 로그
    (노드에게 로컬 오류 로그에 추적 정보를 쓰도록 지시합니다. Windows에서 로컬 오류 로그는 이벤트 뷰어이고, Linux에서는 syslog입니다.)
    기본 패턴 ======== Increment Seat 노드부터의 오류 ===================
    ${ExceptionList}


    (메시지의 ExceptionList 트리 부분을 로그합니다.)
    기본 메시지 번호 3051
    XML_CANCELRESERVATION_FAIL2 기본 큐 이름
    (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.)
    XML_CANCELRESERVATION_FAIL2
    (처리에 실패할 경우에 메시지 플로우가 메시지를 넣는 로컬 큐입니다.)
    XML_CANCELRESERVATION_OUT 기본 큐 이름
    (큐가 브로커와 동일한 큐 관리자에 정의되어 있으므로 큐 관리자 이름을 지정할 필요가 없습니다.)
    XML_CANCELRESERVATION_OUT
    (메시지 플로우가 메시지를 넣는 로컬 큐입니다.)
  5. XML Airline 메시지 플로우 프로젝트에서 ESQL 파일 프로젝트를 두 번 눌러 ESQL 편집기로 열고, 다음 ESQL 코드 모듈을 ESQL 파일로 복사하여 붙여넣으십시오. 자세한 정보는 ESQL 개발을 참조하십시오.
    -- ************************************************
    -- * 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.XML.CancelReservation.ListOfReservations;
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(cancel.ReservationNumber[]);
    		WHILE I <= J DO -- loop through the reservations to be cancelled
    			-- check that the requested reservation exists
    			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;
    
    			-- delete the record from the database
    			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;

이제 XML_Reservation 메시지 플로우가 이전에 작성한 예약을 취소하는 XML_CancelReservation 메시지 플로우가 작성되었습니다.

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