Chapter 7 - Adding Business Rules

Posted at 2010. 2. 10. 13:52 | Posted in Oracle Solution/PO Processing
반응형
Introduction

Business Rule 컴포넌트를 이용하여 5000원이 넘는 주문만 휴먼테스크를 이용해 처리하고 5000~1000의 주문이면 그냥 카드상태만 체크하게 변경해봅시다~



이렇게 규칙(?)을 때로 빼놓으면 나중에 7,500원이 넘는 결제를 휴먼테스크로 처리하고 싶으면 Business Rule 컴포넌트만 변경하면 되지 편하겠네용용~



Adding a Bussiness Rule to POProcessing

비지니스 룰(Business Rule) 컴포넌트를 Components 영역에 드래그 앤 드랍 합니다.



Name : ManualApproval

Input 추가



Import 클릭 - 아래 파일을 임포트(import) 합니다.









price를 선택합니다.



이번에는 Output을 추가 합니다.



discountandshipping 선택



OK 클릭



ManualApproval(Business Rule) 더블클릭



Ruleset_1 에서 Create 버튼 클릭



아래 Rule_1 이 추가 되는데 IF 부분에 <insert test> 클릭



클릭 하면 <operand> == <operand> 가 나오는데 앞의 <operand> 클릭 후 price 선택



== 부분 클릭 후 <= 선택



마지막 오른쪽 <operand> 클릭 후 5000 입력



THEN 아래 부분의 <insert action> 클릭 후 assert new 클릭



assert new <target> 가 생기고 <target> 클릭 후 discountandshipping 선택



<add property> 클릭



Value를 아래 그림과 같이 바꿔 줍니다.



Rule 를 하나 더 추가 합니다.

IF
    price.price < 5000
THEN
    .........





2개의 Rule 만들어졌습니다.



저장 후 Business Rule 편집창을 닫습니다.

approveLargeOrder(BPEL Process)를 더블 클릭해서 편집 합니다.

구조 팔레트(Structure palette) 부분에서 Variables - Process - Variables를 선택합니다.

선택 되어있는 상태에서 + 버튼(Create An Object of The Selected Node Type)을 클릭합니다.



Name: approvalRequired

엘리먼트(Element) 선택 후, 오른쪽의 찾기(Browse) 버튼 클릭



OrderBookingDiscount.xsd - discountandshipping 선택



OK 클릭



Business Rule 액티브를 ManualPOApproval_1 위에 드래그 앤 드랍 합니다.



Name : ApprovalRule
Dictionary : ManualApproval

Assign Input Facts 탭에서 추가(Create) 버튼 클릭



아래와 같이 입력 합니다. (빌더를 이용하셔요~)



Assign Output Facts 탭에서 추가(Create) 버튼 클릭



아래와 같이 선택합니다.



OK 클릭



추가된 ApprovalRule(Business Rule) 아래에 스위치(Switch) 액티브를 추가합니다.



추가된 스위치의 <case> 영역에 시퀀스(Sequence) 액티브를 추가합니다.



ManualPOApproval_1 액티브를 스위치 <case>의 시퀀스 액티브 안으로 옮깁니다.



taskSwitch 도 마찬가지로 이동



<case> 조건을 설정합니다.



Xpath Builder 클릭



bpws:getVariableData('approvalRequired','/ns5:discountandshipping/ns5:approvalRequired') = 'true'



<otherwise> 영역에 Assign 액티브를 추가합니다.



Assign_1 더블 클릭



General 탭에서

Name : AutoApproved



Copy Operation 탭에서 값을 세팅합니다.



'approved' 를 outputVariable - status 에 입력합니다.



OK 클릭



모두 저장합니다.





Deploying and Running the application

주문가격(price * quantity)이 5,000원 이상인 주문을 테스트 해봅시다~

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/ns/order">
        <ns1:PurchaseOrder>
            <ns1:CustID>1111</ns1:CustID>
            <ns1:ID>1212</ns1:ID>
            <ns1:productName>HD TV</ns1:productName>
            <ns1:itemType>Electronics</ns1:itemType>
            <ns1:price>2250</ns1:price>
            <ns1:quantity>10</ns1:quantity>
            <ns1:status>Initial</ns1:status>
            <ns1:ccType>Mastercard</ns1:ccType>
            <ns1:ccNumber>1234-1234-1234-1234</ns1:ccNumber>
        </ns1:PurchaseOrder>
    </soap:Body>
</soap:Envelope>

ManualPOApproval(Human Task)에서 실행 중 상태입니다.



BPEL Process(approveLargeOrder)를 조금 자세히 보자면 아래와 같습니다.



BPM 작업 목록에서 확인해보면 주문이 하나 올라와있습니다. 승인 처리 해봅시다.



모든 처리가 완료 되었습니다.



Write 된 파일입니다.



