Web Service Host 샘플 빌드
다음 단계를 수행하지 않으려는 경우, 완성된 메시지 세트 프로젝트 및 메시지 플로우 프로젝트가 이 샘플과 함께 제공됩니다.
Web Service Host 샘플을 빌드하려면 다음을 수행하십시오.
- 메시지 세트를 작성하십시오. 이 메시지 세트는 웹 서비스 형식 메시지(XML) 및 레거시 형식(CWF) 모두에서 사용할 수 있습니다.
- Message Brokers Toolkit을 시작하십시오.
- 브로커 응용프로그램 개발 perspective에 있는지 확인하십시오.
- 파일 > 새로 작성 > 메시지 세트 프로젝트를 누르십시오.
- 프로젝트 이름을 WSHOST_MSP1로 설정한 후 다음을 누르십시오.
- 메시지 세트 이름을 WSHOST_MS1로 설정하십시오.
- 네임스페이스 사용을 선택한 후 다음을 누르십시오.
- 사용자 정의 Wire 형식 이름 및 XML Wire 형식 이름을 선택한 후 완료를 누르십시오.
- 컨텐츠를 저장하고 messageset.mset를 닫으십시오.
- C 헤더 파일을 들여옵니다. 이것은 레거시 응용프로그램의 입력 및 출력 메시지로 맵핑됩니다.
- 파일 > 가져오기 > 파일 시스템 > 다음을 누르십시오.
- WSHOST_LEGACY 프로젝트에서 legacyservice.h를 선택하기 위해 찾아보십시오.
- Into 폴더를 WSHOST_MSP1로 설정한 후 완료를 누르십시오.
- C 헤더 파일에서 브로커 메시지 정의 파일을 작성하십시오.
- 자원 네비게이터에서 legacyservice.h를 마우스 오른쪽 단추로 누른 후 새로 작성 > 메시지 정의 파일을 누르십시오.
- C 헤더 파일의 단일 선택 단추가 미리 선택되어 있어야 합니다. 그렇지 않으면,
이를 선택한 후 다음을 누르십시오.
- WSHOST_MSP1 프로젝트 내에서, legacyservice.h가 미리 선택되어 있어야 합니다.
그렇지 않으면, 이를 선택한 후 다음을 누르십시오.
- 메시지 세트 분할창에서 WSHOST_MSP1을 펼치고
WSHOST_MS1을 선택하십시오.
- 대상 네임스페이스 사용을 선택하고 http://www.brokersamplewshost.ibm.com을
URL에 입력한 후 다음을 누르십시오.
- 소스 구조 분할창에서 tagIA81CONF를 누르고 > 단추를 누른 후 모두 선택 > 완료를 누르십시오.
- 컨텐츠를 저장하고 legacyservice.mxsd를 닫으십시오.
- SOAP 메시지 정의를 빌드하십시오.
- 자원 네비게이터에서 메시지 세트 WSHOST_MS1을 마우스 오른쪽 단추로 누른 후 새로 작성 > 메시지 정의 파일을 누르십시오.
- 단일 선택 단추인 IBM 제공 메시지를 누른 후 다음을 누르십시오.
- IBM 제공 메시지 분할창에서 메시지 ibm\soap\envelope\soapenv11.xsd를 선택한 후 다음을 누르십시오.
- WSHOST_MSP1을 펼치고 WSHOST_MS1을 선택한 후 다음을 누르십시오.
- 메시지를 작성하려는 전역 요소 선택에서 선택한 요소가 없는지 확인한 후 완료를 누르십시오.
- 컨텐츠를 저장하고 soapenv11.mxsd를 닫으십시오.
- 인벨로프가 자동으로 메시지로서 작성되었음에 유의하십시오.
Message Brokers Toolkit 보기에 문제가 있으면 몇 개의 경고가 표시됩니다.
이는 주로 SOAP 메시지 정의에 대해 CWF를 정의할 경우 발생하며 이는 무시할 수 있습니다.
- 메시지 범주를 작성하십시오(WSDL 생성을 위한 필수조건).
WSDL에서 모든 조작 이름은 닫혀 있는 포트 유형 내에서 고유해야 합니다.
그러므로 메시지 범주에 정의된 요청 및 응답 메시지는 달라야 합니다.
이를 규명하기 위해 두 개의 새 메시지가 메시지 세트에 정의됩니다. 하나는 웹 서비스 입력용이고, 다른 하나는 웹 서비스 출력용입니다.
이것은 C 헤더 파일에 있는 mxsd 파일에서 작성됩니다.
- legacyservice.mxsd를 여십시오.
- 아웃라인 보기에서 메시지를 마우스 오른쪽 단추로 누르고
메시지 추가를 누르십시오.
- 메시지 이름을 IA81CONFIN으로 변경하고 Enter를 누르십시오.
- 메시지 정의 편집기에서 IA81CONFIN을 누르고 등록 정보 탭을 누르십시오.
- 등록 정보 페이지에서 선언 찾아가기를 누르십시오.
- 유형 목록에서 (계속...)을 선택하고 tagIA81CONF를 선택한 후 확인을 누르십시오.
- 아웃라인 탭에서 메시지를 마우스 오른쪽 단추로 누르고
메시지 추가를 누르십시오.
- 메시지 이름을 IA81CONFOUT으로 변경하고 Enter를 누르십시오.
- 기본 편집기에서 선언 찾아가기를 누르십시오.
- 유형 목록에서 (계속...)을 선택하고
tagIA81CONF를 선택한 후 확인을 누르십시오.
- 컨텐츠를 저장하고 legacyservice.mxsd를 닫으십시오.
- 파일 > 새로 작성 > 메시지 범주 파일을 누르십시오.
- 범주 종류를 wsdl로 설정하십시오.
- 범주 사용을 wsdl:requestresponse로 설정한 후 다음을 누르십시오.
- 메시지 세트 프로젝트 WSHOST_MSP1 내에서 메시지 세트 WSHOST_MS1을 선택하십시오.
- 파일 이름 필드에 cat1을 입력한 후 다음을 누르십시오.
- IA81CONFIN 및 IA81CONFOUT을 선택한 후 완료를 누르십시오.
- 등록 정보 계층 분할창에서 IA81CONFIN을 선택하십시오.
- 역할 이름을 IA81CONFIN으로 설정하고
역할 유형을 wsdl:input으로 설정하십시오.
- 등록 정보 계층 분할창에서 IA81CONFOUT을 선택하십시오.
- 역할 이름을 IA81CONFOUT으로 설정하고
역할 유형을 wsdl:output으로 설정하십시오.
- 컨텐츠를 저장하고 cat1.category를 닫으십시오.
- WSDL을 생성하십시오.
- 파일 > 새로 작성 > WSDL 정의 > 다음을 누르십시오.
- 메시지 세트 프로젝트 WSHOST_MSP1 내에서 메시지 세트 WSHOST_MS1을 선택한 후
다음을 선택하십시오.
- WSHOST_MSP1을 선택한 후 새 폴더 작성을 누르십시오.
- wsdl을 폴더 이름으로 입력한 후 확인을 누르십시오.
- 단일을 선택했는지 확인하고 다음을 누르십시오.
- "WSDL 세부사항 지정" 분할창에서 양식을
문서로 설정했는지 확인한 후 다음을 누르십시오.
- "범주 선택" 분할창에서 모두 선택 > 다음을 누르십시오.
- 바인딩 분할창에서 SOAP/HTTP > 다음을 누르십시오.
- "서비스 등록 정보" 분할창에서 포트 주소를
http://localhost:7080/samplebrokerwshost로 설정한 후 완료를 누르십시오.
- 메시지 플로우를 작성하십시오. 플로우는 HTTP Request를 수신하고 MQ를 사용하여 레거시 응용프로그램을 호출한 다음,
레거시 응용프로그램의 응답 정보를 HTTP 요청자에게 라우트합니다.
- 파일 > 새로 작성 > 메시지 플로우 프로젝트를 누르십시오.
- 프로젝트 이름을 WSHOST_MFP1으로 설정한 후 다음을 누르십시오.
- "참조 프로젝트" 분할창에서 WSHOST_MSP1을 선택한 후 완료를 누르십시오.
- 자원 네비게이터에서 WSHOST_MFP1을 마우스 오른쪽 단추로 누른 후 새로 작성 > 메시지 플로우를 누르십시오.
- 스키마를 WSHOST_MFP1로 설정하십시오.
- 이름을 WSHOST_WSHOST1로 설정한 후
완료를 누르십시오.
- 팔레트(숨겨진 경우)를 표시한 후 메시지 플로우 캔버스에 있는 다음 노드에 넣으십시오.
- 1 HTTP Input 노드
- 3 Compute 노드
- 2 MQOutput 노드
- 1 MQGet 노드
- 1 MQInput 노드
- 1 HTTPReply 노드
- 팔레트에서 연결을 누른 후 다음 노드 및 터미널에 연결하십시오.
- HTTPInput (out) - Compute (in)
- Compute (out) - MQOutput (in)
- MQOutput (out) - Compute1 (in)
- Compute1 (out) - MQOutput1 (in)
- MQInput (out) - MQGet (in)
- MQGet (out) - Compute2 (in)
- Compute2 (out) - HTTPReply (in)
- 나머지 노드의 이름을 바꾸는 것도 도움이 될 수 있습니다. 노드의 이름을 바꾸려면, 노드를 마우스 오른쪽 단추로 누른 후
이름 바꾸기를 누르십시오.
제시하는 이름은 다음과 같습니다.
- MQOutput -> MQOutput to legacy
- MQOutput1 -> MQOutput store HTTP state
- MQInput -> MQInput from legacy
- MQGet -> MQGet stored HTTP state
- HTTPInput 노드를 사용자 정의하십시오.
- HTTPInput 노드를 마우스 오른쪽 단추로 누르고 등록 정보를 누르십시오.
- 기본을 선택한 후 URL 선택자를 /samplebrokerwshost로 설정하십시오.
- 디폴트를 선택하십시오.
- 메시지 도메인의 경우, 드롭다운 목록에서 MRM을 선택하십시오.
- 메시지 세트의 경우, 드롭다운 목록에서 WSHOST_MS1을 선택하십시오.
- 메시지 유형의 경우 Envelope을 입력하십시오.
- 메시지 형식의 경우, 드롭다운 목록에서 XML1을 선택하십시오.
- 확인을 누르십시오.
- Compute 노드를 사용자 정의하십시오.
- Compute 노드를 마우스 오른쪽 단추로 누르고 ESQL 열기를 누르십시오.
- 이 모듈에 대한 BEGIN문과 END문 사이에 다음 ESQL을 코딩하십시오. 컨텐츠 보조(Ctrl + space)를 사용하여
키워드를 선택하십시오. 처음 컨텐츠 보조를 사용하여 SOAP 본문 요소와 기타 IA81CONFIN 요소를 선택할 경우 처음 두 행에 있는 주석과 유사한 DECLARE NAMESPACE문이 생성되어야 합니다. 이 코드를 복사하여 붙여넣는 경우, DECLARE NAMESPACE문을 주석 해제했는지 확인하십시오.
--DECLARE tns NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
--DECLARE ns NAMESPACE 'http://www.brokersamplewshost.ibm.com';CALL CopyMessageHeaders();
-- Output is MQ, so remove HTTP headers
SET OutputRoot.HTTPInputHeader = null;
-- Output is legacy, so set wire format and message name
SET OutputRoot.Properties.MessageType = 'msg_tagIA81CONF';
SET OutputRoot.Properties.MessageFormat = 'CWF1';
-- Add an MQMD
CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
-- Build message to be sent to legacy
SET OutputRoot.MRM.MessageId
= InputBody.tns:Body.ns:IA81CONFIN.MessageId;
SET OutputRoot.MRM.OrderNumber
= InputBody.tns:Body.ns:IA81CONFIN.OrderNumber;
SET OutputRoot.MRM.ItemReference
= InputBody.tns:Body.ns:IA81CONFIN.ItemReference;
SET OutputRoot.MRM.ItemQuantity
= InputBody.tns:Body.ns:IA81CONFIN.ItemQuantity;
SET OutputRoot.MRM.CustomerNumber
= InputBody.tns:Body.ns:IA81CONFIN.CustomerNumber;
SET OutputRoot.MRM.DeliveryRef = ' ';
SET OutputRoot.MRM.Confirm = ' ';
SET OutputRoot.MRM.filler1 = ' ';
RETURN TRUE;
- MQOutput (레거시에 대한 MQOutput) 노드를 사용자 정의하십시오.
- MQOutput 노드를 마우스 오른쪽 단추로 누르고 등록 정보를 누르십시오.
- 브로커의 다른 WebSphere MQ 큐 관리자에서 레거시 응용프로그램을 실행하려면
기본을 선택하고
큐 관리자 이름을 레거시 응용프로그램의
큐 관리자 이름으로 설정하십시오. 그렇지 않으면, 공백으로 두십시오.
- 큐 이름을 WSHOST1_OUT1로 설정하십시오.
- 고급을 선택하고 트랜잭션 모드를 예로 설정하십시오.
- 메시지 컨텍스트를 디폴트로 설정하십시오.
- 요청을 선택하고 요청의 선택란을 선택하십시오.
- 리플라이-투 큐를 WSHOST1_IN1로 설정한 후 확인을 누르십시오.
- Compute1 노드를 사용자 정의하십시오.
- Compute1 노드를 마우스 오른쪽 단추로 누르고 ESQL 열기를 누르십시오.
- 이 모듈에 대한 BEGIN문과 END문 사이에 다음 ESQL을 코딩하십시오. 컨텐츠 보조(Ctrl + space)를 사용하여
키워드를 선택하십시오. 처음 컨텐츠 보조를 사용하여 SOAP 본문 요소를 선택할 경우 첫 행에 있는 주석과 유사한 DECLARE NAMESPACE문이 생성되어야 합니다.
--DECLARE tns NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
--DECLARE ns NAMESPACE 'http://www.brokersamplewshost.ibm.com';
-- The output message built in this node stores the HTTP context.
-- Any format may be suitable, but we are using a
-- self-defined field in a SOAP Header to do this
-- So the wire format is XML
-- Create the target message set properties
SET OutputRoot.Properties.MessageSet = InputRoot.Properties.MessageSet;
SET OutputRoot.Properties.MessageType = 'Envelope';
SET OutputRoot.Properties.MessageFormat = 'XML1';
-- Create the MQMD and set the CorrelId
-- The CorrelId needs to be set to the MsgId of the message sent
-- to the legacy application. When the reply from the legacy
-- application is received, we will MQGet from the store
-- queue with correlid equal to the correlid of the legacy reply
SET OutputRoot.MQMD.CorrelId
= InputLocalEnvironment.WrittenDestination.MQ.DestinationData.msgId;
-- Build message to store HTTP context
SET OutputRoot.MRM.tns:Header.HTTP.RequestIdentifier
= InputLocalEnvironment.Destination.HTTP.RequestIdentifier;
RETURN TRUE;
- MQOutput1(HTTP 상태를 저장하는 MQOutput) 노드를 사용자 정의하십시오.
- MQOutput1 노드를 마우스 오른쪽 단추로 누르고 등록 정보를 누르십시오.
- 기본을 선택하고
큐 이름을 WSHOST1_STATE1로 설정하십시오.
- 고급을 선택하고 트랜잭션 모드를
예로 설정하십시오.
- 메시지 컨텍스트를 디폴트로 설정하십시오.
- 확인을 누르십시오.
- MQInput (레거시로부터의 MQInput) 노드를 사용자 정의하십시오.
- MQInput 노드를 마우스 오른쪽 단추로 누르고 등록 정보를 누르십시오.
- 기본을 선택하고 큐 이름을 WSHOST1_IN1로 설정하십시오.
- 디폴트를 선택하십시오.
- 메시지 도메인의 경우, 드롭다운 목록에서 MRM을 선택하십시오.
- 메시지 세트의 경우, 드롭다운 목록에서 WSHOST_MS1을 선택하십시오.
- 메시지 유형으로 msg_tagIA81CONF를 입력하십시오.
- 메시지 형식의 경우, 드롭다운 목록에서 CWF1을 선택하십시오.
- 확인을 누르십시오.
- MQGet (HTTP 상태를 저장하는 MQGet) 노드를 사용자 정의하십시오.
- MQGet 노드를 마우스 오른쪽 단추로 누르고 등록 정보를 누르십시오.
- 기본을 선택하고 큐 이름을 WSHOST1_STATE1로 설정하십시오.
- 디폴트를 선택하십시오.
- 메시지 도메인의 경우, 드롭다운 목록에서 MRM을 선택하십시오.
- 메시지 세트의 경우, 드롭다운 목록에서 WSHOST_MS1을 선택하십시오.
- 메시지 유형의 경우 Envelope을 입력하십시오.
- 메시지 형식의 경우, 드롭다운 목록에서 XML1을 선택하십시오.
- 고급을 선택하십시오.
- 생성 모드에 대해 드롭다운 목록에서 Message 및 LocalEnvironment을 선택하십시오.
- 메시지 복사에 대해 드롭다운 목록에서 전체 메시지 복사를 선택하십시오.
- 요청을 선택하고 상관 ID 가져오기의 선택란을 선택하십시오.
- 결과를 선택하고 출력 데이터 위치를 OutputLocalEnvironment로 설정하십시오.
- 확인을 누르십시오.
- Compute2 노드를 사용자 정의하십시오.
- Compute2 노드를 마우스 오른쪽 단추로 누르고 등록 정보를 누르십시오.
- 기본을 선택하고 처리 모드를 LocalEnvironment 및 Message로 설정하십시오.
- 확인을 누르십시오(HTTP 컨텍스트가 HTTPReply 노드로 전달됨).
- 노드를 마우스 오른쪽 단추로 누르고 ESQL 열기를 선택하십시오.
- 이 모듈에 대한 BEGIN문과 END문 사이에 다음 ESQL을 코딩하십시오.
--DECLARE tns NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
--DECLARE ns NAMESPACE 'http://www.brokersamplewshost.ibm.com';
-- Input is CWF, output is SOAP/XML
SET OutputRoot.Properties.MessageSet = InputRoot.Properties.MessageSet;
SET OutputRoot.Properties.MessageType = 'Envelope';
SET OutputRoot.Properties.MessageFormat = 'XML1';
SET OutputRoot.MRM.tns:Body.ns:IA81CONFOUT = InputRoot.MRM;
SET OutputRoot.MRM.tns:Body.ns:IA81CONFOUT.filler1 = NULL;
-- Set the http reply identifier
SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier =
CAST(InputLocalEnvironment.MRM.tns:Header.HTTP.RequestIdentifier AS BLOB);
RETURN TRUE;
- 컨텐츠를 저장하고 WSHOST_WSHOST1.esql을 닫으십시오.
- 컨텐츠를 저장하고 WSHOST_WSHOST1.msgflow를 닫으십시오.
- 브로커의 다른 WebSphere MQ 큐 관리자에서 레거시 응용프로그램을 실행하려면
레거시 응용프로그램의 큐 관리자에 레거시 응용프로그램의 입력 큐를 정의해야 합니다.
적절한 WebSphere MQ 유틸리티를 사용하여 다음의 큐 정의를 입력하십시오.
DEFINE QLOCAL(WSHOST1_OUT1) REPLACE
샘플 홈으로 돌아가기