Introduction

In this chapter, you will learn to use Oracle Service Bus to

• Mediate Direct Binding service exposed by SOA Suite. You will use a Business Service with the soa-direct protocol in Oracle Service Bus.
• Use Dynamic Routing in the Proxy Service Message Flow to dynamically route between Business Services
• Use Direct Binding Reference in SOA composite to invoke OSB Proxy Service with SB transport protocol

Pega Corporation’s POProcessing application has been in production for some time. This application is being extensively leveraged by the Mega Corporation to submit purchase orders. Increasing order volumes have brought in increasing demands for customer satisfaction and/or order visibility/reliability. After extensive discussions, the IT departments of both companies agreed that having transaction (and security) context propagation between the two systems will enable meeting the growing demands for customer satisfaction through improved transaction visibility/reliability.

Luckily for Pega Corporation, the timing of this decision could not be better. Oracle recently released SOA Suite 11gR1 PS2 that supports a new binding called Direct Binding, which allows invoking SOA components over RMI with transaction and security context propagation from the client. Pega Corporation decides to upgrade to SOA Suite 11gR1 PS2 to leverage the Direct Binding for POProcessing.

Mega Corporation will test the new binding starting with orders with low value. Orders less than $1000 will be routed to the Direct Binding service, while orders of greater value will continue to be routed to the WS Binding service.

Once this section is complete the execution flow of Receive PO in the Mega Corporation will look as follows



In addition, Pega Corporation decides to use Direct Binding reference in the POProcessing composite to invoke the Credit Card validation (composite) service that is virtualized using OSB. This enables POProcessing composite to propagate transaction and security context into OSB. Pega Corporation decides to test the Direct Binding using a test credit card. Hence, logic (BPEL) in the POProcessing composite is updated to use the Direct Binding reference if the credit card number is 1234-1234-1234-1234. For other credit cards the WS Binding reference will be used as before.

Once this section is complete the credit card validation flow will look as follows






OSB to SOA Suite Direct binding

What is being done?

In this section, you will add a Direct Binding service to the POProcessing Composite. You will invoke the Direct Binding service from OSB using Business Service with soadirect protocol.

Following steps will be performed
• JDeveloper - Create Direct Binding exposed service in the POProcessing Composite.
• OSB Console - Create Business Service with soa-direct protocol using the WSDL for the Direct Binding service in SOA.
• OSB Console - Update Message Flow for the receivePO_db Proxy Service with a Dynamic Routing action to Create Direct Binding exposed service in POProcessing Composite


Create Direct Binding exposed service in POProcessing Composite

DIrect Binding 컴포넌트를 "Exposed Services" 영역에 추가합니다.



Name: receivePODirect

WSDL URL 오른쪽에 찾기 버튼 클릭.



현재 자신의 프로젝트 폴더에서 receivePO.wsdl 파일을 선택합니다.



Port Type: exeute_ppt



receivePODirect 컴포터는와 routePO 컴포넌트를 연결합니다.



연결 완료.




재배치 합니다.





Create soa-direct Business Service in Oracle Service Bus

http://hostname:7011/soa-infra 로 접속합니다.

아이디 비밀번호 입력.



receivePODirect 의 wsdl 주소를 복사해 놓습니다.



OSB 콘솔로 접속합니다.

POProcessing - Resources 폴더에서 리소스를 만듭니다. (Resources from URL)



URL/Path: 붙여넣기
Resource Name: receivePODirect
Resource Type: WSDL



Import 버튼 클릭.



POProecssing - BusinessServies 폴더에서 비지니스 서비스(Business Service)를 만듭니다.



Service Name: receivePODirect

WSDL Web Service 오른쪽의 Browse... 버튼 클릭.



POProcessing/Resources/receivePODirect 선택.

Port: receivePODirectDirectBindingPort11

Submit 버튼 클릭.



Next 버튼 클릭.



Last 버튼 클릭.

Save 버튼 클릭.


Update receivePO_db Proxy Service Message Flow

POProcessing - ProxyServices 폴더에서 receivePO_db(Proxy Service)의 메세지 흐름을 편집합니다.



RouteNode1 수정.



기존에 있던 Route 액션을 삭제합니다.



Communication - Dynamic Routing 액션을 추가합니다.



<Expression> 클릭



네임스페이스를 추가합니다.

Prefix: ord
URI: http://xmlns.oracle.com/ns/order