1,000 ~ 4,999원의 주문은 그냥 카드 상태만 검사합니다.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/ns/order">
        <ns1:PurchaseOrder>
            <ns1:CustID>1111</ns1:CustID>
            <ns1:ID>2222</ns1:ID>
            <ns1:productName>iPod shuffle</ns1:productName>
            <ns1:itemType>Electronics</ns1:itemType>
            <ns1:price>145</ns1:price>
            <ns1:quantity>30</ns1:quantity>
            <ns1:status>Initial</ns1:status>
            <ns1:ccType>Mastercard</ns1:ccType>
            <ns1:ccNumber>1234-1234-1234-1234</ns1:ccNumber>
        </ns1:PurchaseOrder>
    </soap:Body>
</soap:Envelope>

ManualPOApproval(Human Task)을 타지 않았습니다.



Business Rule 이후에 approvalRequired 변수가 false로 갱신되었습니다.



1,000원 미만의 주문은 패스... 직접 해보세요~

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/ns/order">
        <ns1:PurchaseOrder>
            <ns1:CustID>1111</ns1:CustID>
            <ns1:ID>2121</ns1:ID>
            <ns1:productName>Bluetooth Headset</ns1:productName>
            <ns1:itemType>Electronics</ns1:itemType>
            <ns1:price>49.99</ns1:price>
            <ns1:quantity>1</ns1:quantity>
            <ns1:status>Initial</ns1:status>
            <ns1:ccType>Mastercard</ns1:ccType>
            <ns1:ccNumber>8765-8765-8765-8765</ns1:ccNumber>
        </ns1:PurchaseOrder>
    </soap:Body>
</soap:Envelope>





반응형
//

Chapter 6 - Modifying the Mediator

Posted at 2010. 2. 10. 09:55 | Posted in Oracle Solution/PO Processing
반응형
Introduction

큰 주문(>1000)일 때는 BPEL 프로세서를 타면서 승인/거부 처리 하지만, 작은 주문일 때는 BPEL 프로세서를 타지 않아서 status가 Initial로 나옵니다.

그래서 작은 주문일 경우 무조건 승인(approved) 처리가 되게 해줍시다.



Modifying the application

routePO(Mediator) 더블 클릭




WriteApprovalResults::Write 가는 스태틱 라우팅(Static Routing) 부분의 트랜스폼(Transform Using)을 수정합니다.




수정(Edit) 클릭




PurchaseOrdr - status 에서 Order - status 로 가는 선을 삭제 합니다.




Order - status 에서 마우스 오른쪽 버튼 클릭 후 Set Text - Enter Text




"approve"를 입력합니다.




노란색 배경의 [T] 를 확인 하세요





Deploying and testing the application

배치 후 작은 주문(1000원 미만)을 테스트 합니다.








반응형
//

Chapter 5 - Adding Human Workflow

Posted at 2010. 2. 5. 15:32 | Posted in Oracle Solution/PO Processing
반응형
Introduction

전 튜토리얼에서 금액이 1,000원이 넘으면 카드상태를 체크하는 BPEL 처리까지 만들어봤습니다.

<< Chapter 4. 까지 완성된 SOA >>

이번에는 1,000원이 넘고 카드상태가 정상(VALID)이면 관리자(?)의 수동 승인을 거치는 작업을 만들어 보겠습니다.



나름대로 정리해봤는데 -_- 맞나? ㄷㄷ;;



Adding a Human Task to the composite

composite에서 Human Task 컴포넌트를 Components 영역에 드래그 앤 드랍 합니다.




Name : ManualPOApproval

Create Composite Service width SOAP bindings 체크 해제




ManaualPOApproval과 approveLargeOrder를 연결합니다.




ManualPOApproval 컴포넌트를 더블 클릭합니다.




General 탭에서

Title : <%'Approve Order'%>
Description : Manual approval task for large orders



Data 탭에서 + 버튼 - Add other payload 클릭



Element 선택하고 오른쪽에 돋보기 버튼 클릭



internalorder.xsd - Order 선택



Editable via worklist 체크 합니다.



Assignment 탭에서 <Edit participant> 더블 클릭합니다.



Type : Single
Label : Large Order Approver

+ 버튼 - Add User 클릭



Identification Type : User
Data Type : By Name
value : weblogic



모두 저장 합니다.



Calling the Human Task from BPEL

이번에는 approvLargeOrder(BPEL Process)를 더블 클릭해서 편집합니다.




assignApproval 액티브 아래에 Human Task 컴포넌트를 드래그 앤 드랍 합니다.




Task Definition : ManualPOApproval
Task Title : Approve Order

오른쪽에 [...] 버튼을 클릭합니다.




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




OK 클릭




그림고 같이 ManualPOApproval_1 과 taskSwitch 두개의 액티브가 생겼습니다.

