반응형
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. 비롯되다, 유래하다 [본문으로]
반응형
//
반응형
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 버튼 클릭.


도메인 생성 완료!


반응형
//

How to Download and Install OPatch

Posted at 2011. 3. 22. 14:59 | Posted in Oracle Solution
반응형
오라클 제품을 사용하면서 긴급한 패치들은 OPatch 라는 것을 사용해서 패치를 적용하더군요...

동영상 : https://support.oracle.com/CSP/main/article?cmd=show&type=VIDEO&id=1194734.1:OPatchTool



1) Please download the latest OPatch version from My Oracle Support (MOS)

a) Click on the "Patches & Updates" tab

b) In the "Patch Name or Number" field type 6880880 // 이 번호로 검색을 하면 플랫폼별 OPatch 종류가 나옵니다.

c) In the "Platform" field select the relevant platform // 플램폼까지 선택을 하면 좀더 검색이 수월합니다. (짱 많이 나옴 -_-)

d) Click the Search button.


e) Select the patch that corresponds to the Oracle release installed:

6880880 Universal Installer: Patch OPatch 9i, 10.1
6880880 Universal Installer: Patch OPatch 10.2
6880880 Universal Installer: Patch OPatch 11.1
6880880 Universal Installer: Patch OPatch 11.2

f) Click the Download button // 적당한 버젼을 찾아서 다운로드 합시다!


The option to download patches from our FTP site (updates.oracle.com) is no longer available, but it is
possible to use the wget utility to download patches. For instructions on how to do this, please review
the response to the question "Will customers be able to download patches without having to use the My
Oracle Support interface?" in Note:841055.1.

NOTE: You will need to use the HTML version of My Oracle Support (supporthtml.oracle.com)
rather than the flash version (support.oracle.com) because of a known problem with copying the
patch URL.

2) Upload or move the ZIP file to ORACLE_HOME and unzip it:
 // ORACLE_HOME=/home/weblogic/Oracle/Oracle_SOA1

Example:
==================================================================

% mv p6880880_101000_SOLARIS64.zip $ORACLE_HOME
% cd $ORACLE_HOME
(If an OPatch directory already exist then move it)                                                                        
% mv Opatch OPatch_100057                                                                                                   
% unzip p6880880_101000_SOLARIS64.zip
Archive:  p6880880_101000_SOLARIS64.zip
   creating: OPatch/
   creating: OPatch/docs/
  inflating: OPatch/docs/FAQ        
  inflating: OPatch/docs/README.txt 
  inflating: OPatch/docs/Users_Guide.txt 
  inflating: OPatch/docs/bt1.txt    
  inflating: OPatch/docs/bt2.txt    
  inflating: OPatch/docs/tmp        
  inflating: OPatch/emdpatch.pl     
   creating: OPatch/jlib/
  inflating: OPatch/jlib/opatch.jar 
  inflating: OPatch/opatch          
  inflating: OPatch/opatch.bat      
  inflating: OPatch/opatch.pl       
   creating: OPatch/perl_modules/
  inflating: OPatch/perl_modules/Apply.pm 
  inflating: OPatch/perl_modules/AttachHome.pm 
  inflating: OPatch/perl_modules/Command.pm 
  inflating: OPatch/perl_modules/LsInventory.pm 
  inflating: OPatch/perl_modules/Query.pm 
  inflating: OPatch/perl_modules/RollBack.pm 
  inflating: OPatch/perl_modules/Version.pm 
  inflating: OPatch/perl_modules/XML.pm 
  inflating: OPatch/perl_modules/opatchIO.pm 
  inflating: OPatch/README.txt      
   creating: OPatch/ocm/
 extracting: OPatch/ocm/ocm.zip     
   creating: OPatch/ocm/doc/
  inflating: OPatch/ocm/doc/license.txt 
   creating: OPatch/ocm/lib/
  inflating: OPatch/ocm/lib/emocmutl.jar 
   creating: OPatch/ocm/bin/
  inflating: OPatch/ocm/bin/emocmrsp