XQuery 입력.

let $total := $body/ord:PurchaseOrder/ord:price * $body/ord:PurchaseOrder/ord:quantity
return
  <ctx:route>
     {
       <ctx:service isProxy="false">
         {
           if ($total < 1000)
           then "POProcessing/BusinessServices/receivePODirect"
           else "POProcessing/BusinessServices/receivePO"
         }
        </ctx:service>,
        <ctx:operation>execute</ctx:operation>
     }
  </ctx:route>

Save All 버튼 클릭.



Save All 버튼 클릭.

수정사항 적용(Activate)


Test 1

Requisition - ProxyServices 폴더에서 createRequisition 서비스를 테스트 합니다.



$1000 미만으로 데이터를 입력합니다.

<cre:OsbRequisitionCollection
 xmlns:cre="http://xmlns.oracle.com/pcbpel/adapter/db/top/createRequisition">
    <cre:OsbRequisition>
        <cre:requisitioner>Bob</cre:requisitioner>
        <cre:reqid>2222</cre:reqid>
        <cre:productname>iPod Shuffle</cre:productname>
        <cre:item>1GB</cre:item>
        <cre:itemtype>Electronics</cre:itemtype>
        <cre:reqDate>March 16, 2010</cre:reqDate>
        <cre:description>string</cre:description>
        <cre:quantity>1.00</cre:quantity>
        <cre:price>500.00</cre:price>
        <cre:currency>USD</cre:currency>
        <cre:deliverydate>April 16, 2010</cre:deliverydate>
        <cre:plant>Boulder</cre:plant>
        <cre:cctype>Mastercard</cre:cctype>
        <cre:ccnumber>8765-8765-8765-8765</cre:ccnumber>
    </cre:OsbRequisition>
</cre:OsbRequisitionCollection>


EM에서 실행된 인스턴스(POProcessing)를 확인해보면 receivePODirect 다이렉트 바인딩 서비스가 실행되었습니다.



Test 2

$1000 이상의 데이터를 입력하면 receivePO 웹서비스가 실행됩니다.




SOA SUite to OSB Direct Binding

What is being done?

In this section, you will expose the virtualized validationForCC Composite service using the SB transport protocol (This is in addition to the HTTP Proxy Service that virtualized the same service in Chapter 1). SB Protocol allows invoking (from SOA Suite or OSB) OSB Proxy Service over RMI. POProcessing composite will use the Direct Binding reference to invoke the Proxy Service with SB transport protocol.

Following steps will be performed
• OSB Console - Create Proxy Service with SB transport protocol routing to validationForCC Business Service.
• JDeveloper – Create Direct Binding reference, pointing to the SB transport protocol Proxy Service, in the POProcessing composite
• JDeveloper - Update approveLargeOrder BPEL to invoke Direct Binding reference when credit card number is 1234-1234-1234-1234. Otherwise, the WS Binding reference is invoked.


Create SB transport protocol Proxy Service in OSB

Credit_Services - ProxyServices 폴더에서 Proxy Service 를 만듭니다.



Service Name: ValidateCredit_SB

Business Service 오른쪽의 Browse... 버튼 클릭.



Credit_Services/BusinessServices/validationForCC 선택 후 Submit 버튼 클릭.



Next 버튼 클릭.


Protocol: sb

Next 버튼 클릭.



Last 버튼 클릭.



Save 버튼 클릭.



추가한 ValidateCredit_SB(Proxy Service) 서비스의 메세지 흐름을 수정합니다.



Pipeline Pair 추가.



요청 파이프라인(Request Pipeline)에 Stage 추가



stage1 수정.



Reporting - Report 액션 추가.



Report: $body
Key Name: CCNumber-SB
XPath: ./cca:creditcardStatusRequest/cca:CCNumber
variable: body



Save All 버튼 클릭.

모든 수정사항 적용.(Activate)


Create Direct Binding reference in POProcessing Composite

JDeveloper 실행 후 POProcessing의 comsoite.xml 파일을 열어 수정합니다.

Direct Binding 컴포넌트를 추가합니다.



Name: DirectGetCCStatus
Reference Target: Oracle Service Bus

WSDL URL 오른쪽의 찾기 버튼 클릭.



ValidateCredit_SB (direct) 선택.



OK 클릭.



아래와 같이 추가되었습니다.



