In this chapter, you will learn to use Oracle Service Bus to
• Virtualize Application Services through JCA Adapters such as Oracle eBusiness Suite, Siebel, PeopleSoft etc.
• Mediate access to data in the Database along with Protocol bridging Employees at Mega Corporation use the
Employee Self Service portal to submit
Requisition requests for items required to carry on their job functions. Once the Requisition gets approved, Purchase Order is generated for the Requisition. The Purchase Order is then submitted to the Supplier, Pega Corporation. Supplier validates the requestor’s Credit Card, approves the Purchase Order if required, and fulfills the Order.
Mega Corporation has implemented the Requisition process in Oracle eBusiness Suite. Supplier, Pega Corporation, has implemented the Purchase Order process in Oracle SOA Suite.
Overview of the business processes at work between Mega, on the left, with Procure to Pay business process, interfacing with Pega, on the right, with Order-to-Cash business process.
※ 세션 생성과 완료는 생략 하겠습니다. 수정하려면 세션을 만들어야 하고, 테스트 해볼려면 수정사항이 완료되어 있어야 합니다.
Create Requisition
BPEL 에서 만든 JCA DB Adapter 를 OSB에서 불러와서 사용해 봅시다!
Create Database Adapter artifacts in JDeveloper
JDeveloper 실행 - Application 생성.
Application Name: SOADemo
Application Template: SOA Application
Project Name: DBArtifacts
Finish 클릭.
Database Adapter 컴포넌트를 External References 영역에 드래그 앤 드랍합니다.
Service Name: createRequisition
Connection 추가
soademo 커넥션 정보 입력.
JNDI Name: eis/DB/soademoDatabase
※ 기본적으로 eis/DB/{Connection Name} 으로 설정 됩니다.
※ 물론 웹로직 콘솔에 아래와 같이 세팅이 되어 있어야 겠죠?
Operation Type: Perform an Operation on a Table - Insert Only
Inport Tables... 클릭.
"OSB_REQUISITION" 테이블 선택.
오른쪽에 들어가 있어야 선택된 겁니다.
Next 클릭.
기본키는 REQID 선택.
Finish 클릭.
Database Adapter가 추가 되었습니다.
Import Database Adapter artifacts into Oracle Service Bus
Oracle Service Bus Console 접속.
Requisition 프로젝트를 생성합니다.
Requisition 프로젝트 아래에 Resources 폴더를 생성합니다.
Resources 폴더에서 리소를 추가합니다. Zipped Resources 선택.
※ 랩 문서에서는 soa와 jdeveloper가 로컬에서 돌아가서 Resources form URL 선택 후 file:// 을 사용했는데, 저는 soa가 다른 곳에 띄워져 있어서 zip 파일을 업로드 하겠습니다.
JDeveloper로 만든 프로젝트(DBArtifacts)로 가서 아래와 같은 3개의 파일과 1개의 포더를 압축해 놓습니다.
zip 파일을 업로드합니다.
아래와 같이 4개의 파일이 선택되어져 있어야 합니다.
Requisition/Resources/createRequisition_db – JCA Binding
Requisition/Resources/createRequisition – WSDL
Requisition/Resources/xsd/createRequisition_table – XML Schema
Requisition/Resources/createRequisition-or-mappings – XML Document
Import 클릭.
Inport 되었습니다.
Create Business Service from Database Adapter JCA File
Requisition 프로젝트 아래 BusinessServices 폴더를 생성합니다.
Resources 폴더로 가서 Generate 버튼을 클릭합니다.
Requisition - BusinessServices 선택. Generate 버튼 클릭.
Requisition - Resources 폴더에 가보면 아래와 같이 2개(WSDL, BS)가 생성되어 있습니다.
Create Proxy Service for Business Service
Requisition 프로젝트 아래에 ProxyServices 폴더를 생성합니다.
ProxyServices 폴더에서 Proxt Service 를 생성합니다.
Service Name: createRequisition
Create From Existing Service 아래에 Business Service 선택 후 Browse... 클릭.
Requisition/BusinessServices/createRequisition_db 선택 후 Submit 클릭.
Next 클릭
Protocal: http
EndpointURI 는 자동으로 만들어집니다. Next 클릭.
Last 클릭.
Save 클릭.
Update Proxy Service Message Flow
Requisition - ProxyServices 로 이동.
createRequisition 의 Message Flow 수정.
createRequisition 클릭 - Add Pipeline Pair 선택
Request Pipeline 클릭 - Add Stage
stage1 클릭 - Edit Stage
Add an Action 클릭 Reporting - Report
Report: $body
Key Name: REQ_ID
variable: body
<XPath> 클릭.
./cre:OsbRequisitionCollection/cre:OsbRequisition/cre:reqid
입력 후 Save All 클릭.
Test
createRequisition(Proxy Service)를 테스트 해봅시다!
주문 정보 입력 후 Execute 버튼 클릭.
실행 되었습니다.
Message Reports 에 가보면 Report 가 남아있는 것을 볼 수 있습니다.
직접 DB를 select 해보면 인서트가 되었습니다.
Receive PO
DB Pooling 기능을 하는 JCA DB Adapter 를 가져와서 사용해 봅시다!
Create Database Adapter artifacts in Jdeveloper
전에 JDeveloper 로 만들었던 DBArtifacts 프로젝트를 그냥 사용합니다.
Database Adapter 컴포넌트를 Exposed Services 영역에 추가 합니다.
Service Name: receivePO
Connection: soadameDatabase
JNDI Name: eis/DB/soademoDatabase
Operation Type: Poll for New or Changed Records in a Table
"OSB_PURCHASEORDER" 테이블 선택.
기본키는 ID
"Delete the Row(s) that were Read" 선택 (읽어 들인 후 삭제 처리) - FInish 클릭.
Database Adapter 가 추가되었습니다.
Import Database Adapter artifacts into Oracle Service Bus
PoProcessing 프로젝트와 하위에 BusinessServices, ProxyServices, Resources 폴더를 생성합니다.
Resources 폴더에서 리소스를 추가합니다. Zipped Resources 선택.
아래와 같이 4개의 파일을 압축한 zip 파일을 파일 첨부합니다.
Next 클릭.
xsd/createRequisiton_table.xsd 파일은 전에 사용했던 파일이니 필요 없습니다.
POProcessing/Resources/receivePO_db – JCA Binding
POProcessing/Resources/receivePO – WSDL
POProcessing/Resources/xsd/receivePO_table – XML Schema
POProcessing/Resources/receivePO-or-mappings – XML Document
Create Proxy Service from Database Adapter JCA File
POProcessing 프로젝트 - Resources 폴더에서 receivePO_db(JCA Binding)의 오른쪽 Generate 버튼 클릭.
Project: POProcessing
Sub-folder: ProxyServices
Generate 클릭.
POProcessing - ProxyServices 폴더에 보면 Proxy Service가 생성 되었습니다.
Import WSDL for POProcessing Composite Service in SOA Suite
POProcessing - Resources 폴더에서 리소스를 추가합니다. Resources from URL 선택.
현재 SOA에 올라가 있는 POProcessing 조합의 WSDL 주소를 복사해 넣습니다.
Resource Name: receivePO_SOA
Import 클릭.
Create Business Service from WSDL
POProcessing - BusinessServices 폴더에서 비지니스 서비스를 생성합니다.
Service Name: receivePO
WSDL Web Service 선택 후 Browse... 클릭.
POProcessing/Resources/receivePO_SOA 선택 후 Ports - execute_pt 선택.
Submit 클릭.
Next 클릭.
Last 클릭.
Save 클릭.
Complete Proxy Service Message Flow
POProcessing - ProxyServices 폴더의 receivePO_db(Proxy Service)의 메세지 흐름을 편집합니다.
receivePO_db 클릭 - Add Route 클릭.
RouteNode1 클릭 - Edit Route 클릭.
Add an Action 클릭 - Communication - Routing 클릭.
<Service> 클릭.
POProcessing/BusinessServices/receivePO 선택 - Submit 클릭.
Operation: execute
Save 버튼 클릭.
receivePO_db 클릭 - Add Pipeline Pair 클릭.
Request Pipeline 클릭 - Add Stage 클릭.
stage1 클릭 - Edit Stage 클릭.
Add an Action 클릭. Reporting - Report 클릭.
Report: $body
Key Name: DB_ID
variable: body
<XPath> 클릭.
./rec:OsbPurchaseorderCollection/rec:OsbPurchaseorder/rec:id
Save 클릭.
Save 클릭.
stage1 아래 Stage 추가
stage2 수정
Message Processing - Assign 액션 추가.
<Expression> 클릭.
$body/rec:OsbPurchaseorderCollection/rec:OsbPurchaseorder
Save 클릭.
variable: dbPO
Save All 클릭.
dbPO_to_soaPO.xq 파일을 압축해 놓습니다.
POProcessing - Resources 폴더에서 리소스를 추가합니다. (Zipped Resources)
파일을 업로드 하고, XQuery 리소스 타입(Resource Type)의 확장자(File Extension)를 ".xq"로 변경합니다.
Next 클릭.
Import 클릭.
다시 POProcessing - ProxyServices 폴더에서 receivePO_db 프락시 서비스의 메시지 흐름을 수정합니다.
stage2 를 수정합니다.
Message rocessing - Assign 액션을 추가합니다.
<Expression> 클릭.
편지창 위에 "XQuery Resources" 클릭.
XQuery: 오른쪽에 Browse... 버튼 클릭.
dbPO_to_soaPO 선택 후 Submit 클릭.
Binding: $dbPO
Save 버튼 클릭.
variable: soaPO
Message Processing - Assign 액션 추가.
"<soap-env:Body>{$soaPO}</soap-env:Body>" 입력 후 Save 클릭.
variable: body
Save 클릭.
stage2 아래에 Stage 추가.
stage3 수정.
Reporting - Report 액션 추가.
Report: $body
Key Name: SOA_ID
<XPath> 클릭.
화면 왼쪽 중간에 User Defined Namespaces 영역에서 "Add Namespace" 클릭.
Prefix: ord
URI: http://xmlns.oracle.com/ns/order
Add 버튼 클릭.
./ord:PurchaseOrder/ord:ID
Save 버튼 클릭.
variable: body
Save All 버튼 클릭.
Test
테스트 해봅시다!
Requisition - ProxtServices 폴더에서 createRequisition 프락시 서비스를 테스트 합니다.
주문 정보를 입력 후 Execute 버튼 클릭.
실행 되었습니다.
Report 내용을 보면 아래와 같이 Report가 남았습니다.
EM 에서 보면 POProcessing 이 실행되 것을 확인할 수 있습니다.
근데 이게 보면 좀 이상합니다.
Requisition 프로젝트의는 입력을 받아서 "OSB_REQUISITION" 테이블에 INSERT 합니다.
POProcessing 프로젝트는 OSB_PURCHASEORDER 테이블의 데이터를 폴링(Pooling)해서 POProcssing 웹서비스를 실행합니다.
그런데 테스트를 해보면 Requisition 시작에부터 POProcessing 끝까지 한번에 실행 되었습니다.
왜 그럴까여?!!!
이유는 거의 마지막에 작업했던 dbPO_to_soaPO 바인딩 때문에 그렇습니다.
그럼 POProcessing 프로젝트만 제대로 되는지 테스트 해보겠습니다.
"OSB_PURCHASEORDER" 테이블에 직접 데이터를 INSERT 해보겠습니다.
insert into osb_purchaseorder values ( '1111', '2222', 'iPod shuffle', 'Electronics', 1, 500, 'Initial','Mastercard','1234-1234-1234-1234' ); commit;잠시후 select 해보면 데이터가 없습니다. 네.. JCA Adatper 가 가져갔습니다.
OSB 콘솔과 EM에서 확인해보면 아래와 같이 실행된 것을 볼 수 있습니다. (시간 확인)
'Oracle Solution > Oracle Service Bus 11g Hands-on Training' 카테고리의 다른 글
Chapter 4 - Connecting to Composites (0) | 2011.04.22 |
---|---|
Chapter 2 - Scaling Integration Infrastructure with Oracle Service Bus (0) | 2011.04.06 |
Chapter 1 - Getting Started with Oracle Service Bus (0) | 2011.04.01 |
Chapter 0 - Installation instructions for SOA Suite 11.1.1.4.0 (3) | 2011.03.31 |