% cd OPatch
% opatch version

Oracle Interim Patch Installer version 1.0.0.0.58
Copyright (c) 2007 Oracle Corporation. All Rights Reserved..

We recommend you refer to the OPatch documentation under
OPatch/docs for usage reference. We also recommend using
the latest OPatch version. For the latest OPatch version
and other support related issues, please refer to document
293369.1 which is viewable from metalink.oracle.com

OPatch Version: 1.0.0.0.58

(This will vary depending on the version installed)

==================================================================

3) Now you can set the OPatch directory in your PATH variable so you can execute the OPatch command from anywhere.

Example:
==================================================================

For Korn / Bourne shell
% export PATH=$PATH:$ORACLE_HOME/OPatch

For C Shell
% setenv PATH $PATH:$ORACLE_HOME/OPatch

반응형
//

테이블스페이스 및 테이블 관리 쿼리

Posted at 2011. 1. 27. 13:34 | Posted in Database/Oracle
반응형
테이블 스페이스 용량 확인
select
	b.file_name as file_name,
	b.tablespace_name as tablespace_name,
	b.bytes/1024 as total_size,
	((b.bytes-sum(nvl(a.bytes,0))))/1024 as used_size,
	(sum(nvl(a.bytes,0)))/1024 free_size,
	trunc((sum(nvl(a.bytes,0))/(b.bytes))*100,3) || '%' free_percent
from
	dba_free_space a, dba_data_files b
where
	a.file_id(+) = b.file_id
	-- and a.tablespace_name like 'DEV_%'
group by
	b.tablespace_name, b.file_name, b.bytes
order by
	b.tablespace_name;

테이블별 용량 확인
select
	segment_name,
	sum(bytes) as bytes
from
	dba_segments
where
	segment_type = 'TABLE'
	-- and owner like 'DEV_%' 
group by
	segment_name
order by
	bytes desc;



한번 늘어난 테이블스페이스(실제 파일)은 사이즈가 커지면 줄어 들지 않습니다. DBA 작업을 하지 않는 이상...

delete 문으로 데이터를 삭제할 경우 데이터는 삭제되지만 테이블의 공간을 차지하고 있습니다.

입력(insert)과 삭제(delete)를 반복해도 테이블의 용량은 계속 늘어나게 됩니다.

데이터가 풀차려고 하면 테이블을 정리해줘야합니다. (Table Shrink)

ALTER TABLE 테이블명 ENABLE ROW MOVEMENT;
ALTER TABLE 테이블명 SHRINK SPACE;
ALTER TABLE 테이블명 SHRINK SPACE CASCADE;
ALTER TABLE 테이블명 DISABLE ROW MOVEMENT;

반응형

'Database > Oracle' 카테고리의 다른 글

Oracle Database 10g Express Edition. HTTP 포트번호 변경  (0) 2009.03.09
Oracle 계정 생성  (1) 2009.02.16
//

Transform에서 for-each 주의사항!

Posted at 2010. 4. 29. 14:26 | Posted in Oracle Solution/BPEL
반응형
일반적으로 트랜스폼(Transform)에서 여러개의 데이터일 경우 for-each 컴포넌트를 이용하여 돌릴 수 있습니다.

하지만 내가 의도하지 않는 결과가 나올 때가 있습니다. ㅠ_ㅠ



아래는 입력과 출력의 XML 스키마입니다.



단순히 입력 받은 그대로를 출력하는 BPEL 입니다.



트랜스폼으로 처리 했습니다.

<sample> 태그의 수만큼 루프가 돌게 됩니다.





<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body xmlns:ns1="http://www.example.org">
    <ns1:request>
      <ns1:sample>  <!-- 1개 -->
        <ns1:seq>1</ns1:seq>
        <ns1:id>1</ns1:id>
        <ns1:data>data_1</ns1:data>
      </ns1:sample>
      <ns1:sample>  <!-- 2개 -->
        <ns1:seq>2</ns1:seq>
        <ns1:id>2</ns1:id>
        <ns1:data>data_2</ns1:data>
      </ns1:sample>
    </ns1:request>
  </soap:Body>