approveLargeOrder 컴포넌트(BPEL) 과 DirectGetCCStatus 컴포넌트를 연결합니다.



아래와 같이 연결 되었습니다.




Update approveLargeOrder BPEL to selectively invoke Direct Binding reference

approveLargeOrder(BPEL)를 수정합니다.



기존에 있던 "invokeCCStatusService" 액티브티를 삭제합니다.



assignCCNumber 액티브티 아래에 Switch 액티브티를 추가합니다.



<condition> 클릭 후 XPath Expression Builder... 버튼을 클릭합니다.



bpws:getVariableData('inputVariable','payload','/ns2:Order/ns2:creditCardInfo/ns2:cardNumber') = '1234-1234-1234-1234'



OK 클릭.



조건 분기쪽에 Invock 액티브티를 추가합니다.



Invoke1 액티브티와 DirectGetCCStatus 레퍼런스를 연결합니다.



Name: directGetCCStatus

Variables - Input 오른쪽에 찾기 버튼 클릭.



기존에 만들어져 있던 "invokeCCStatusService_execute_InputVariable" 선택



Output 오른쪽의 찾기 버튼 클릭.



"invokeCCStatusService_execute_OutputVariable" 선택



OK 버튼 클릭.



otherwise 분기에 Invoke 액티브티를 추가합니다.



Invoke1 액티브티와 getCreditCardStatus 레버런스를 연결합니다.



Name: getGreditCardStatus
Input: invokeCCStatusService_execute_InputVariable
Output: invokeCCStatusService_execute_OutputVariable

OK 버튼 클릭.



모두 저장합니다.



재배치 합니다.



덮어쓰기 옵션 채크.



Taskflow 프로젝트는 포함하지 않습니다.



Test 1

Requisition - ProxyServices 폴더에서 createRequisition 서비스를 테스트합니다.

금액(quantity * price)이 $1000 를 넘게 하고 카드 번호는 "1234-1234-1234-1234" 로 입력합니다.

테스트 후의 Report 입니다.



EM 에서 확인해보면 카드 조회하는 부분이 다이렉트 바인딩(Direct Binding)으로 실행되었습니다.




Test 2

똑같이 금액은 $1000가 넘게 하고, 카드번호를 다른걸 넣어봅시다.

테스트 후 Report 입니다.



EM 에서 확인해보면 웹서비스(Web Service)로 실행된 것을 볼 수 있습니다.






댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Introduction

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에서 확인해보면 아래와 같이 실행된 것을 볼 수 있습니다. (시간 확인)





 
tag: JCA, LAB, oracle, osb, SOA

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Introduction

With the new POProcessing system in place, Pega’s widget supply business continues to grow rapidly.
However, with growth there are now some problems developing from Customer Support. Recently, Pega’s Customer Support has alerted the IT department there have been complaints regarding certain aspects of the new POProcessing service.

Many Purchase Orders are being rejected due to credit card transactions processing failures. The failure rate has been thirty percent and deemed unacceptable by Mega Corporation, one of Pega’s largest customers. Mega, who should never have a declined credit issue, has escalated to Pega’s Executive Mangement. Rapid improvements must occur in the next 30 days or they will consider switching to another supplier.

Upon investigation of the complaints, Pega’s IT identified two issues:
1. The current Credit Service Validation Service Provider is unreliable and cannot handle the load required by Pega’s growing customer base.
2. Due to the failures, Mega keeps checking status of the PO orders causing unnecessary load and spikes on Pega’s infrastructure.

Upon completion of this Lab, you will learn how Oracle Service Bus can help provide solutions to both issues. OSB will help Pega scale their integration infrastructure through Endpoint Management and Service Result Caching.





Endpoint Management

L4 같은거 처럼 OSB 단에서 Endpoint를 여러개 두고 라우팅 할 수 있습니다. (기능은 미약하겠지만?...)

 


OSB에서 CreditValidation 서비스를 더 추가해봅시다.

저는 아래와 같이 파티션만 나워서 같은 서비스를 하나 더 등록했습니다.



파티션 만드는 법은 soa-infra 에서 마우스 오른쪽 버튼 클릭 - Manage Partitions 선택



"Create" 버튼 클릭 후 파티션 이름을 입력하면 만들어집니다.



이제 OSB 콘솔로 접속해서 세션을 생성합니다.



Porject Explorer - Credit_Services - ProxyServices 이동 후 validationForCC 선택


