Chapter 4 - BPEL Orchestration

Posted at 2010. 2. 4. 15:47 | Posted in Oracle Solution/PO Processing
Introduction

이 앞으로도 마찬가지지만 전에 했던 튜토리얼이 배치까지 완료가 되어있어야합니다.

전 튜토리얼에 이어서 총액이 1000원이 넘으면 카드번호로 상태를 검사하는 BPEL 을 추가해보겠습니다.

대충 흐름을 보자면 이러겠네요...



이번 튜토리얼에서 추가되는것은 BPEL 과 전전 튜토리얼에서 만들었던 DbAdapter를 사용하게 됩니다.

그리고 Mediator를 수정합니다.



Invoking the CreditCardStatus service

Web Service 컴포넌트를 External References 영역에 드래그 앤 드랍 합니다.



Name : getGreditCardStatus

WSDL URL 오른쪽에 Find existing WSDLs 버튼 클릭



현재 실행되고 있는 어플리케이션 서버에서 validationForCC - getStatusByCC 를 선택합니다.



WSDL URL 확인하시구 OK 클릭



BPEL Process 컴포넌트를 Components 영역이 드래그 앤 드랍 합니다.




Name : approveLargeOrder
Template : Asynchronous BPEL Process
Expose as a SOAP service 체크 해제

Input 오른쪽의 Browse Input Elements 버튼 클릭




Project Schema Files - internalorder.xsd - Order 선택




Input 엘리먼트 확인 하시고 Output도 똑같이 Order를 선택합니다.






OK 클릭




ApproveLargeOrdergetCreditCardStatus연결합니다.




ApproveLargeOrder 더블 클릭





Designing the BPEL approval process

Invoke 액티브를 receiveInput 과 callbackClient 사이에 드래그 앤 드랍 합니다.

Invoke 액티브는 외부의 서비스를 실행하는 역할을 합니다.




Invoke_1 과 getCreditCardStatus 를 연결합니다.




Name : invokeCCStatusService

Input 오른쪽의 Automatically Create Input Variable 버튼 클릭




OK 클릭




Output 도 마찬가지로....






OK 클릭




Assign 액티브를 receiveInput 아래에 드래그 앤 드랍 합니다.

Assign 액티브는 값을 연결(전달? 매핑?)해주는 역할을 합니다.




Assign_1 더블 클릭




General 탭에서 Name : assignCCNumber




Copy Operation 탭에서

+ 버튼 - Copy Operation 클릭




From은 Variables - Process - Variables - inputVarable - payload - ns2:Order - creditCardInfo - cardNumber 선택

To는 Variables - Process - Variables - invokeCCStatusService_execute_InputVariable - request - creditcardStatusRequest - CCNumber 선택




다시 한번 + 버튼 - Copy Operation 클릭




Form은 Variables - Process - Variables - inputVariable - payload - Order 선택

To는 Variables - Process - Variables - outputVariable - payload - Order 선택




2개 등록된거 확인하시구 OK




Switch 액티브를 invokeCCStatusService 아래에 드래그 앤 드랍 합니다.




+ 를 클릭합니다.




View Condition Expression을 클릭합니다.




조건문을 입력할수 있는 텍스트창이 나오는데 Xpath Expression Builder 버튼을 클릭합니다.




BPEL Variables 부분의 변수명을 더블클릭하거나 선택 후 Inert Into Expression 을 클릭하면

조건문을 입력하는 텍스트에 변수명이 찍힙니다.

그 후 " = 'VALID' " 를 추가합니다.

bpws:getVariableData('invokeCCStatusService_execute_OutputVariable','reply','/ns3:creditcardStatus') = 'VALID'




조건이 입력되었습니다. 바깥 영역을 클릭하여 Condition Expression 창을 닫습니다.




Assign 액티브를 스위치문의 <case>영역(참)에 드래그 앤 드랍 합니다.




Assign_1 더블 클릭




General 탭에 Name : assignApproval




Copt Operation 탭에서 + 버튼 - Copy Operation 클릭




From 에서 Type : Expression 선택. Expression : 'approved' 입력




확인 하시구 OK 클릭




이번에는 Assign 액티브를 <otherwise>영역(거짓)에 드래그 앤 드랍 합니다.




Assign_1 더블 클릭




General 탭에서 Name : assignInvalidCC

이번에는 'invalidCreditCard'를 세팅 합니다.










Validate Process를 클릭합니다.

정상적으로 작성되었으면 느낌표(경고 표시)가 사라집니다.





Modifying the Mediator component

routePO(Mediator)와 approveLargeOrder(BPEL Process)를 연결합니다.




routePO 더블 클릭




첫번째 라우팅 부분에 필터 조건을 추가합니다. Invoke Expression Builder 버튼 클릭




조건문을 작성합니다.

($in.request/inp1:PurchaseOrder/inp1:price * $in.request/inp1:PurchaseOrder/inp1:quantity) < 1000 




첫번째 라우팅에 조건 들어간것 확인하시구 두번째 라우팅에 조건을 추가합니다.




조건문을 작성합니다.

($in.request/inp1:PurchaseOrder/inp1:price * $in.request/inp1:PurchaseOrder/inp1:quantity) >= 1000




두번째 라우팅의 조건 확인하시구 콜백(Callback) 받을 타겟을 지정합니다.

Browse for target service operations 버튼 클릭




Service 선택




SOAComposite1(이거 원래.. POProecssing 여야 되는데.. -_-) - References - WriteApprovalResults - Write 선택




두번째 라우팅의 값 매핑을 세팅합시다.




Create New Mapper File 선택




[inp1:PurchasseOrder]를 [inpt1:Order]로 드래그 앤 드랍 합니다.




자동 매핑합니다. OK




자동으로 매핑 되었습니다.




이번에는 콜백될 때 값들을 매핑합시다.




Create New Mapper File 선택




마찬가지로 자동 매핑합니다.









Deploying the application

배치는 여기를 봐주세요



Testing the application

POProcess 선택



테스트 클릭





1,000원이 넘는 주문을 입력합니다.



일단 에러는 없이 잘 됐군요... 추적!!!!!



원하는대로 잘 실행된 것을 볼 수 있습니다.

approveLargeOrder를 클릭합니다.



BPEL 프로세스 에서 값이 어떻게 전달 되었는지 볼 수 있습니다.

getCreditCardStatus에 CCNumber를 넣어줘서 VALID가 출력으로 나온 것을 볼 수 있습니다.

그리고 Switch 에 주문 상태(status)가 approved인 것도 볼 수 있습니다.



※ BPEL Process는 "흐름"탭을 클립해서 보면 아이콘으로 흐름이 나와서 더 쉽게 볼 수 있습니다.



아이콘을 클릭하면 입력, 출력 값을 확인할 수 있습니다.




이어서 C:\TEMP(File Adapter 만들때 지정했던 저장 폴더)에 생성된 파일을 열어보면 아래와 같이 내용이 들어있습니다.



이번에는 똑같지만 승인되지 않은 카드번호를 입력하겠습니다.



getCreditCardStatus 결과로 INVALID가 떨어졌군요.

그리고 주문 상태(status)는 invalidCreditCard가 되었습니다.



저장된 파일을 열어봅시다.



이번에는 그냥 1,000원이 안넘는 주문입니다.



BPEL 프로세스를 타지 않고 바로 파일로 기록됩니다.



저장된 파일







tag: , ,

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기