| BPEL을 이용한 웹 서비스 네트워크의 구축
Yves Coene and The Hoa Nguyen
BPEL scope, BPEL domain, Oracle
BPEL Process Manager API를 이용하여 파트너 친화적인 웹 서비스 네트워크를 구축한 European
Space Agency의 사례를 소개합니다.
전체 BPEL Cookbook 목록
보기
웹 서비스 표준이 점차 성숙되어 가면서, 점점 더 많은 기업이 웹 서비스를 이용한 협업 환경을 구축하고
있습니다. BPEL은 인터-엔터프라이즈 협업 환경의 웹 서비스 통합을 위한 기반으로 빠르게 자리잡고 있습니다.
BPEL은 온라인 마켓플레이스 또는 협업 네트워크(collaboration network)를 구축하려는
기업에게, 표준 기반의 접근 방식과 “느슨하게 커플링된(loosely-coupled)” 프로세스 통합 환경을
제공합니다.
웹 서비스가 제공하는 기능은 그 매력만큼 위험 요소도 있습니다. 설계 과정에서 기술적/운영적인 문제를 미리
고려하지 않는 경우 파트너의 관계가 오히려 악화되거나 통합 비용이 급격하게 치솟을 수 있습니다:
- 파트너들은 비즈니스 수행에 관련한 기준에 충분한 합의를 이루어야 합니다. 전송 프로토콜, 통합의 목적,
메시지 포맷, 비즈니스 제약사항 등을 서로가 명확하게 이해하고 있어야 합니다.
- 네트워크의 가입 프로세스가 용이해야 합니다. 협업 네트워크가 성공하려면 확장이 우선입니다.
- 사용자는 런타임 환경에서 필요한 비즈니스 서비스를 쉽게 찾을 수 있어야 합니다. 그렇지 않은 경우 SOA(service-oriented
architecture)의 혜택은 유명무실해지고 맙니다. 이를 위해 서비스 리포지토리(service repository)를
이용하는 것도 좋은 방법입니다. 개발자가 서비스를 쉽게 확인하고 재활용할 수 없다면, 해당 서비스는 존재하지
않는 것이나 마찬가지입니다.
- 파트너는 웹 서비스를 실시간으로 모니터할 수 있어야 합니다. 엔드 유저는 특정 주문의 진행 상황을 추적할
수 있어야 합니다. 또 거래 파트너들은 비즈니스 프로세스에 존재하는 성능병목을 직접 진단할 수 있어야 합니다.
협업 네트워크가 호스팅 환경에 구현되는 경우에는 문제가 더욱 까다로워질 수 있습니다. 호스팅 모델에서는,
파트너들이 레거시 애플리케이션의 기능을 웹 서비스의 형태로 공개하게 됩니다. 이 웹 서비스는 중앙 리포지토리를
통해 배포됩니다. 파트너 웹 서비스를 이용하는 복잡한 비즈니스 프로세스를 통합하는 작업은 호스트에서 이루어지게
됩니다.
BPEL Cookbook 시리즈의 첫 번째 연재에서는, 필자의 팀(Spacebel s.a.)이 참여한 European
Space Agency(ESA) 프로젝트를 사례로, 위에서 언급된 문제들을 해결하기 위한 아키텍처 상의
고려사항에 대해 설명해 보기로 하겠습니다. 또 이 프로젝트에서 BPEL 스코프, BPEL 도메인, Oracle
BPEL Process Manager API를 이용하여 “파트너 친화적인(partner friendly)”
협업 네트워크를 구축한 방법을 소개합니다.
ESA Network 개요
ESA는 모든 서비스 제공자들이 개방형 표준에 기반하는 BPEL 기반의 협업 네트워크를 구현하고자 하는 전략적
목표 하에 추진되었습니다. Service Support Environment (SSE) 네트워크라는 이름으로
불리는 ESA 네트워크는, 외부 업체가 제공하는 Earth Observation (EO) 서비스와 Geographic
Information System (GIS) 서비스를 조합한 부가가치 서비스를 제공합니다. SSE는 현재 9개
국가의 20여개 파트너업체를 포함하는 네트워크로 성장을 계속하고 있습니다.
그림 1에서 확인할 수 있듯, SSE는 단순한 형태로 구현된 BPEL 기반 네트워크입니다. ESA는 SOAP,
WSDL, WS-Addressing, WS-Inspection 등의 웹 서비스 표준을 기반으로 서로 다른 파트너
간의 프로세스 기반 협업 환경을 지원하는 중간 브로커(intermediary broker)로써 기능합니다.
이 네트워크는 “hub-and-spoke” 토폴로지로 동작합니다. 서비스 제공자는 Oracle BPEL Designer를
이용하여 서로 다른 타입을 갖는 EO (Earth Observation) 데이터와 GIS 서비스 데이터를 중앙
리포지토리에 저장하고, 무한확장 가능한 서비스 카탈로그를 생성합니다.
그림 1 SSE 아키텍처
SSE는 다음과 같은 기능을 위한 인프라스트럭처를 제공합니다:
- 사용 가능한 서비스의 카탈로그를 제공하는 중앙 리포지토리를 구성 및 관리
- 중앙 디렉토리 내부에 서비스를 등록 및 검색
- racle BPEL 엔진 내부에서 “short-lived’ 또는 “long-lived” 비즈니스 프로세스를
실행
- 파트너들이 Oracle BPEL Process Manager 콘솔을 이용하여 웹 서비스의 실행을 모니터
엔드 유저는 사용가능 서비스의 카탈로그를 열람하고, 필요한 서비스를 요청합니다. 요청을 전달받은 SSE는
서비스에 관련된 비즈니스 프로세스를 호출합니다. 비즈니스 프로세스는 웹 서비스를 호출하고, 웹 서비스가 서비스
제공자의 위치에서 실행됨으로써 요청의 수행이 완료됩니다.
SSE는 동기형, 비동기형 인터액션 모델을 모두 지원합니다. ESA는 Oracle BPEL Process
Manager API를 최대한으로 활용하여, 서비스 제공자와 엔드 유저 모두에게 극대화된 유연성과 사용편의성을
제공합니다.
웹 서비스 네트워크의 설계
개방형 표준으로 인해 통합의 원칙이 바뀌고 있습니다. BPEL의 프로세스 중심적인 접근법을 이용하여 기업 간의
통합 환경을 구현하고, BPEL 프로세스 플로우를 통해 파트너 간의 업무 관계를 정의할 수 있습니다. 이처럼
SOA와 BPEL을 조합하여 느슨하게 커플링된(loosely coupled) 협업 네트워크를 구축하는 것이
가능합니다.
다양한 파트너와 기업의 업무를 연결하는 환경에서는 “hub-and-spoke” 토폴로지가 가장 일반적으로 사용되고
있습니다. 또 경우에 따라서는 “peer-to-peer” 모델을 적용할 수도 있습니다만, 이 모델에서는 각각의
파트너가 웹 서비스 보안 및 프로비저닝을 위한 플랫폼을 개별적으로 제공해야만 합니다.
네트워크 설계의 네 가지 영역이 다음과 같습니다:
- 터페이스 관계(interface relationship)의 설정
- 파트너 가입(partner enablement) 절차의 단순화
- 중앙집중적 서비스 레지스트리(service registry)의 생성
- 파트너와 엔드 유저에게 셀프서비스 모니터링(self-service monitoring) 환경 제공
인터페이스 관계(interface relationship)의 설정. 협업 네트워크의
설계는 작업 규칙(rules of engagement)을 정의하는 것에서부터 시작됩니다. 이 규칙을 통해 비즈니스
프로세스 내부에서 교환되는 메시지, 메시지가 교환되는 순서, 메시지의 물리적 속성 등이 명시됩니다. 효율적인
커뮤니케이션을 위해서는 모든 파트너들이 다음과 같은 문제에 답변을 제공할 수 있어야 합니다:
- 작업의 목적—견적 요청을 위한 작업인가, 아니면 구매 주문을 위한
작업인가?
- 메시지 포맷—메시지는 어떻게 인코딩 되는가?
- 어휘(Vocabulary)—다른 파트너들이 메시지를 이해하고 처리할 수 있게 하려면 메시지를 어떻게
구조화해야 하는가?
- 비즈니스 제약사항(business constraints)—요청에 얼마나 빨리 응대해야 하는가?
- 커뮤니케이션 채널(communication channel)—메시지의 암호화가 필요한가?
T파트너들로부터 이에 대한 해답을 쉽게 도출하기 위해, ESA는 각
용어를 정의하는Interface
Control Document를 공개했습니다. 이 문서는 ESA가 후원하는 프로젝트를 통해 정립, 정의,
검증된 기술적인 통합 룰(integration rule)을 공식화하고 있습니다. SSE 서버와 서비스 제공자
간의 커뮤니케이션을 위한 프로토콜로는 메시지 기반 SOAP over HTTP 또는 SOAP over HTTPS가
사용됩니다 (이 문서를 작성 중인 시점에는 WS-Security의 활용 여부를 검토 중입니다). WSDL(Web
Services Definition Language)은 모든 엔티티를 바인딩하는 유일한 인터페이스로써 활용됩니다.
서비스 제공자는 SOAP 인터페이스를 기술한 WSDL 파일을 생성하고, 생성된 파일을 다른 파트너들에게 공개해야
합니다. WSDL 파일에 포함되어야 하는 정보가 다음과 같습니다.
- 선택된 인터액션 모델에 필요한 작업(검색, RFQ, 주문 등)
- 서비스의 물리적 위치
- 서비스 XSD Schema의 import
서비스, 일관성, 메시지 변환 등의 비교를 위해, ESA는 XSD Schema를 이용하여 XML 페이로드를
기술하도록 규정하고 있습니다. 또 SSE는 master XSLT document를 이용하여 프리젠테이션 계층의
일관성을 보장하도록 요구하고 있습니다. 템플릿 스타일시트(template stylesheet)는 각각의 서비스에
아래와 같이 import되어야 합니다:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:oi="http://www.esa.int/oi">
<!-- Import statements -->
<xsl:import href="./SSE.xsl"/>
<!-- Apply the template for the root element from SSE standard template -->
<xsl:template match="/">
<xsl:apply-imports/>
</xsl:template>
...
xsl:apply-imports는 SSE 스타일시트로부터 import된 템플릿 룰(template rule)을
이용하여 루트 노드(root node)를 처리합니다. 서비스 등록 과정에서, 서비스 제공자는 XML Schema,
WSDL, XSLT 파일의 URL을 제공합니다. SSE는 document-style SOAP을 사용할 것을
강제하고 있습니다. 이와 같은 방법을 사용함으로써, 서비스 및 출력 데이터의 상세한 내역을 명시하고 XML
Schema를 이용하여 인바운드/아웃바운드 메시지의 검증(validation)을 수행할 수 있습니다.
ESA가 채택한 접근법은 제한된 수의 파트너와 웹 서비스 네트워크를 처음 구성하고자 하는 기업에게 적합한 솔루션입니다.
네트워크의 규모가 점점 커지는 경우, 새로운 종류의 메시지 포맷, 커뮤니케이션 규칙, 보안 및 전송 메커니즘이
구현되어야 할 것입니다.
파트너 가입(partner enablement) 절차의 단순화. 네트워크의 성장
가능성은, 새로운 파트너의 가입 절차가 얼마나 쉽고 단순한가의 여부에 따라 결정됩니다. 특히 다음과 같은 요소가
중요한 영향을 미칩니다:
- 허브(hub)와의 통합—파트너들이 어떤 방법으로 웹 서비스를 생성하고
제출하는가? 허브가 서로 다른 전송 프로토콜을 지원하는가?
- 프로세스 관리(process management)—서로 다른 파트너의
프로세스를 적절히 구분하고 있는가? 파트너가 전체 네트워크의 안정성을 손상시키지 않고 비즈니스 프로세스를
변경할 수 있는가? 메타데이터 정의를 이용하여 프로세스를 즉석에서 생성할 수 있는가?
SSE는 서비스 제공자에 대한 기술적 요구사항을 단순화함으로써 파트너와의 관계를 강화하는데 성공하였습니다.
ESA는 파트너 연결을 위한 소프트웨어를 배포하고, 개발 플랫폼을 분할하고, 파트너의 관점에서 프로세스 플로우를
자동 생성하는 기능을 구현함으로써 이러한 목표를 달성할 수 있었습니다.
예를 들어, 통합 프로세스의 실행 속도를 개선하기 위해, ESA는 SSE Toolbox를 배포하고 있습니다.
SSE Toolbox는 SSE와 서비스 제공자의 기존 시스템 간의 인터페이스로 활용되는 무료 툴킷으로, Sun
Java Web Services Developer Pack에 기반하고 있으며 XML 스크립팅 언어를 통해 FTP,
파일 교환, JDBC, Java API 및 HTTP 호출 등을 위한 다양한 백엔드 통합 메커니즘을 지원합니다.
또 서비스 등록에 필요한 WSDL 파일을 자동으로 생성해 줍니다.
파트너들은 각각 다른 서비스를 중앙 리포지토리에 등록합니다. 개발 및 구축 환경을 파티셔닝(partitioning)함으로써
각 파트너의 변경 사항을 다른 파트너 환경으로부터 격리할 수 있습니다. SSE는 Oracle BPEL Process
Manager의 BPEL 도메인(BPEL domain) 기능을 이용하여 파티셔닝 환경을 제공합니다. BPEL
도메인은 개발자들이 Oracle BPEL Process Manager의 단일 인스턴스를 다수의 가상 BPEL
“sandbox”로 분할할 수 있게 합니다. BPEL 도메인은 ID로 구분되며 암호에 의해 보호됩니다. 서비스
제공자가 SSE에 등록되면, Oracle BPEL Process Manager API가 자동으로 호출되어 서비스
정의 파일을 저장하기 위한 BPEL 도메인을 생성합니다.
createDomain 메소드의 활용 예가 아래와 같습니다:
/**
* Create new domain space for a service provider to hold her/his services workflow
* definitions files in
*
* @param domainName The Id to identify the domain
* @param password The password used to login to the corresponding domain
* @exception RemoteException System communication error
* @exception WorkflowException Thrown if any error happens on the server
that prevent the delete
*
*/
public void createDomain(String domainName, String password)
throws RemoteException, WorkflowException{
if(ml.isDebugEnabled()) ml.debug("Enter createDomain (domain = " + domainName + " password = " + password);
/**
* check if the being created domain exist?
*/
try {
Locator locator = new Locator(domainName, password);
ml.info("Stop creating domain: " + domainName +
" because it has already existed.");
throw new WorkflowException("1019");
} catch (com.oracle.bpel.client.ServerException e) {
;
}
try {
//obtain the domain admin password from the system configuration SSE.properties file
String domainAdminPassword = SystemConfigurationInfo.getProperty
(WorkflowConstant.BPEL_DOMAIN_ADMIN_PASSWORD);
ServerAuth auth = ServerAuthFactory.authenticate( domainAdminPassword, "localhost" );
if(ml.isDebugEnabled()) ml.debug("obtain authentication ok");
// Create server object ... this is our service interface
//
Server server = new Server( auth );
// Domain id is "newDomain", the password is "myPassword"
if(ml.isDebugEnabled()) ml.debug("create server instance ok");
//
Map domainProperties = new HashMap();
domainProperties.put( Configuration.DATASOURCE_JNDI,
SystemConfigurationInfo.getProperty
(CommonConstant.DEFAULT_BPELDOMAIN_DS_JNDI));
domainProperties.put( Configuration.TX_DATASOURCE_JNDI,
SystemConfigurationInfo.getProperty
(CommonConstant.DEFAULT_BPELDOMAIN_DS_JNDI));
if(ml.isDebugEnabled()) ml.debug("create domain - ds jndi property key/value:
" + Configuration.DATASOURCE_JNDI + "/" + SystemConfigurationInfo.getProperty
(CommonConstant.DEFAULT_BPELDOMAIN_DS_JNDI));
if(ml.isDebugEnabled()) ml.debug("create domain - tx_ds jndi property key/value:
" + Configuration.TX_DATASOURCE_JNDI + "/" + SystemConfigurationInfo.getProperty
(CommonConstant.DEFAULT_BPELDOMAIN_DS_JNDI));
server.createDomain(domainName, password, domainProperties);
if(ml.isDebugEnabled()) ml.debug("Enter createDomain
(domain = " + domainName + " password = " + password);
} catch( com.oracle.bpel.client.ServerException se ){
ml.error(se.getMessage());
if(ml.isDebugEnabled()) se.printStackTrace();
throw new WorkflowException("1018", se.getCause());
}
}
아래 runBuildScript 메소드의 구현 사례에서는, Ant 빌드 스크립트를 이용하여 오라클 bpelc
함수에 액세스하고 있습니다. runBuildScript 메소드는 Ant 프로젝트 파일을 호출하고, Ant 프로젝트
파일은 bpelc 함수를 호출하여 컴파일한 후 서비스 제공자의 BPEL 프로세스에 deploy합니다.
/**
* execute the ant script to build an Oracle BPEL process that implements the workflow.
* The script also deploys the workflow to the service domains.
* All input information is provided under the props at the input param.
* @param props Contain all necessary properties used to build/deploy the workflow BPEL process
* @throws WorkflowException
*/
private void runBuildScript(String buildFilename, Properties props) throws WorkflowException{
if(ml.isDebugEnabled())ml.debug("Enter runBuildScript(buildFileName = " + buildFilename +
", properties = ...");
try {
Project project = new Project();
project.init();
File buildFile = new File(buildFilename);
if (!buildFile.exists()) throw new WorkflowException("1015");
if(ml.isDebugEnabled()) ml.debug("ant build file: " + buildFile.getAbsolutePath());
ProjectHelper.configureProject(project, buildFile);
//prepare logger for the project build
PrintStream out = System.out;
BuildLogger logger = new DefaultLogger();
logger.setMessageOutputLevel(Project.MSG_DEBUG);
logger.setOutputPrintStream(out);
logger.setErrorPrintStream(out);
project.addBuildListener(logger);
//set project properties
Enumeration keys = props.keys();
while(keys.hasMoreElements()){
String key = keys.nextElement().toString();
project.setProperty(key, props.getProperty(key));
}
// test
//excute default target
project.executeTarget(project.getDefaultTarget());
if(ml.isDebugEnabled())ml.debug("Exit runBuildScript
(buildFileName = " + buildFilename +
", properties = ...");
}
catch (Exception ex) {
ml.error(ex.getMessage());
if(ml.isDebugEnabled()) ex.printStackTrace();
throw new WorkflowException("1002",ex.getCause());
}
}
웹 서비스 네트워크 설계시, BPEL 도메인을 사용하여 각 파트너를 위한 프로세스 설계 및 구축 플랫폼을 분리하는
방안을 검토할 필요가 있습니다. 그 몇 가지 응용 방법이 아래와 같습니다:
- 단일 Oracle BPEL Process Manager 인스턴스를
다수 개발자를 위한 환경으로 파티셔닝합니다. 이 경우, 도메인 ID는 각 도메인을 소유한 개발자를 구분하는
용도로 사용됩니다.
- 단일 Oracle BPEL Process Manager 인스턴스를 개발 환경 및 QA 환경으로 파티셔닝합니다.
이 경우, 도메인 ID는 “test”, “QA” 등으로 지정됩니다.
- 단일 Oracle BPEL Process Manager 인스턴스를
여러 부서 또는 파트너가 사용하는 환경을 위해 파티셔닝합니다. 이 경우, 부서명 또는 파트너명이 도메인
ID로 사용됩니다.
중앙 서비스 레지스트리(service registry)의 생성. 네트워크 관계를
정의했다면, 파트너들이 서비스에 가입할 수 있는 환경이 마련된 셈입니다. 서비스의 배포 및 검색은 SOA 플랫폼에서
가장 핵심이 되는 기능의 하나입니다.
이 과정에서 파트너는 서비스에 관련된 모든 정보를 저장한 중앙 레지스트리(central registry)를
통해 서비스를 배포합니다. 중앙 레지스트리는 서비스의 재활용성을 높이고, 서비스를 찾는데 소요되는 시간과 노력을
절감하는 효과를 제공합니다. 중앙 레지스트리가 존재하지 않는 경우 서비스의 일관성과 단순성이 크게 저해될 수
있으며, 이로 인해 네트워크의 유연성과 개방성에 부정적인 영향을 끼칠 수 있습니다.
SSE 네트워크는 중앙 웹 서비스 리포지토리를 매우 중요하게 활용하고 있습니다. 파트너는 WSIL(Web
Services Inspection Language)를 이용하여 사용가능한 서비스를 검색합니다. 서비스
제공자는 해당 WSDL 파일을 선택함으로써 (다른 서비스 제공자가 배포한) 기존 웹 서비스를 재활용할 수
있습니다. 이 작업을 수행하려면 아래와 같이 Oracle BPEL Designer 툴의 UDDIProviderList.xml
설정 파일에 WS-Inspection URL(http://services.eoportal.org/inspection.wsil)을
추가해야 합니다.
<provider>
<description>ESA SSE Portal</description>
<type>wsil</type>
<inquiryURL>
http://services.eoportal.org/inspection.wsil
</inquiryURL>
</provider>
서비스 제공자의 Oracle BPEL Designer는 SSE 서버에 연결한 뒤, WS-Inspection
프로토콜을 이용하여 사용 가능한 서비스와 WSDL 파일을 찾습니다. WS-Inspection 서버에 연결되면,
그림 2와 같이 사용 가능한 서비스의 목록이 디스플레이 됩니다.
그림 2 사용 가능한 SSE 서비스의 목록
각각의 서비스에 대해서 WSDL 파일과 간단한 텍스트 설명이 제공됩니다. 또 WSDL 파일을 선택하면
해당 서비스의 파트너 링크가 추가됩니다. 구현된 프로세스 플로우는 BPEL 콘솔을 통해 SSE 포탈에 deploy됩니다.
(다음 버전의 SSE에서는, UDDI 레지스트리와 Oracle BPEL을 통합할 예정입니다. 새로 등록되는
서비스는, UDDI 레지스트리에도 자동으로 등록됩니다. 현재에는 WS-Inspection을 지원하는 툴만을
사용해야 하지만, 이러한 통합 환경에서는 외부 툴을 이용하여 서비스를 발견하는 것이 가능하게 됩니다.)
물론 서비스 리포지토리를 이용하지 않고도 SOA 환경을 구현하고 그 혜택을 누리는 것이 가능하지만, 장기적인
관점에서 리포지토리는 반드시 필요합니다. 서비스의 범위가 단일 프로젝트로 한정되는 경우라면 리포지토리 없이
아키텍처를 구성해도 큰 무리가 없을 것입니다. 하지만, 대부분의 엔터프라이즈 서비스는 지속적인 변화를 요구하는
다양한 서비스와 파트너로 구성되는 것이 일반적입니다.
셀프서비스 모니터링(self-service monitoring)의 제공.
다수의 파트너가 비즈니스 프로세스에 참여하는 협업 네트워크에서는, 비즈니스 프로세스의 KPI(key performance
indicator)와 SLA(service level agreement)를 연계하기 위한 모니터링 작업이
필수적으로 요구됩니다. (예를 들어, 네트워크에 가입한 파트너에게 2 시간 이내에 견적 요청을 승인할 것을
요구할 수 있습니다.) 비즈니스 프로세스의 모니터링을 통해, 특정 비즈니스 프로세스 인스턴스의 실행 시간이
얼마나 소요되었는지, 지연이 발생한 이유가 무엇인지, 향후에는 문제를 어떤 방법으로 해결할 수 있는지 등을
확인할 수 있습니다.
이러한 진단 기능은 파트너와 엔드 유저 모두에게 제공되어야 합니다. 셀프서비스 환경을 구현함으로써, 파트너와
엔드 유저들이 자신과 관련된 프로세스를 추적하고, 중앙집중적인 모니터링 프레임워크에 의해 감지된 문제를
자체적으로 해결할 수 있는 환경을 제공할 수 있습니다. Oracle BPEL Console은 비즈니스 프로세스의
모니터링, 디버깅을 위해 사용될 수 있습니다 (그림 3 참조).
ESA와 서비스 제공자는 BPEL 콘솔을 사용해서 BPEL 프로세스 인스턴스의 실행/완료 상황, 프로세스
인스턴스의 평균 실행 시간 (프로세스 내부의 시간 사용량을 분할한 리포트를 생성할 수도 있습니다), 프로세스
인스턴스의 감사 로그 등을 즉각적으로 확인할 수 있습니다.
그림 3 Oracle BPEL Console을 이용한 비즈니스 프로세스의 모니터링
또, 특정 서비스를 주문한 엔드 유저에게는 주문의 진행 상황을 추적할 수 있는 기능이 제공됩니다. 서비스 제공자는
BPEL 프로세스에 의미 있는 스코프 네임(scope name)을 설정하는 것이 권장됩니다. 포탈은 런타임
중에 IInstanceHandle.getStatus() API를 이용하여 현재 BPEL 스코프의 이름을 추출하고,
진행 상황을 엔드 유저에게 알리는 용도로 사용합니다.
스코프(scope)는 복잡한 비즈니스 프로세스를 분할하여 계층적으로 구조화하기 위한 모델입니다. 스코프는 액티비티의
“실행 컨텍스트(behavioral context)” 정보를 제공하기 위한 용도로 활용됩니다. BPEL 프로세스에
의미 있는 스코프 네임을 사용하는 경우, 파트너가 “short-lived” 또는 “long-lived” 비즈니스
프로세스의 상태를 추적하는 것이 가능해집니다.
getOrderSubstatus 메소드의 구현 예가 아래와 같습니다. 아래 메소드는 ESS 파트너가 bpel
파일에서 실행 중인 스코프의 이름을 이용하여 BPEL 프로세스의 현재 상태를 확인하는 기능을 제공합니다.
* call the Oracle BPEL API to get current status of the workflow instance, corresponding to
* the ordered supplied at the input
* @param ordered The order identified
* @param workflowId The workflow name (or Id) that is processing the order stage.
* Normally, there are two stages of an order: send(process)rfq and send(process) order
* @param domain The domain that the order workflow belongs to
* @param password The password used to login to the workflow domain
* @return the current status of the workflow instance - particularly,
* it is the name of the currentactive scope in the workflow BPEL file.
* @throws RemoteException
* @throws WorkflowException
*/
public String getOrderSubstatus(String ordered, String workflowId, String domain,
String password)
throws RemoteException, WorkflowException
{
if(ml.isDebugEnabled()) ml.debug("Enter getOrderSubstatus(ordered = " + ordered
+ ", workflowId = " + workflowId + ", domain = " + domain + ",
password = " + password);
String status = "";
try {
Locator locator = new Locator(domain, password);
IinstanceHandle instance = locator.lookupInstance(ordered + "_" + workflowId);
if( instance.isComplete() ) status = "Completed";
else status = instance.getStatus();
return status;
} catch (com.oracle.bpel.client.ServerException e) {
// TODO Auto-generated catch block
ml.error(e.getMessage());
if(ml.isDebugEnabled()) e.printStackTrace();
throw new WorkflowException("1016", e.getCause());
}
}
결론
ESA는 민첩성을 염두에 두고 전체 협업 네트워크를 설계하였습니다. 인터페이스 관계는 변경 및 진화가
용이하도록 유연하게 설계되었습니다. BPEL 도메인을 이용하여 독립적인 워크스페이스를 구성하고 서비스 제공자에게
극대화된 유연성을 제공하였습니다. 서비스 제공자는 네트워크의 안정성에 영향을 미치지 않고 자신의 비즈니스
프로세스를 수정할 수 있습니다. BPEL 스코프는 실행중인 프로세스의 상태를 세밀하게 추적하기 위한 용도로
활용됩니다. 서비스 제공자에게 필요한 BPEL 프로세스 플로우는 자동 생성됩니다. 이러한 모든 요인들이
보다 파트너 친화적인 네트워크를 구성하고 파트너의 초기 투자비용을 최소화하는데 기여하게 됩니다.
하지만 네트워크 설계에서 고려해야 할 요소는 이것만이 아닙니다. 분산 트랜잭션의 관리, 보안, 거래 파트너
관리 등의 문제는 여기에서 논의되지 않았습니다. B2B 네트워크의 규모가 성장함에 따라, BPEL은 프로세스
통합을 위한 핵심 요소로 활용되게 될 것입니다. 예를 들어, Oracle BPEL Process Manager와
호환하는 Oracle Integration B2B 솔루션은 퍼블릭 프로세스의 연동, 핸드쉐이크 프로토콜
지원(MIME, SMIME, AS2, XMLDSig), 거래 파트너 관리(non-repudiation,
SLA, 파트너 동의서 등) 등의 문제를 해결하는데 이용될 수 있습니다.
Yves
Coene은 현재 브뤼셀에 위치한 Spacebel s.a의 프로젝트 관리자로 근무하고 있습니다. 지난 15년
간에 걸쳐, 그는 Ariane 5, International Space Station, F16 MLU 등 European
Space Agency의 다양한 우주항공 소프트웨어 프로젝트에 참여해 왔습니다. 2001년 이후로 그의 팀은
이탈리아 프라스카티의 ESA를 위한 SSE 프로젝트를 책임지고 있습니다.
Hoa Nguyen은 브뤼셀 Spacebel s.a.의 자회사인 SDC의 선임 소프트웨어로 근무하고 있습니다.
그는 J2EE, 웹 서비스, BPEL을 이용한 워크플로우 관리 등을 주된 관심사로 하고 있습니다. 그는 2001년
이후로 Spacebel의 SSE 프로젝트 팀에서 핵심적인 역할을 수행해 왔으며, ESA의 SSE 소프트웨어
배포 및 온사이트 SEE 소프트웨어 설치를 책임지고 있습니다. 여러분의
의견을 보내 주십시오. |