"Transport Configuratinn"을 수정합니다.



또 하나의 WSDL 주소를 추가합니다.



아래와 같이 두개의 서비스 대상이 추가되었습니다. Next 클릭.


Save 클릭.



Operations - Dashboard - Service Health 탭으로 이동 후 "validationForCC"을 선택합니다.


"Endpoint URIs" 탭을 보면 아래와 같이 확인할 수 있습니다. 현재는 실행된게 없군용...


수정사항 적용 후 테스트 해봅시다.

Project Explorer - Credit_Services - ProxyServices 에서 "ValidateCredit"를 테스트 합니다.

카드번호: 1234-1234-1234-1234


총 10번을 테스트 해봅니다.

그 후 EM에서 인스턴스가 실행된 결과를 보면 아래와 같이 5번씩 번갈아서 실행된 것을 볼 수 있습니다.


이번에는 dummy 파티션의 validationForCC 조합을 배치 해제 하겠습니다.




OSB 콘솔에서 다시 10번을 테스트 해보면 default 파티션쪽의 서비스 5번만 실행된 것을 볼 수 있습니다.


정리해보면 아래와 같습니다. 에러가 나든 말든 무조건 분기 하는군요.. ㄷㄷ..



에러가 난것은 패스되게 할 수 없을까? -_-;; 물론 있습니다!

"BusinessServices"에 "validationForCC"을 수정합시다.

"Operational Settings" 탭에 보면 "Offline Endpoint URIs" 라는 부분을 활성화 시키면 됩니다.

아래와 같이 설정을 하게되면 최초 한번은 그냥 시도를 하고 에러가 났을 때 5분 동안은 다시 그 서비스를 부르지 않습니다.

5분이 지나면 다시 한번 시도합니다.


10번을 다시 테스트 해보면 default 파티션으로 9번이 실행 되었습니다.

1번은 dummy 파티션쪽 서비스를 실행하다가 에러가 난 것입니다.



2번째 실행에서 dummy 파티션의 서비스가 없어서 에러가 나고 3번째 부터는 정상적인 것으로 라우팅을 하게 됩니다.



다시 상태를 봐보면 Offline으로 표시가 되는군요.. 흠...





Service Result Caching

제목에 모든 설명이 다 나와있군요...

처리시마다 조회되는 (하지만 별로 변하지 않는) 서비스는 캐시를 이용해서 처리되는 시간을 단축시켜봅시다!

아래 글미과 같이 A 서비스와 B 서비스와의 결과 값이 항상 같다면 A에서 받은 결과를 캐시에 담아놨다가 B에 요청하려고 하면 캐시에 담아져있는 데이터를 사용하면 되겠습니다. (맞나? -_-)


OSB 콘솔에서 세션을 생성합니다.



System Administration - Import 에서 chap-2B_starting-caching.jar 파일을 입포트합니다.



Import 버튼 클릭.


수정사항을 적용 합니다.



※ 만약 주소나 포트가 틀리면 아래와 같이 Endpoint URI 부분을 수정해줘야 합니다.


Resource Browser 로 이동합니다.



GetPO 선택.


"Message Handling Configuration" 을 수정합니다.


"Advanced Settings"을 확장합니다.


"Result Caching"을 활성화 하고, 시간 간격을 1분으로 서정합니다.

"Cache Token Expression"은 "$body/po:PO_ID" 입력.


Save 버튼 클릭.



POStatus - ProxyServices 에서 "GetPO"의 메세지 흐름을 수정합니다.


"GetPO" 클릭 - "Add Pipeline Pair" 선택


"Response Pipeline" 클릭 - "Add Pipeline Pair" 선택


stage1 클릭 - "Edit State" 선택


"Add an Action" 클릭 - Message Processing - Replace 선택


"variable"에 "header" 입력 후 <Expression> 클릭.



아래와 같이 입력 후 Save 버튼 클릭
<caching-metadata>
<cache-originated>{$outbound/ctx:transport/ctx:response/tp:cache-originated/text()}</cache-originated>
<cache-token>{$outbound/ctx:transport/ctx:response/tp:cache-token/text()}</cache-token>
</caching-metadata>


"Replace node contents" 선택.



"Save All" 버튼 클릭하여 모두 저장 후 수정사항을 적용합니다. (Activate)

테스트 해봅시다.