taskSwitch 를 확장합니다.




3가지의 조건이 나옵니다.




assignApproval을 <case Task outcome is APPROVE> 영역 Assign 아래로 이동시킵니다.




<case Task outcome is REJECT> 영역의 CopyPayloadForTask 더블 클릭




+ 버튼 - Copy Operation 클릭




'rejected'를 세팅 합니다.






<otherwise Task is outcome is EXPIRED, STALE, WITHDRAWN, or ERRORED> 영역의 Assign 에는 'expired' 를 세팅합니다.











Creating the Task form for task details

POPrecessing 어플리케이션에서 새로운 프로젝트 생성




Generic Project 선택



Project Name : ApproveTaskDetails

Project Technologies 선택하지 않고 Finish



ApproveTaskDetails 에서 마우스 오른쪽 버튼 - New



Web Tier - JSF 선택

ADF Task Flow Based on Human Task 선택

OK 클릭




POProcessing 디렉토리의 ManualPOApproval.task 선택




기본으로 두고 OK



ADF 파일들이 생성되었습니다.



taskDetails1_.jspx 더블 클릭



OK 클릭



Data Controls 색션에 있는 Task를 오른쪽 공간에 드래그 앤 드랍 합니다.




메뉴가 나오는데 Human Task - Complete Task with Payload 선택







짜잔! 페이지가 만들어졌습니다 우왕~



모두 저장합니다.



Deploying the application

POProcessing는 하던대로 배치합니다.

ApproveTaskDetails을 배치할때는 어플리케이션 메뉴를 이용해야 되더군요..











Testing the application

주문 가격이 1,000원이 넘고 카드상태가 정상인 데이터를 넣어봅니다.



메시지 흐름 추적 실행 클릭

※ 아직 이 흐름추적 실행 할 수 있는 페이지에서 다른곳으로 이동 하지 마세용~



추적에서 보면 ManualPOApproval 에서 실행 중 상태인 것을 볼 수 있습니다. ㄷㄷ



BPM에 접속한 후 받은 편지함에 보면 주문(?)이 들어와 있습니다.



세부 정보 확인 후 승인 또는 거부 할 수 있습니다.



승인 후 EM으로 와서 추적을 다시 해보면 처리가 완료된 것을 확인할 수 있습니다.



승인 처리된 파일을 보면 status가 approved가 되었습니다.



거부 처리된 파일을 보면 status가 rejected인 것을 확인할 수 있습니다.



이번에는 취소 처리를 하겠습니다.




status가 expired가 되었습니다.







반응형
//

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 프로세스를 타지 않고 바로 파일로 기록됩니다.



저장된 파일







반응형
//
반응형
Introduction

이번 튜토리얼에서는 File Adapter 를 이용하여 주문(PO) 요청를 파일로 기록하는 서비스를 만들어보겠습니다.



Creating a new application

File - New 또는 어플리케이션 리스트에서 New Application을 선택합니다.




Application Name : POProcessing




Project Name : POProcessing
Project Technologies : SOA




Finish 클릭





Adding the service interface

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




Name : receivePO

WSDL URL 오른쪽의 Generate(톱니모양) 버튼 클릭




Request 탭에서 URL 오른쪽의 browse(돋보기모양) 버튼 클릭




상단 오른쪽의 Import Schema File 버튼 클릭





파일을 선택





Maintain original directory structure for imported files 채크 해제




PurchaseOrder 선택




OK 클릭. 여기서는 Reply, Fault 을 지정 안합니다.





Adding the routing component

Mediator 컴포넌트를 Components 영역에 드래그 앤 드랍 합니다.




Name : routePO
Template : Define Interface Later





Adding the File Adapter

File Adapter 컴포넌트를 External References 영억에 드래그 앤 드랍 합니다.




Service Name : WriteApprovalResults




Define from operation and schema (specified later) 선택




Write File 선택




파일 저장 위치와 저장할 이름 패턴을 지전합니다.

파일 패턴에서 %를 입력하면 가능한 패턴이 콤보로 나오게 됩니다.

※ 여기서 주의할 점음 경로(Directory)를 설정하실 때, 서버(WebLogic)가 깔린 PC가 기준입니다.

자기 컴퓨터에 JDeveloper와 서버가 다 깔려있다면 신경 안쓰고 해도 되지만, 개발PC와 서버PC가 다르면 서버PC가 기준이 됩니다.




어떤 내용으로 저장할지 지정합니다.

URL 오른쪽의 browse(돋보기) 버튼 클릭




상단 오른쪽의 Import Schema File 버튼 클릭





파일을 선택합니다.




Maintain original directory structure for imported files 체크 해제




Order 선택



다음...




Finish...





Wiring the components and adding a transformation

receivePO 와 routePO 를 연결합니다.




routePO 와 WriteApprovalResults 를 연결합니다.