</soap:Envelope>

위와 같은 데이터를 입력하게 되면 아래와 같은 데이터가 나오게 됩니다.

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:wsa="http://www.w3.org/2005/08/addressing">
  <env:Header>
    <wsa:MessageID>urn:231BE770534E11DFBFC6CF3D19573BDE</wsa:MessageID>
    <wsa:ReplyTo>
      <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
    </wsa:ReplyTo>
  </env:Header>
  <env:Body>
    <response xmlns:ns0="http://www.example.org" xmlns="http://www.example.org">
      <ns0:sample>
        <ns0:seq>1</ns0:seq>
        <ns0:id>1</ns0:id>
        <ns0:data>data_1</ns0:data>
      </ns0:sample>
      <ns0:sample>
        <ns0:seq>2</ns0:seq>
        <ns0:id>2</ns0:id>
        <ns0:data>data_2</ns0:data>
      </ns0:sample>
    </response>
  </env:Body>
</env:Envelope>

하지만!! 아래와 같이 의도하지 않은 결과가 나올때가 있습니다. ㅠ_ㅠ

갯수는 제대로 나왔는데 데이터가 1첫째의 데이터만 계속 반복해서 나옵니다.

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:wsa="http://www.w3.org/2005/08/addressing">
  <env:Header>
    <wsa:MessageID>urn:71B1A920534D11DFBFC6CF3D19573BDE</wsa:MessageID>
    <wsa:ReplyTo>
      <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
    </wsa:ReplyTo>
  </env:Header>
  <env:Body>
    <response xmlns:ns0="http://www.example.org" xmlns="http://www.example.org">
      <ns0:sample>
        <ns0:seq>1</ns0:seq>
        <ns0:id>1</ns0:id>
        <ns0:data>data_1</ns0:data>
      </ns0:sample>
      <ns0:sample>
        <ns0:seq>1</ns0:seq>
        <ns0:id>1</ns0:id>
        <ns0:data>data_1</ns0:data>
        </ns0:sample>
    </response>
  </env:Body>
</env:Envelope>

Mapper 파일을 Source 모드로 보면 정상적인 for-each 가 적용되면 아래와 같이 됩니다.

  <xsl:template match="/">
    <ns0:response>
      <xsl:for-each select="/ns0:request/ns0:sample">
        <ns0:sample>
          <ns0:seq>
            <xsl:value-of select="ns0:seq"/>
          </ns0:seq>
          <ns0:id>
            <xsl:value-of select="ns0:id"/>
          </ns0:id>
          <ns0:data>
            <xsl:value-of select="ns0:data"/>
          </ns0:data>
        </ns0:sample>
      </xsl:for-each>
    </ns0:response>
  </xsl:template>

하지만 정상적으로 for-each가 안되는 소스를 보면 아래와 같이 되어있습니다.

  <xsl:template match="/">
    <ns0:response>
      <xsl:for-each select="/ns0:request/ns0:sample">
        <ns0:sample>
          <ns0:seq>
            <xsl:value-of select="/ns0:request/ns0:sample/ns0:seq"/>
          </ns0:seq>
          <ns0:id>
            <xsl:value-of select="/ns0:request/ns0:sample/ns0:id"/>
          </ns0:id>
          <ns0:data>
            <xsl:value-of select="/ns0:request/ns0:sample/ns0:data"/>
          </ns0:data>
        </ns0:sample>
      </xsl:for-each>
    </ns0:response>
  </xsl:template>

현재 JDeveloper 의 버그 같지만 이런 에러(?)가 안나게 하는 방법은 맵핑할 때 자동 맵핑(Auto Map)을 이용하거나, for-each 컴포넌트를 먼저 적용 한 후 선을 연결하면 됩니다.

선을 먼저 연결하고 for-each 컴포넌트를 적용하면 원하는 결과가 안나올 수 있습니다.

반응형

'Oracle Solution > BPEL' 카테고리의 다른 글