"2222" 입력 후 Execute 버튼 클릭.



cache-originated[각주:1] 값이 false 입니다. 캐쉬 데이터가 아니라는 것이죠!


1분 내에 다시 테스트를 해봅니다.

이번에는 캐쉬된 데이터라는군요 ㅎㅎㅎ





  1. 비롯되다, 유래하다 [본문으로]
tag: LAB, oracle, osb, SOA

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Introduction

BPEL 로 만들어진 "POProcessing"에 OSB를 연동하는 연습해 보겠습니다.

아래와 그림과 같이 두개의 서비스(Composite)이 있습니다.

"POProcess" 서비스로 주문 요청이 들어왔을때 일정 가격 이상이면 "CreditCardValidation" 서비스에 카드상태를 조회하는 흐름입니다.



OSB를 이용하여 "POProcessing"에서 "CreditCardValidation"를 직접 부르지 않고, OSB를 거쳐가는 흐름으로 바꿔보겠습니다.




Prerequisites

완성된 "POProcessing"을 가져다가 사용해야 하기 때문에 정상적으로 돌아가려면 JMS Moudle, DataSouce 를 설정해야 합니다.

설정하는 방법은 여기를 참조하세요. (암호: 0le0kype)

※ WebLogic 10.3.4 에서 데이타소스 설정 부분이 조금 바꼈습니다. 처음 생성할 때 "Geneirc Data Source" 을 선택합니다.



※ soademoDatabase 만들 때 타겟을 admin 과 soa_server1 두개 다 선택해 주세요.


POProcessing 를 만들어보려면 여기를 보세요.



Setup and Deploy Composites


일단 Jdeveloper에 서버(SOA+OSB)를 등록합시다.

FIle - New 또는 아래와 같이 선택합니다.


"Connections" 카테고리에서 "Application Server Connection"을 선택합니다.


계정과 비밀번호 입력.


서버의 주소와 포트 도메인명 입력.


"Test Connection" 버튼을 클릭해서 아래와 같이 모두 "success"가 나와야 하겠습니다.


등록 완료.



Resource Palette 에서 확인해보면 등록이 되어있습니다.


※ 만약 리소스 팔레트가 보이지 않으면 메뉴에서 View - Resource Palette




아래 3개의 SOA Composite 을 불러와서 서버에 배치(Deploy)해야 합니다.
    1. POProcessing - 주문을 받아서 마지막에 배송정보를 JMS에 주문을 등록.
    2. CreditCardValidation - POProcessing 에 요청된 주문이 일정 가겨 이상이면 카드 상태 조회
    3. ConsumeJMSFulfillmentApp - JMS 에 등록된 배송 정보를 뽑아내서 파일로 등록

Application 메뉴에서 "Open Application"을 선택합니다.



POProcessing.jws 파일을 불러옵니다.


예전 버전에서 만들어진거라고 최신꺼에 맞게 마이그레이션 한다고 합니다. Yes 클릭.


"POProcessing" 어플리케이션 안에 "ApproveTaskDetails", "POProcessing" 프로젝트 두개가 들어 있습니다.

"ApproveTaskDetails" 프로젝트는 "POProcessing" 프로젝트의 흐름에서 사용자에게 승인을 받는 Human Task 에서 사용하는 화면인 ADF 프로젝트입니다. (자동 생성 된것 -_-)

근데 이것이 마이그레이션이 제대로 안되서 배치하려고 하면 에러를 뿜습니다.

그래서 저 ADF 프로젝트는 삭제 후 다시 생성하겠습니다.


실제 파일까지 삭제합니다.


POProcessing 프로젝트의 composite.xml 파일을 열어 편집합니다.



ManualPOApproval (Human Task) 컴포넌트를 더블클릭하여 수정합니다.



편집창 상단에 Create Form - Auto-Generate Task Form 선택.



프로젝트명 설정 후 확인.


아래와 같이 화면이 자동으로 생성됩니다.


프로젝트도 생성되었습니다.



다시 POProcessing 프로젝트의 composite.xml 편집창으로 와서 WriteApprovalResults(File Adapter) 컴포넌트를 수정합니다.



Next로 넘기다가 5단계(Step 5)에서 파일이 저장될 위치를 적절히 설정합니다.



getStatusByCC.wsdl 파일을 편집해야 합니다.