routePO 를 더블 클릭합니다.




Select an existing mapper 버튼 클릭




Create New Mapper File 선택




receivePO의 inp1:PurchaseOrder 를 WriteApprovalResults의 inp1:Order 로 드래그 앤 드랍 합니다.




자동 매핑 설정 창이 나옵니다.

Match Elements Considering their Ancestor Names 체크 해제

Hide Dictionaries 클릭 후 Add 버튼 클릭해서



파일 선택




그러면 xml 파일의 설정에 따라 매핑이 이루어집니다.



모두 저장합니다.



Deploying the application

여기의 Deploying the application 부분을 보세요~



Testing the application

EM 접속 후 SOAComposite 를 클릭합니다.



테스트 클릭



트리 보기에서 XML 보기로 바꾼 후 아라 패일의 내용을 입력합니다.





잘 되었다고 합니다 -_-



추적...




실제로 C:\TEMP 디렉토리에 가보면 order_1.txt 파일이 생겼습니다.



파일을 열어보면 File Adapter를 만들 때 지정했던 형식대로 내용이 들어가 있습니다.







반응형
//
반응형
Introductioin

Database AdapterMediator 컴포넌트를 이용한 카드 검사 서비스를 만들겠습니다.



Creation a new application

메뉴에서 File → New 클릭

왼쪽 트리메뉴에서 General 선택 - Generic Application 선택



Application Name : CreditCardValidation

Next 클릭



어플리케이션의 프로젝트를 만듭니다.

한 어플리케이션에 여러개의 프로젝트를 만들 수 있습니다.

Project Name : validationForCC

왼쪽 Available 목록 중에 SOA 를 선택해서 오른쪽으로 옮깁니다.



아무것도 없는 빈 프로젝트로 생성합니다.



첫 프로젝트를 만들었습니다. 두둥!

이클립스랑 비슷하면서도 다른 -_- FlexBuilder 랑 조금 더 비슷한듯 하네용 ㅎㅎ





Adding the database adapter

오른쪽 컴포넌트 중에서 Database Adapter(이하 DbAdapter) 를 External References 공간에 드래그 앤 드랍 합니다.




Service Name : getCreditValidation



크게 Connection 부분과 JNDI Name, Data Source 부분이 있는데..

Connection 지금 현재 이 DbAdapter 를 세팅하는데 필요한 디비의 정보고,

JNDI Name 이나 Dat Source 는 실제 서버에 배치 시킨 후 사용하게 될 리소스 입니다.

곧! Connection 의 디비 정보와 JNDI Name(또는 Data Source)의 정보가 똑같아야 합니다.



데이터베이스 정보를 입력합니다.

Test Connection 클릭 했을때 "Success!" 가 떨어지면 ㅇㅋ!

잘 보면 전 튜토리얼에서 설정한 Data Source 설정과 같다는 것을 알 수 있습니다.



OK 누르게 되면 JNDI Name 에 eis/DB/[Connection이름] 이 자동으로 입력된 것을 알 수 있습니다.

eis/DB/[이름] 은 전 튜토리얼에서 DbAdapter 설정한 JNDI Name 이라는 것을 알 수 있습니다.



어떤 작업을 할건지 선택합니다.

Perform an Operation on a Table 선택 - Select만 체크



어떤 테이블의 정보를 가져올 것인지 선택합니다.

아직 등록된 테이블 정보가 없으므로 Import Tables 클릭



Query 클릭하면 테이블의 목록을 가져옵니다.

Available 리스트에서 CREDITCARDINFO 테이블을 오른똑으로 선택합니다.



테이블이하나 선택되었습니다.



기본키를 지정합니다. CCNUMBER 칼럼을 선택



테이블 관계를 설정합니다. 관계 없으므로 -_- Next 클릭



어떤 칼럼만 가져올지 필터링 합니다. status만 체크



조건을 정의하는 부분입니다.

파라미터(입력)를 하나 추가합니다. Add 클릭 ccnb 입력

Edit 클릭



조건을 만듭니다.

Add 클릭

Query Key : ccnumber
Operator : EQUAL(=)
Second Argument : Parameter 선택



ccnb 파라미터를 하나 받아서 select 쿼리를 날리는 쿼리가 완성되었습니다. Finish 클릭



Database Adapter가 만들어졌습니다.





Adding the Meditator Component

이번에는 Mediator 컴포넌트를 Components 영역에 드래그 앤 드랍 합니다.

Mediator(중재자)는 분기, 값 전달 같은걸 합니다. (맞나?...)



Name : RouteRequest
Templete : Define Interface Later



이번에는 Web Service 컴포넌트를 Exposed Services 영역에 드래그 앤 드랍 합니다.

Web Service 컴포넌트는 외부와의 입/출력을 담당하는 컴포넌트 입니다.



Name : getStatusByCC