프로젝트 구조가 이상해질 때!!!  (0) 2010.04.27
Database Adapter  (0) 2010.04.19
//

Database Adapter

Posted at 2010. 4. 19. 11:54 | Posted in Oracle Solution/BPEL
반응형
프로젝트를 하게 되면 가장 많이 사용하게 되는 것이 데이터베이스(이하 디비)입니다.

BPEL 에서는 디비에 CRUD[각주:1]를 하려면 Database Adapter(이하 DbApapter)라는 것을 사용합니다.

하지만.... 그냥 쓰면 되는 것은 아니고... DbAdapter를 하나 추가 하기 위해서 미리 설정을 해줘야 하는 것이 있습니다.

웹로직 콘솔에서 데이터소스(datasource)를 설정하고, 그 데이터소스를 사용하는 DbAdapter를 추가해야 실제로 배치(deploy) 했을 때 사용 가능합니다.



간단한 샘플로 어떻게 해야되는지 알아봅시당당당~

웹서비스로 유저 정보를 입력하면 Oracle과 Sql Server 2005 에 각각 Insert 하는 웹서비스(?)를 만들어보겠습니다.



스키마 파일입니다.

  

입력되는 필드는 아래와 같습니다.



※ 아래 예제를 하시려면 SOA Suite 설치 및 프로젝트 생성, 배치는 할줄 알아야 합니둥~ -_-;;



라이브러리(jar) 세팅

웹로직(Oracle WebLogic)에서 기본적인 jdbc 드라이버는 포함되어 있지만 Mssql용 jdbc 드라이버는 포함되어있지 않습니다.

그래서 jdbc 드라이버를 추가해야 합니다. 많은 방법이 있지만 저는 {도메인홈}\lib 디렉토리에 넣어두겠습니다.





웹로직 서버를 시작(재시작)핼 때 콘솔화면을 보면 아래와 같이 sqljdbc4.jar 파일이 클래스 패스에 포함된 걸 볼 수 있습니다.





데이터베이스 리소스(datasource) 생성

※ 데이터소스 생성에 관해서는 제 블로그의 다른 글에도 많이 있을 겁니다. ㄷㄷ

먼저 Oracle 10g 데이터소스를 생성하겠습니다.

웹로직 콘솔로 들어갑니다. 도메인 구조(메뉴)에서 서비스 - JDBC - 데이터 소스를 선택합니다.



새로 만들기를 클릭합니다.



이름, JNDI[각주:2] 이름, 데이터베이스 유형, 데이터베이스 드라이버를 설정합니다.

여기서 중요한게 JNDI 이름입니다. 이 이름으로 찾아서 리소스를 사용합니다.

다음을 클릭합니다.



트랜잭션을 설정합니다. XA 지원되는 jdbc 드라이버는 패스 됩니다. ㅋㅋ



디비 접속 정보를 설정합니다. 입력 후 다음을 클릭합니다.



구성 테스트를 클릭합니다.



"접속 테스트가 성공했습니다." 메시지가 나와야 정상입니다.

다음을 클릭합니다.



대상을 선택합니다. 꼭 대상을 선택해 줘야합니다.

soa_server1을 체크합니다.




SQL Server 20005 데이터 소스를 생성하겠습니다.

데이터 소스 목록에서 sampleOracle이 추가된 것을 볼 수 있습니다.

새로 만들기 클릭



이름, JNDI 이름, 데이터베이스 유형, 데이터베이스 드라이버를 설정합니다.

기본적으로 Mssql은 XA[각주:3]가 아니므로 XA가 아닌 드라이버를 선택했습니다.

다음 클릭



트랜잭선 설정입니다.

글로벌 트랜잭션 지원
체크 해제 합니다. 다음 클릭



접속 정보를 설정합니다.



구성 테스트를 클릭합니다.



다음을 클릭합니다.



대상을 soa_server1로 설정합니다.



sampleMssql(jdbc/sampleMssql), sampleOracle(jdbc/sampleOracle) 이 추가되었습니다.




