XML_CancelReservation 메시지 플로우를 작성하려면 다음 지시사항을 따르십시오. 자세한 정보는 각 단계의 끝에서 제공되는 링크를 누르십시오.
XML_CancelReservation 메시지 플로우를 작성하고 구성하려면 다음을 수행하십시오.
노드 유형 | 노드 이름 |
---|---|
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 |
노드 이름 | 터미널 | 연결할 대상 |
---|---|---|
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 |
노드 이름 | 페이지 | 등록 정보 | 값 |
---|---|---|---|
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 (메시지 플로우가 메시지를 넣는 로컬 큐입니다.) |
-- ************************************************ -- * 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 메시지 플로우가 작성되었습니다.