원래는 입/출력 스키마를 다 만들어줘야 하지만

이번 튜토리얼은 Web Service 가 목적이 아니므로 기존의 스키마를 불러옵니다.

WSDL URL 옆의 Generate WSDL from schema(s) 버튼(+)을 클릭합니다.



Request 탭에서 URL 오른쪽의 browse for schema file 아이콘 클릭



Import Schema File... 버튼 클릭



Browse Resources... 로 스키마 파일을 찾습니다.



OK 클릭



Maintain original directory structure for imported files 체크 해제

OK 클릭



Type 에 creditcheck.xsd 가 추가된 것을 볼 수 있습니다.

creditcardStatusReqeust 선택



이번에는 Reply 탭에서 creditcardStatus 를 선택합니다.

한번 스키마 파일을 불러(import)왔기 때문에 다시 파일을 일지 않고 선택하면 됩니다.



Fault 탭도 마찬가지로 error를 선택해줍니다.



OK 클릭



이제 getStatusByCC 와 RouteRequest 를 이어줍니다.



RouteRequest 와 getCreditValidation 을 이어줍니다.



잘 이어졌습니다~! >_<





Adding a transformation to the Mediator component

getStatusByCC 에서 받은(request) 입력에서 getCreditValidtion의 입력으로,

getCreditValidation 에서 나온 출력에서 getStatusByCC의 출력으로 값을 매핑시켜주는 Mediator를 설정해보겠습니다.


RouteRequest 를 더블클릭합니다.




첫번째 Transform Using 필드(입력 매핑)에서 오른쪽의

Select an existing mapper file or create a new one 버튼을 클릭합니다.




Create New Mapper File 을 선택하고 OK 클릭




왼쪽(getStatusByCC)의 inp1:CCNumber를 오른쪽(getCreditValidation)의 top:ccnb까지 드래그 합니다.




다시 RouteRequest Mediator. 두번째 Transform Using 필드(출력 매핑)에서 오른쪽의

Select an existing mapper file or create a new one 버튼을 클릭합니다.





입력 매핑과 똑같은 방법으로

getCreditValidation의 top:status와 getStatusByCC의 inp1:creditcardStatus를 이어줍니다.




모두 저장 합시다.



DeployIng the application

일단 서버(어플리케이션 커넥션)를 하나 등록해야 합니다.

New... (Ctrl-N)




왼쪽 카테고리에서 Connection을 선택 오른쪽 아이템 중에 Application Server Connection을 선택합니다.




커넥션 이름을 지정합니다.




커넥션의 Username과 Password를 지정합니다.




어드민 서버(WebLogic)의 정보와 도메인명을 입력합니다.




Test Connectino 에서 모두 "success" 가 나와야 합니다.




서버 커낵션을 하나 만들었습니다.



여기까지는 한번만 하면 됩니다.


프로젝트에서 마우스 오른쪽 버튼 - Deploy - [프로젝트명]... 클릭




Deploy to Application Server 선택




Overwrite any existing composites with the sam revision ID. 체크 해제

배치를 올릴때마다 버젼 번호가 붙게 되는데 체크를 하게 되면 전의 번호와 같은 번호로 덮어서 배치하게 됩니다.

개발용으로 할때는 하나로 계속 하는게 좋겠죠? 안좋나 -_-;;




아까 전에 만들었던 서버 커넥션을 선택합니다.




SOA 서버 선택




배치 요약 확인




컴파일이 정상적으로 끝나고, 배치를 시작할때 웹로직 암호를 물어봅니다.




배치가 되면 대충 이런 메세지가 콘솔로 나오게 됩니다.

[01:19:02 PM] >>>>  Warning:  Unable to determine the target platform from the Profile.  Using default...
[01:19:02 PM] ----  Deployment started.  ----
[01:19:02 PM] Target platform is  (Weblogic 10.3).
[01:19:02 PM] Running dependency analysis...
[01:19:02 PM] Building...
[01:19:10 PM] Deploying profile...
[01:19:10 PM] Updating revision id for the SOA Project 'validationForCC.jpr' to '1.0'..
[01:19:10 PM] Wrote Archive Module to C:\JDeveloper\mywork\CreditCardValidation\validationForCC\deploy\sca_validationForCC_rev1.0.jar
[01:19:10 PM] Deploying sca_validationForCC_rev1.0.jar to soa_server1 [Antop-PC:8001] 
[01:19:10 PM] Processing sar=/C:/JDeveloper/mywork/CreditCardValidation/validationForCC/deploy/sca_validationForCC_rev1.0.jar
[01:19:10 PM] Adding sar file - C:\JDeveloper\mywork\CreditCardValidation\validationForCC\deploy\sca_validationForCC_rev1.0.jar
[01:19:10 PM] Preparing to send HTTP request for deployment
[01:19:10 PM] Creating HTTP connection to host:Antop-PC, port:8001
[01:19:10 PM] Sending internal deployment descriptor
[01:19:10 PM] Sending archive - sca_validationForCC_rev1.0.jar
[01:19:31 PM] Received HTTP response from the server, response code=200
[01:19:31 PM] Successfully deployed archive sca_validationForCC_rev1.0.jar to soa_server1 [Antop-PC:8001] 
[01:19:31 PM] Elapsed time for deployment:  29 seconds
[01:19:31 PM] ----  Deployment finished.  ---- 