DbAdapter 설정

BPEL 에서 디비에 접근하려면 DbAdapter 를 통해서 해야합니다.

왼쪽 트리 메뉴에서 배치를 클릭합니다.



배치 목록에서 DbAdapter를 클릭합니다.



구성 탭을 클릭합니다.



아웃바운드 접속 풀 탭을 클릭합니다.



목록 테이블에서 새로 만들기를 클릭합니다.



javax.resource.cci.ConnectionFactory를 선택하고 다음을 클릭합니다.



JNDI 이름에 eis/DB/sampleOrcle을 입력합니다.

이 JNDI 이름이 JDeveloper 에서 사용할 이름입니다. 왕중요!!



처음 설정할 때 배치 계획 파일을 어디에 저장할 것인지 물어봅니다.

저는 {SOA홈}\soa\DBPlan 디렉토리에 저장하겠습니다. (DBPlan 디렉토리는 미리 만들었습니다.)

DBPlan 을 선택합니다.



확인을 클릭합니다.



정상 처리 메세지를 확인하시고, 배치 계획 경로도 확인해주세요~




다시 배치 - DbAdapter - 구성 - 아웃바운드 접속 풀 까지 이동합니다.

새로 만들기 클릭



그거.. 선택 후 다음 클릭



JNDI 이름으로 eis/DB/sampleMssql 입력합니다.



또! 다시 배치 - DbAdapter - 구성 - 아웃바운드 접속 풀 까지 합니다.

목록 테이블에 두개가 추가된 것을 볼 수 있습니다.

오라클꺼 먼저 설정 해봅시다.

javax.resource.cci.ConnectionFactory 앞에 +를 눌러 확장합니다.

eis/DB/sampleOracle을 선택합니다.



속성 테이블에서 맨 아래 xaDataSourceName의 속성값 부분 공간을 클릭합니다.



그러면 input이 생겨납니다. 우와왕~

여기에 jdbc/sampleOracle을 입력한 후 엔터를 입력합니다.



저장 클릭



잘 저장 되었다고 나옵니다. ㄷㄷ



이번에는 eis/DB/sampleMssql 클릭



현재 Mssql은 XA가 아니므로 dataSourceName에 jdbc/sampleMssql을 입력합니다.

platformClassName
을 변경해야 합니다. 현재 입력되어있는 속성값은 딱 봐도 Oracle10 용임을 알 수 있습니다.



oracle.toplink.platform.database.SQLServerPlatform 을 입력합니다.

다른 platformClassName은 아래 링크를 참조해주세요~

http://download.oracle.com/docs/cd/E12839_01/integration.1111/e10231/adptr_db.htm#CHDDDJAG



저장을 클릭합니다.



배치 목록에서 DbAdapter를 선택(체크박스 선택)하고 갱신을 클릭합니다.



완료를 클릭합니다.



성공적으로 갱신되었다는 메세지 확인



이제 JDeveloper 에서 디비 어댑터(Database Adapter)를 사용할 준비가 되었습니다.

JDeveloper에서 먼저 설정하고 콘솔에서 데이터소스와 DbAdapter를 설정해도 됩니다.

위에서 설정한 데이터소스와 DbAdapter는 실제 어플리케이션이 배치(Deploy)되서 돌아갈 때 사용하니까요~


Working JDeveloper

Database Addpater를 External Refereneces 영역에 드래그 앤 드랍 합니다.



서비스 이름(Service Name)을 지정합니다. 저는 그냥 테이블 이름을 했습니다.



현재 JDeveloper에서 사용할 접속 정보를 설정합니다.

커낵션(Connection) 오른쪽에 데이터베이스 커낵션 생성 버튼(녹색 +)을 클릭합니다.



커낵션 정보를 입력 후 Test Connection 버튼을 클릭했을 때 "Success!" 가 나와야 합니다.

OK 버튼을 클릭합니다.



커낵션을 추가(한번 추가했으면 앞으로는 선택하겠죠..)했을때의 모습니다.

