.mfmap 파일 이주가 지원되지 않는 일부 시나리오가 있습니다. 이 주제에서는 이런 상황에서 이주가 자동으로 이루어지지 않는 이유를 설명하고 이주를 완료하는 방법에 대한 지시사항을 제공합니다.
버전 5.0(파일 형식: .mfmap)와 버전 6.0(파일 형식: .msgmap)은 메시지 맵 프로그래밍 모델이 상이합니다. 버전 5.0 메시지 맵에는 본질적으로 대체 ESQL인 절차상의 프로그래밍 모델이 있는데, 사용자는 변환을 수행하는 데 필요한 모든 단계를 여기서 설명합니다. 버전 6.0은 선언적 프로그래밍 모델을 사용하는데, 사용자는 여기서 변환의 결과를 설명하며 도구가 해당 결과를 얻는 방법을 판별합니다.
대부분의 이주 실패는 변환을 수행하는 단계에 대한 정보는 너무 많이 포함되어 있고 원하는 결과에 대한 정보는 부족한 메시지 맵으로 인해 발생합니다. 이런 메시지 맵의 경우, 특정 "how to" 섹션을 메시지 맵이 호출할 수 있는 ESQL 함수나 프로시저로 분리할 수 있도록 .mfmap 파일을 변경하면 이주가 가능합니다. .mfmap 파일은 이를 표현식으로 포함하는 대신 ESQL을 호출합니다. 그러면 mqsimigratemfmaps 명령이 .mfmap 파일을 이주하지만 이주 오류를 로그 기록하는 대신 ESQL을 호출합니다.
제한사항은 ESQL(.mfmap 및 .msgmap 파일의 경우 런타임)이 복합(complex) 요소(또는 REFERENCE) 값을 리턴하는 함수를 정의할 수 없다는 것입니다. 다음 프로시저는 이 복합(complex) 요소 대상 제한사항을 일시적으로 해결하는 방법을 설명하며, 대부분의 경우에 이는 맵을 ESQL로 다시 작성해야 함을 의미합니다. 맵에서 ESQL을 호출하는 방법에 대한 자세한 예와 정보는 WebSphere Message Brokers 맵핑 샘플을 참조하십시오.
의src_msg.e[1] + src_msg.e[2]다음과 같이 ESQL 함수에서 결과를 처리하십시오.
CREATE FUNCTION addOneAndTwo(IN src_msg) BEGIN RETURN src_msg.e[1] + src_msg.e[2]; END;.msgmap 파일에서, src_msg 상위 요소를 매개변수로 사용하여 ESQL 함수 addOneAndTwo를 호출하십시오.
src_msg.*또는
src_msg.*[]를 반복 필드의 상위를 갖는 함수를 사용하여 처리할 수 있습니다.
CREATE FUNCTION processAny(IN src_msg) BEGIN DECLARE nodeRef REFERENCE TO src_msg.e.*; DECLARE result <dataType> <initialValue>; WHILE LASTMOVE nodeRef DO --expression goes here SET result = result; END WHILE; RETURN RESULT; END;.msgmap 파일에서, src_msg 상위 요소를 매개변수로 사용하여 ESQL 함수를 호출하십시오.
src_msg.{'a' || 'b'}를 반복 필드의 상위를 처리하는 ESQL 함수로 처리할 수 있습니다.
CREATE FUNCTION processDynamicName(IN src_msg) BEGIN RETURN src_msg.{'a' || 'b'}; END;.msgmap 파일에서, src_msg 상위 요소를 매개변수로 사용하여 ESQL 함수를 호출하십시오.
SELECT MAX("#T".FIRSTNAME) FROM Database.CUSTOMER AS "#T" WHERE "#T".CUSTOMERID = custId를 반복 필드의 상위를 처리하는 ESQL 함수로 처리할 수 있습니다.
CREATE FUNCTION processMAX(IN custId) BEGIN RETURN SELECT MAX("#T".FIRSTNAME) FROM Database.CUSTOMER AS "#T" WHERE "#T".CUSTOMERID = custId END;.msgmap 파일에서, custId 요소를 매개변수로 사용하여 ESQL 함수를 호출하십시오.
e || "#I"를 ESQL로 완전히 다시 작성해야 합니다. 정의에 의해 복합 반복 상위 요소가 있어야 하며 이는 ESQL 함수에서는 지원되지 않습니다.
src_msg.e[src_msg.a]을 if 행, msgmap:occurrence() 함수, ESQL 함수를 사용하여 다시 작성해야 합니다.
for src_msg.e if condition msgmap:occurrence(src_msg/e) = src_msg/a
src_msg.e["#I" +5] src_msg.e[< 3].msgmap 파일이 반복 필드에 대한 색인화된 액세스를 아직 지원하지 않으므로 전체 .mfmap 파일을 ESQL로 다시 작성해야 합니다.
src_msg.e IN (1, 2, 3)을 ESQL로 다시 작성해야 합니다(.msgmap 파일이 ESQL ROW 표현식을 지원하지 않음).