파일을 더블클릭해서 연 후 편집창 아래쪽 Source 탭을 선택한 후 아래와 같이 soa_server의 포트로 바꿔줍니다.


모두 저장 후 서버에 배치(Deploy) 합니다.

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


Deploy yo Application Server (기본 선택) 선택 후 Next


Overwrite 선택 후 Next. (당장은 처음 올리는 것이기 때문에 체크 안해도 됨)



아래와 같이 연관된 프로젝트도 같이 배치합니다.


배치할 서버를 선택합니다.


배치할 서버내의 파티션을 선택합니다.

11.1.1.3.0 부터는 파티션이라는 것이 생겨서 그룹(?)을 나눌 수 있습니다.


배치 ㄱㄱ



CreditCardValidation.jws 파일(Application 파일)을 불러옵니다.



getCreditValidation (Dataase Adapter) 컴포넌트를 수정합니다.



커넥션 정보가 없기때문에 에러가 날 것입니다. 일단 OK


상단에 Connection이 비어있습니다. 추가 버튼 클릭



아래와 같이 적절한 정보를 입력합니다.



아래에 JNDI Name 을 입력합니다.

※ 서버에 배치된 조합 인스턴스에서 실제로 사용되는 자원은 저 JNDI Name을 룩업(Lookup)합니다. 중요!!!


모두 저장 후 배치합니다.

ConsumeJMSFulfillmentApp.jws 파일을 불러 온 후 WriteFileFulfillmentMessage (File Adapter) 컴포넌트를 편집합니다.



5단계에서 저장될 위치를 적절히 수정합니다.


모두 저장 후 배치합니다.

배치한 조합이 잘 작동하는지 확인 해봅시다.

EM에 접속해서 아래와 같이validationForCC(CreditCardValidation) 조합을 선택 후 상단에 "Test" 버튼 클릭.


CCNumber 에 "1234-1234-1234-1234" 를 입력 후 "Test Web Service" 버튼을 클릭.



아래와 같이 응답이 "VALID" 로 나와야 정상입니다.




Configure Service Bus

이제부터 OSB(Oracle Service Bus)를 사용하게 됩니다.

osb console 로 접속합니다.

왼쪽 상단에 Change Center 박스 안에 "Create" 버튼을 클릭합니다.

OSB 에서 하나의 작업 단위(Session)를 관리합니다. 나중에 이 작업을 롤백할 수도 있고 한답니다.

(원문: Click Create button in left hand corner of screen to start a new session. In OSB, all changes are done
in a sandbox called a session. You first create the sandbox by creating a session in the change center.
After a set of related changes are done, you deploy all the changes in the session as a unit by clicking
Activate in Change Center.)



다 수정한 후에는 다시 "Activate" 버튼을 클릭하여 수정 사항을 적용시켜야 합니다.



먼저 왼쪽 하단의 메뉴중 "System Administration" 을 선택합니다.



Import Resources 를 클릭 후 (기본 선택됨) "chap-1-starting-sbconfig.jar" 파일을 임포트합니다.



"Import" 버튼을 클릭합니다.


"Active" 버튼을 클릭해서 수정사항을 반영합니다.


어떤 작업을 했는지 설명을 남길 수 있군요.. Submit


"Project Explorer"를 선택합니다.



세션을 생성하고 "Credit_Services" 프로젝트를 선택합니다.


"ProxyServices" 폴더를 생성합니다.


"Resources" 폴더도 생성합니다.



"Resources" 폴더를 선택합니다.



Create Resource 콤보를 클릭 후 "Resources from URL" 을 선택합니다.



서비스의 WSDL URL 을 알아야 하는데 이 주소는 아래 그림과 같이 EM에서 확인 할 수 있습니다.



알아낸 주소를 "URL/Path"에 입력하고 Resource Name을 입력 후 Next.


Import 버튼을 클릭.

 

"BusinessServices" 폴더를 선택합니다.


"Business Service"를 생성합니다.



"Service Name" 입력 후 WSDL "Web Service" 오른쪽의 Browse 버튼을 클릭합니다.



"ValidateCredit_WSDL"을 클릭합니다.


Ports 아래에 있는 "execute_pt"를 선택합니다.


Last 버튼을 클릭합니다.


아래쪽의 Save 버튼을 클릭합니다.


다시 Project Explorer - Credit_Services - BusinessServices 까지 이동합니다.



"Operational Settings" 탭을 선택합니다.