Testing the application

Enterprise Manager에 접속 - validationForCC 선택




테스트 클릭




카드번호를 입력 후 웹 서비스 테스트 클릭




결과가 나왔습니다. 두둥!

메시지 흐름 추척 실행 링크를 누르면 어떤 순서로 실행 되었는지 확인할 수 있습니다.




처리 순서가 나옵니다. 여기서 또 파란색 글씨 부분을 누르면 그 컴포넌트에서 어떻게 처리 되었는지 볼 수 있습니다.



파란색 링크(RouteRequest)를 클릭하면 더 자세한 정보를 볼 수 있습니다.



아래는 실제 테이블에 들어있는 데이터 입니다.







반응형
//

Chapter 1 - Purchase Order Processing

Posted at 2010. 1. 28. 14:31 | Posted in Oracle Solution/PO Processing
반응형
Introduction

BPEL 을 이용해서 Purchase Order Processing 를 한단계 한단계 만들어보겠습니다.

저도 원서 보고 하는거라 죽갔습니다만... 이걸로 프로젝트 나가야되서 필승!

튜토리얼(Tutorial)에서 쓰일 스키마 등록, JMS 자원 생성, DB 자원 생성을 해보겠습니다.



Installing the database schema

 

create_soademo_user.sql 은 sysdba 계정으로 실행.

create_creditrating_table.sql 은 생성된 soademo 계정으로 실행합니다.



Creating the JMS resources

웹로직 콘솔에 접속합니다.

왼쪽 메뉴에서 서비스 - 메시징 - JMS 모듈을 클릭합니다. (JMS 서버 아닙니다!)

SOAJMSModule을 클릭합니다. (채크박스가 아닌 이름을 클릭)




리소스 요약 테이블에서 새로 만들기를 클릭합니다.




대기열(Queue)을 선택 후 다음 클릭




이름: demoFulfillmentQueue
JNDI 이름: jms/demoFulfillmentQueue

입력 후 다음 클릭




하위 배치에서 SOASubDeployment 선택, 대상에서 SOAJMSServer 선택 후 완료 클릭




※ 미리 %Oracle_SOA1%\soa\JMSPlan 폴더를 만들어 둡니다.

다시 새로 만들기. 이번에는 접속 팩토리(Connection Factory)를 선택 후 다음 클릭




이름: demoCF
JNDI 이름: jms/demoCF

입력 후 다음 클릭




대상 서버 확인(이미 선택되어 있음) 후 완료 클릭




콘솔 왼쪽 메뉴에서 배치 클릭

배치 목록 중에서 JmsAdapter 을 선택합니다. (채크박스가 아닌 이름을 선택)




구성 - 아웃바운드 접속 풀 - 새로 만들기 클릭




oracle.tip.adapter.jms.IJmsConnectionFactory 선택 후 다음 클릭




JNDI 이름: eis/Queue/demo

입력 후 완료 클릭




경로를 %Oracle_SOA1%\soa\JMSPlan(위에서 생성 했었져? -_-)로 바꾼 후 확인 클릭




잘 돼었다고 나옵니다. 배치계획 경로 확인.




구성 - 아웃바운드 접속 풀 클릭

oracle.tip.adapter.jms.IJmsConnectionFactory 앞에 + 를 클릭해서 하위 인스턴스를 펼칩니다.

eis/Queue/demo를 클릭합니다.




ConnectionFactoryLocation 속성의 속성값을 입력합니다.

빈 칸에 마우스를 클릭하면 입력할 수 있는 text input이 나오는데 입력 후 엔터치면 입력이 됩니다.

입력 후 저장 클릭




배치 목록에서 JmsAdapter를 선택(채크박스 채크) 후 갱신 클릭




두번째꺼 -_- 선택(선택 되어있슴) 후 다음 클릭




완료 클릭





Creating the database resource




BPEL 에서는 DataSource 를 직접 사용하지 않고 JCA[각주:1]를 사용한다고 합니다. (그림 제가 그린건데 맞나 모르것네요 ㄷㄷ;)

콘솔 왼쪽 메뉴에서 서비스 - JDBC - 데이터소스 클릭

데이터 소스 테이블에서 새로 만들기를 클릭합니다.