아래 JNDI Name 이 eis/DB/{커낵션명} 으로 자동 작성되어있는 걸 볼 수 있습니다.

파란선을 기준으로 위쪽은 JDeveloper에서 설정할떄 쓰는 커낵션 정보이고, 아래 JNDI Name이나 Data Source는 실제 배치 되었을 때 참조하는 리소스 입니다.

그러므로 JDeveloper에서의 접송 정보와 위에서 했던 DataSource, DbAdpater 설정이 일치해야 합니다.

JNDI Name 이 위에서 설정한 DbAdapter 이름이어야 한다는게 감이 오시졈? ㄷㄷ

Next 버튼을 클릭합니다.



데이터베이스에 접속해서 뭘 할지 설정합니다. -_-

딱 보면 뭔지 알 수 있습니다.

Poll for New or Changed Records in a Table 은 테이블을 지속적으로 읽어들여 변화가 있을 떄 이벤트가 일어납니다.

Execute Pure SQL 은 사용자 쿼리 입니다.



테이블을 선택합니다. Import Tables 클릭



Query 버튼을 클릭하면 Available 영역에 테이블 목록이 조회됩니다.

테이블을 선택하고 오른쪽으로 가는 화살표 버튼을 클릭하여 선택합니다.



테이블이 선택된 것을 확인하시고 Next 버튼을 클릭합니다.



※ 임포트한 테이블에 기본키(Primary Key)가 없을 경우 기본키를 지정하는 단계가 나옵니다.

관계(Relationships)를 설정합니다. 일단 그런거 없으니 패스



사용할 필드를 설정합니다. 전 다 쓸겁니다. Next 클릭



고급 설정입니다.

시퀀스 설정(Sql Server의 Identity도 되더군용) 이라든지 이것 저것 설정할 수 있습니다.

그냥 Next 클릭 ㄷㄷ



Finish 클릭



Database Adapter(Oracle 꺼)가 하나 생성되었습니다.

이제 Mssql 꺼를 하나 더 만듭시다~





Mssql 커낵션을 추가합시다.



오라클이 아닌 다른 디비는 jdbc 드라이버를 설정해줘야 합니다.

Library 오른쪽이 Browse 클릭



New 클릭



Add Entry 클릭



jdbc 드라이버를 선택합니다.



라이브러리 이름(Libary Name)을 지정하고 OK 클릭



라이브러리가 추가 되었습니다. OK 클릭



Test Connection 버튼을 클릭하면 "Success!" 메세지가 나와야합니다.

만약 라이브러리를 설정 한하면 클래스가 없다느니 뭐라고 에러가 날겁니다. ㅎㅎ



다음 단계는 위의 Oracle 설정과 같습니다.





이제 요청(request) XML 구조를 만들어 봅시다.

xsd 폴더에서 마우스 오른쪽 버튼 클릭 후 New 클릭



All Technologies 탭에서 General - XML 에서 XML Schema를 선택합니다.



파일 이름(File Name)을 입력합니다.

보통 xsd 폴더에 저장하니 폴더도 확인 (꼭 xsd 폴더에 없어도 됩니당)



처음 만들게 되면 "exampleElement" 엘리먼트 하나만 만들어져 있습니다.

exampleElement 선택 후 오른쪽 컴포넌트 팔레트(Component Palette)에서 시퀀스(sequence)를 클릭합니다.

그러면 시퀀스가 하나 추가되고 추가된 시퀀스가 선택되어 있습니다.



엘리먼트(element)를 클릭합니다.

그러면 시퀀스 다음에 엘리먼트가 추가됩니다.



전에 추가된 시퀀스를 선택하고 다시 엘리먼트를 클릭합니다.



이렇게 엘리먼트 7개를 추가합니다.

뭐 드래그를 해도 되고 소스 편집을 해도 되고 방법은 많으니 직접 해보세용~



추가된 엘리먼트를 선택 후 오른쪽 아래에 속성 부분에서 이름(name)을 변경하시거나 엘리먼트를 더블클릭해서 이름을 바꿉니다.