"Monitoring" 부분에 모니터링을 활성화 시키고 주기는 25분으로 설정후 Update 버튼을 클릭합니다.



수정사항을 반영합니다.



작업 내용 입력!



등록한 Business Service 가 동작하는지 테스트 해봅시다.


CCNumber 태그 안에 카드 번호(1234-1234-1234-1234)를 입력후 "Execute" 버튼을 클릭.


아래와 같이 결과가 잘 나와야 합니다. ㅎㅎ



다시 세션을 활성화 시킨 후 Project Explorer - Credit_Services - ProxyServices 까지 이동 후 "Proxy Service"를 생성합니다.


Service Name 입력 후 Business Service 오른쪽의 Browse 버튼을 클릭합니다.
 


"validationForCC" 를 선택 후 Submit 버튼을 클릭합니다.


Last 버튼을 클릭합니다.


Save 버튼을 클릭합니다.


Activate 버튼을 클릭하여 변경사항을 적용합니다.

이제 이 프록시 서비스가 작동하는지 테스트 해봅시다.


"1234-1234-1234-1234" 입력 후 Execute 버튼 클릭.


정상적으로 나왔습니다.


세션을 활성화 시킨 후 Project Expoloer - Credit_Services - ProxtServies 까지 이동합니다.

ValidateCredit 프록시 서비스의 메세지 흐름(Message Flow)을 수정합니다.



메세지 흐름 편집 화면입니다.

ValidateCredit 클릭 - Add Pipeline Pair 선택
 


아래와 같이 흐름이 추가되었습니다.

Request Pipeline 클릭 - Add Stage 선택


추가된 stage1 클릭 - Edit Stage 선택



Stage 편집 화면에서 "Add an Action" 클릭 - Reporting - Report 선택



아래와 같이 Report 액션이 추가된 것을 볼 수 있습니다.

<Expression> 을 클릭합니다.


textarea 에 $body 입력 후 Save 버튼을 클릭합니다.


"Add a Key" 를 클릭합니다.



Key Name에 "CCNumber"를 입력하고 <XPath> 를 클릭합니다.



변수를 찾아서 입력하는 방법을 이용해봅시다.

화면 왼쪽 아래의 "Variable Structure" 를 클릭합니다.


Select Structure 콤보 선택 - body 선택


CCNumber 를 선택하면 아래쪽 Prperty Inspector 부분에 XPath가 나옵니다.

저 부분을 드래그로 선택 후 "Copy Property"를 클릭하면 textarea에 붙여넣기가 됩니다.


variable 은 "body"를 입력합니다.



Action 하나를 더 추가해야합니다.

Report 아이콘 클릭 - Add an Action - Message Processing - Validate 선택



<XPath> 는 "./*"(쩜슬래쉬별)을 입력, variable은 "body" 입력, <Resource> 를 클릭합니다.



"XMLSchema_1437688841" 을 선택합니다.


Elements 아래의 "creditcardStatusRequest" 를 선택 후 Submit 버튼을 클릭합니다.


Save 버튼을 클릭합니다.


ValidateCredit 클릭 - Add Service Error Handler 선택



Error Handler 클릭 - Add Stage 선택



추가된 stage 클릭 - Edit Stage 선택




"Add an Action" 클릭 - Reporting - Alert 선택



아래와 같이 설정 후 Save 버튼을 클릭합니다.



Save All 버튼을 클릭합니다.


Activate 버튼을 클릭하여 변경 내용을 적용시킵니다.



Re-wrie POProcessing Composite

JDeveloper로 돌아와서 POProcessing 프로젝트를 수정(compsite.xml)합니다.

getCreditCardStatus (Web Service) 컴포넌트를 수정합니다.



WSDL URL 오른쪽의 "find existing WSDLs" 버튼을 클릭합니다.



상단의 콤보를 "Resource Palette" 로 변경 후 아래와 같이 선택합니다.



WSDL URL 이 변경되었습니다.



다시 배치(Deploy) 합니다.



ApproveTaskDetails 프로젝트는 배치 안해도 됩니다.





Test the end-to-end application

이제 정상적으로 "POProcessing - OSB - CreditCardValidation" 으로 처리가 되는지 테스트 해봅시다.

EM에 접속해서 "POProcessing"을 테스트합니다. 데이터는 아래와 같습니다.

<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>
데이터 입력 후 "Test Web Service" 버튼을 클릭합니다.