이름: soademoDatabase
JNDI 이름: jdbc/soademoDatabase
데이터베이스 유형: Oracle
데이터베이스 드라이버: Oracle's Thin (Thin XA) for Instance connections; Versions:9.0.1,9.2.0,10.11

입력 후 다음 클릭




트랜잭션 설정. 다음 클릭




데이터베이스 이름: XE
호스트 이름: localhost
포트: 1521
데이터베이스 사용자 이름: soademo
비밀번호: soademo

입력 후 다음 클릭




구성 테스트 클릭해서 잘 접속 되는지 확인 하시구 다음 클릭




대상을 soa_server1 로 선택하고 완료




배치 목록에서 DbAdapter을 클릭합니다. (채크박스 아니고 이름을 클릭)




구성 - 아웃바운드 접속 풀 - 새로 만들기 클릭




javax.resource.cci.ConnectionFactory 선택 후 다음 클릭




JNDI 이름: eis/DB/soademoDatabase

입력 후 완료 클릭




※ 미리 %Oracle_SOA1%\soa\DBPlan 폴더를 만들어 둡니다.

경로를 만들어두었던 DBPlan 으로 바꾼 후 확인 클릭




배치 계획 경로 확인하시구요




구성 - 아웃바운드 접속 풀

아웃바운드 접속 풀 목록에서 javax.resource.cci.ConnectionFactory 앞에 + 를 클릭해서 하위 목록을 펼칩니다.

eis/DB/soademoDatabase 클릭




속성 이름 xADataSourceName 의 속성값 부분을 클릭하면 text input 가 나옵니다.

jdbc/soademoDatabase 입력 후 엔터 (엔터를 쳐야 저장됩니다)

저장 클릭




배치 목록에서 dbAdapter를 갱신합니다.




완료 클릭






튜토리얼을 진행하기 위한 JMS, DataSource 설정이 끝났습니다.

이제 PO(Purchase Order) 프로그램을 만들어봅시다.



  1. JCA(Java EE Connector Architecture)는 웹 애플리케이션 서버와 레가시 시스템과 연동할 수 있도록 하는 자바 기반 기술이다. JDBC는 웹 애플리케이션 서버와 데이터베이스와읜 연동에 사용된다면, JCA는 웹 애플리케이션 서버와 레거시 시스템(데이터베이스 포함)과 연동하는 보다 일반적인 방법이다. JCA 1.0는 자바 커뮤니티 프로세스의 JSR 16에 의해 개발됐으며, 최신 버전은 JCA 1.5 (JSR 112)이다 [본문으로]
반응형
//
반응형
이번에 회사에서 본격적으로 SOA(Service Oriented Architecture) 라는 걸 하게 되었습니다.

BPEL(Business Process Execution Language for Web Services) 이라는 것을 사용하는 프로젝트라고 합니다.

샘플 좀 보니까 그림 뚝딱 그리면 완성 되는거 같은데... 전혀 아니더군염!! ㅠㅠ..

Oracle SOA Suite 를 이용해서 SOA를 구현해봅시다.



Download Files

http://www.oracle.com/technology/software/products/middleware/htdocs/fmw_11_download.html

JDK 6 Update 18

Oracle Database 10g Release 2 (10.2.0.1) Express Edition

Oracle WebLogic Server 11gR1 (10.3.2)

Repository Creation Utility (11.1.1.2.0)

SOA Suite (11.1.1.2.0)

Oracle JDeveloper 11g (11.1.1.2.0) (Build 5536)



Install Oracle Database 10g Release 2 (10.2.0.1) Express Edition

OracleXEUniv.exe 실행






"C:\Oracle\Database" 에 설치하겠습니다.




sys 관리자 암호를 입력합니다.








설치 완료 후 sqlplus로 들어가서 설정을 해줘야 합니다.

>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 수 1월 27 16:42:57 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn sys as sysdba
암호 입력:
연결되었습니다.
SQL> alter system reset sessions scope=spfile sid='*';

시스템이 변경되었습니다.

SQL> alter system set processes=200 scope=spfile;

시스템이 변경되었습니다.

SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> startup
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             209715444 bytes
Database Buffers          591396864 bytes
Redo Buffers                2904064 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SQL> exit
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production에서 분리되었습니다.



Install WebLogic server

wls1032_win32.exe 실행. 특별한거는 없고 계속 다음만 누르시면 됩니다.




"C:\Oracle\Middleware" 에 설치하겠습니다.




등록하실 분은 등록 하세요~












Quickstart 실행 체크 해제하고 완료 클릭





Configure Schema - Repository Creation Utility (11.1.1.2.0)

SOA를 하기 위한 정보들이 들어갈 스키마를 만들어줘야 합니다.

ofm_rcu_win_11.1.1.2.0_disk1_1of1.zip 압축 풀고 rcuHome\BIN\rcu.bat 실행합니다.