그 후 다시 속성 부분에서 타입(type)을 입력합니다.



아래와 같이 7개의 엘리먼트를 완성합니다.

저장합니다.



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



이름(Name)을 입력하고 템플릿(Template)은 One Way Interface(단방향)를 선택합니다.

Input은 방근전 만들었던 input을 선택합니다. 돋보기 버튼 클릭



Project Schema Files - input.xsd - exampleElement 를 선택합니다.



OK 클릭



RouteUser(Mediator)와 User(Database Adapter)를 연결합니다.



RouteUser와 TblUser를 연결합니다.



RouteUser(Mediator)를 더블 클릭하여 수정합니다.



아래에 보면 두개의 라우팅(Static Routing)이 있습니다.

각각 User와 UblUser로 가는 겁니다.

첫번째. User로 가는 데이터를 설정합시다. Transform Using 오른쪽의 맵핑 설정 버튼을 클릭하빈다.



Create New Mapper File을 선택합니다.



아래와 같이 선을 연결합니다.

그리고 String Functions 그룹에서 concat 컴포넌트를 가운데 영역에 드래그 앤 드랍합니다.



inp1:zipcode 와 inp1:address 를 차례로 concat 컴포넌트에 연결하고 top:addr 과 concat 컴포넌트와 연결합니다.

concat 컴포넌트를 더블클릭하여 수정합니다.



Add 버튼을 이용하여 파라메터(parameter)를 추가 한 후 공백(" ")을 넣습니다.



Date Functions 그룹에 current-dateTime 컴포넌트를 가운데 영역에 드래그 앤 드랍한 후, top:wdate 와 연결합니다.



이번에는 두번쨰 연결인 TblUser 와의 연결을 설정합시다.







모두 저장합니다.



배치(Deply) 및 테스트

배치 합니다.



테스트 합시다.



입력 후 오른쪽 아래 웹 서비스 테스트를 클릭합니다.



성공(?) 했습니다.

메시지 흐름 추적 실행을 클릭합니다.



RouteUser 를 거쳐서 User, TblUser 로 실행된 것을 볼 수 있습니다.

RouteUser를 클릭합니다.



Mediator에서 무슨일이 일어났는지 볼 수 있습니다.

페이로드를 확장하면 이동하는 데이터(XML)를 볼 수 있습니다.



데이터베이스를 확인해보면 입력한 정보가 각각 테이블에 들어가 있습니다. 와아~ -_-v





  1. C: Create, R: Retrieve(Read), U: Update, D: Delete [본문으로]
  2. Jana Naming and Directory Interface: 이름을 사용해서 객체나 객체에 대한 레퍼런스를 발견할 수 있는 방법을 제공한다. 어플리케이션 개발자는 네이밍 서비스에 이름을 사용하여 객체를 바인딩함으로써 객체에 이름을 부여하게 된다. 이후 코드에서는 글 이름을 사용하여 바인딩 된 객체를 참조할 수 있게 된다. [본문으로]
  3. XA방식의 트랜잭션이란 여러개의 데이터베이스, JMS, 또는 그 외의 리소스들간의 트랜잭션을 보장하는것을 말하고 NonXA방식이란 일반적인 한개의 데이터베이스에서 관리되는 트랜잭션을 말한다. [본문으로]
반응형

'Oracle Solution > BPEL' 카테고리의 다른 글

Transform에서 for-each 주의사항!  (1) 2010.04.29
프로젝트 구조가 이상해질 때!!!  (0) 2010.04.27
//
반응형
Introduction





Surfacing binding properties at the composite level

File Adapter를 직접 수정하지 않고 프로퍼티만 설정해서 생성될 파일의 이름을 바꿔봅시다.

WriteApproval 레퍼런스(File Adapter)를 선택합니다.




레퍼런스(또는 Property Inspector) 패널에서 Binding Properties를 추가합니다.




Name은 FileNamingConvention을 선택하고 Value는 test_%SEQ%.xml을 입력합니다.




composite.xml을 Source 보기로 보면 아래와 같이 프로퍼티가 추가되었습니다.