음.. 처리하는데 0.9초 걸렸다네요.. "Launch Flow Trace" 버튼을 클릭합니다.



"approveLageOrder" BPEL 컴포넌트에서 - getStatusByCC(CreditCardValidtaion) 서비스를 호출한 것을 확인할 수 있습니다.




"approveLargeOrder" 를 클릭하면, BPEL 흐름을 볼 수 있습니다.



이제 정상적으로 OSB를 거쳐갔는지 확인해봅시다.

osb console 메인 화면에서 "Message Reports" 를 선택합니다.


아래쪽에 보면 입력받은 메세지가 남아있는 것을 확인할 수 있습니다.




댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Introduction

WebLogic, OSB, SOA 프로그램 설치는 패스 하겠습니다. 특별한거 없으면 "Next" 만 눌러도 설치 가능...

전 버전(11.1.1.2.0): http://antop.tistory.com/58 (실질적으로 같음)

Oracle Weblogic: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e14142/toc.htm

Oracle Service Bus: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e15017/toc.htm

Oracle SOA Suite: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e13925/toc.htm





※ 저는 로컬 컴퓨터에 도저히 SOA 를 못하겠어서 다른 곳(Linux)에 설치하였습니다. ㅠ_ㅠ



Configure Schema (Repository Creation Utility)

rcu 는 데이터베이스에 붙어서 하는 작업이기 때문에 굳이 로컬에서 하지 않아도 됩니다.

※ 만약 데이터베이스가 Oracle XE 일 경우 아래와 같이 환경변수 설정 후 rcu를 실행해야 합니다.

(원문: If you want to use Oracle XE as your database, you need to set the RCU_JDBC_TRIM_BLOCKS environment variable to TRUE *prior* to running RCU.)

> set RCU_JDBC_TRIM_BLOCKS=TRUE // 환경변수 설정

> echo %RCU_JDBC_TRIM_BLOCKS% // 제대로 등록되었는지 확인
TRUE

> rcu.bat // RCU 실행


입력할 계정은 테이블스페이스, 계정 생성 등등 권한이 있는 계정이어야 합니다.



불행히도 저의 환경은 UTF8이 아니군요.. 이렇게 경고가 나옵니다.


접두어 설정 후 "SOA and BPM Infrastructure" 만 클릭하면 필요한 것까지도 다 선택됩니다.



스키마 비밀번호 설정.





생성 버튼 클릭.


스키마 생성 완료!




Create Domain

$ {ORACLE_HOME}/oracle_common/common/bin/config.sh


아래 그림처럼 3개를 선택합니다. 나머지는 자동 선택됩니다.


도메인 네임 설정.


관리자 계정/비밀번호 설정.



rcu로 만든 스키마를 설정합니다.

공통으로 바꿀 수 있는거는 다같이 선택해서 하면 되고, 따로따로 해야될꺼는 하나씩 선택해서 수정합니다.

마지막 "OSB JMS Reporting Provider"는 Derby 로 되어있는데 아래 그림과 같이 Oracle 디비로 바꿔줍니다.


스키마 테스트에 성공해야 합니다.

이 부분은 나중에 웹로직 콘솔 데이타소스(DataSource)에서 수정할 수 있습니다.



"Administration Server", "Managed Servers, Clusters and Machines" 두가지를 선택.


저는 Admin 서버의 이름과 리스너 포트를 변경하였습니다.


Managed 서버에서 osb_server1 을 삭제하여 어디민에 포함되게 합니다.

그냥 나둬도 되는데.... 분리를 하니까 현재 JDeveloper에서 OSB에서 만든 것(?)들을 불러오지 못하더군요... ㅠ_ㅠ


"soa_server1" 만 남겨두고 Next 클릭. (전 soa_server1 포트를 8011로 변경)


Create 버튼 클릭.


도메인 생성 완료!


  1. 비밀댓글입니다
  2. 안녕하세요 이번에 회사에서 BPM을 시작하게 되었습니다. 그래서 rcu를 설정을 하는데 처음 입력하는 부분에서
    서비스 이름을 입력할 때 저는 계속 부적합한 이름이라고 뜨네요. 새로한다고 환경도 다 포맷을하고 jdk, XE서버만 깔려 있거든요.저 서비스이름을 알아볼 수 있는 방법이나 해결할 방법이 없을까요???

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기