에러가 나면 폴더가 한글이거나 공백이 있는지 확인해주세요.




생성 선택 - 다음 클릭




데이터베이스 접속 정보와 sys 계정 정보를 입력 - 다음 클릭




데이터베이스 버젼이 낮다고 경고(XE는 10.2.0.1.0)하는데 무시 클릭






접두어를 입력하고 SOA and BPM Infrastructure 를 체크합니다. (나머지도 체크 됨)






만들어질 계정에 대한 비밀번호를 지정합니다.






테이블 스페이스 생성






생성 클릭




생성 완료





Install SOA Suite (11.1.1.2.0)

ofm_soa_generic_11.1.1.2.0_disk1_1of1.zip 압출 푼 후 Disk1\setup.exe 실행

JRE/JDK 위치를 지정하라고 하면 C:\Oracle\Middleware\jdk160_14_R27.6.5-32 를 입력합니다.

다음만 쭈욱 눌러주면 됩니다.















Create Domain

시작 메뉴 → 모든 프로그램 → Oracle SOA 11g - 홈1 → Application Server 구성 실행

또는 C:\Oracle\Middleware\Oracle_SOA1\common\bin\config.cmd 실행






SOA, EM(Enterprise Manager), BAM(Business Activity Monitoring) 만 선택하라고 하는데 불안해서 전부다 선택 ㄷㄷ




도메인 이름을 입력합니다.




콘솔 관리자 이름과 비밀번호를 입력합니다.






저장소 생성 유틸리티(rcu)로 만들었던 스키마 정보를 입력합니다.

※ 스키마 소유자와 스키마 비밀번호는 체크된 것만 변경됩니다.




스키마 테스트. 모두 다 통과되어야 합니다.











Install Oracle JDeveloper 11g (11.1.1.2.0)

jdevstudio11112install.exe 실행

















Update JDevloper with lastest SOA

JDeveloper를 실행 합니다.




Help - Check for Update 클릭

Oracle Fusion Middleware Products 체크 - Next 클릭




Oracle SOA Composite Editor 11.1.1.2.1.12.16 체크 - Next 클릭




업데이트 파일 다운로드 받을때 오라클 웹 계정을 물어보는데 입력




다운로드 후 설치 합니다.




설치 완료 되었습니다.




재시작이 필요하다고 합니다. Yes 클릭





Additional actions


Setting memory limits

C:\Oracle\Middleware\user_projects\domains\soa_domain\bin\setSOADomainEnv.cmd 수정
set DEFAULT_MEM_ARGS=-Xms512m -Xmx512m


Starting and stopping

Start the Admin Server

C:\Oracle\Middleware\user_projects\domains\soa_domain\startWebLogic.cmd

<BEA-0365> <Server state changed to RUNNING> 가 나와야 서버가 제대로 실행된 겁니다.




start the SOA Managerd Server

C:\Oracle\Middleware\user_projects\domains\soa_domain\bin\startManagedWebLogic.cmd soa_server1

Admin Server 유저암호를 입력합니다.



Admin Server 와 마찬가지로 서버온 확인하시구요~




Start the BAM Managed Server

C:\Oracle\Middleware\user_projects\domains\soa_domain\bin\startManagedWebLogic.cmd bam_server1

SOA 서버와 마찬가지로 유저, 비밀번호 입력하시고 <BEA-0365> 확인하세요


Server URLS

Weblogic console - http://localhost:7001/console

EM console - http://localhost:7001/em

SOA worklist app - http://localhost:8001/integration/worklistapp

B2B - http://localhost:8001/b2b

BAM (must use IE browser) - http://localhost:9001/OracleBAM


WebLogic Server console setting

웹로직 콘솔(http://localhost:7001/console)에 접속합니다.

왼쪽 메뉴에서 배치 클릭




이 테이블 사용자 정의 클릭




페이지당 표시되는 행수 100으로 설정

배치를 표시할 때 라이브러리 제외 체크

적용 클릭




왼쪽 메뉴에서 도메인 클릭




구성 - 일반 탭에서 내부 응용 프로그램의 요구 시 배치 사용 체크 후 저장 클릭





EM setting for development

EM 콘솔(http://localhost:7001/em)에 접속합니다.

왼쪽 메뉴 SOA - soa-infra(soa_server1) 에서 마우스 오른쪽 버튼 클릭

SOA 관리 - 공통 속성 클릭




감사 레벨 : 개발

조합 인스턴스 상태 캡처 체크

적용 클릭





이제 겨우 설치 및 기본 설정이 끝났네요.. ㅠ_ㅠ

Oracle XE → WebLogic → SOA → (BAM) 그리고 JDeveloper 를 띄우게 되는데..

메모리 4기가에서 95이상 찹니다..... ㅠ_ㅠ

이제 뭔가 만들어봅시다~ 다음에.. -_-/

반응형
//