Generating and validating a deployment plan

여치 계획 파일을 만들어서 배치할 때 여러가지 설정을 적용(변경)한 상태로 배치를 할 수 있습니다.

composite.xml 파일에서 마우스 오른쪽 버튼 클릭 후 Generate Config Plan을 클릭합니다.




생성할 파일 이름을 POProcessing_dev_cfgplan.xml 으로 설정 후 OK 클릭




아래의 위치에 텍스트를 추가합니다.

File Adapter 의 출력 파일명을 변경합니다.




아래의 위치에  텍스트를 추가합니다.

파일을 쓸 디렉토리의 위치를 변경합니다.




모두 저장 후 composite.xml 파일에서 오르쪽 버튼 클릭 후 Validate Config Plan을 클릭합니다.




configuration plan 파일을 선택합니다.




어떻게 바뀔 것인지 로그가 나옵니다.




서버에 디플로이 할때 아래와 같이 플랜 파일을 선택할 수 있습니다.





Testing

테스트를 해보면 주문 파일이 설정 플랜에서 설정한 대로 파일이 생성되는 것을 확인할 수 있습니다.



반응형
//
반응형
Introduction

배송정보를 JMS 큐(Queue)에 등록하겠습니다.

Chapter 1 에서 JMS 관련 서버 설정이 되어있어야 합니다.



Add the JMS adapters

JMS Adapter를 External References 영역에 추가합니다.



Name : JMS_USPS



Oracle Weblogic JMS를 선택합니다.



서버 커넥션을 선택합니다.



Define from operation and schema (specified later)를 선택합니다.



Produce Message를 선택합니다.



Browse... 를 클릭합니다.



demoFulfillmentQueue (queue)를 선택합니다.



JNDI Name : eis/QUeue/demo



browse 버튼을 클릭합니다.



fulfillment.xsd - Fulfillment 를 선택합니다.



Next 클릭



Finish 클릭




위와 같은 방법으로 JMS_UPS, JMS_FedEx를 추가로 만들어줍니다.

다 만든 후 FilfillmentProcess(BPEL Process)와 연결합니다.





Invoke the services from BPEL

FulfillmentProcess(BPEL Process)를 더블 클릭하여 편집합니다.



FulfillmentProcess(Business Rule 액티브) 아래에 Switch 액티브를 추가합니다.



Case를 2개 더 추가합니다.



<case> 부분을 더블 클릭합니다.



General 탭에서 Name은 USPS를 입력합니다.

Expression은 아래와 같이 입력합니다. (빌더를 이용하세요)



두번째 <case> 도 더블 클릭해서 UPS를 입력합니다.



세번째 <case>는  FedEx



<case USPS> 안에 Invoke 액티브를 추가합니다.




추가한 Invoke 액티브와 JMS_USPS 컴포넌트를 연결합니다.



이름은 Invoke_USPS를 입력하고, Input Variables 를 기본으로 추가합니다.



UPSFedEx도 마찬가지로 추가합니다.



Assign 액티브를 <case USPS> 영역 안의 Invoke_USPS 위에 추가합니다.



더블 클릭하여 편집합니다.



General 탭에서 이름을 Assign_USPS로 입력합니다.



Copy Operation을 아래와 같이 추가합니다.

UPSFedEx도 똑같이 추가합니다. (그래도 To는 틀려야겠죠? -_-)



<otherwish> 부분은 삭제합니다.



완성되었습니다.





Deploying and testing the application

배치 후 테스트 해보면 마지막에 JMS로 데이터가 간 것을 확인할 수 있습니다.



WebLogic Console로 접속해서 서비스 - 메시징 - JMS 모듈로 이동합니다.



SOAJMSModule을 클릭합니다.



demoFulfillmentQueue를 클릭합니다.



모니터링 탭에서 SOAJMSModule! demoFulfillmentQueue를 체크 후 메시지 표시를 클릭합니다.



들어온 메세지를 확인합니다.



데이터를 확인합니다.







반응형
//