當前位置:工程項目OA系統(tǒng) > 泛普各地 > 江蘇OA系統(tǒng) > 南京OA系統(tǒng) > 南京OA快博
SOA:BPEL的基本思想
許多開發(fā)人員覺得BPEL很神秘,不知道到底是什么意思。主要是因為它是根據(jù)很抽象的基于WSDL的Web Service再定義一些抽象執(zhí)行的流程。
其實BPEL一點都不神秘,是一個很簡單的東西。
首先談一下BPEL和WSDL的區(qū)別,WSDL只是定義接口參數(shù),不會定義如何實現(xiàn)接口,而BPEL不僅有自己的接口定義(也是一個WSDL文件,包括輸入?yún)?shù)、方法操作名、返回參數(shù)),BPEL會定義如何調用其他服務的接口來實現(xiàn)自己的接口。簡單地說,BPEL通過流程編程將各種接口組合在一起,其目的在于提供一個“集成了各種接口”的接口。
首先BPEL會有一個起點和終點。
1、它的起點就是“receive”,也就是接收它自己接口的輸入?yún)?shù)。
2、它的終點就是“reply”,也就是得到它自己接口的返回參數(shù)。
整個BPEL就是定義如何通過它的接口輸入?yún)?shù),調用其他外部服務的接口,得到其接口的返回參數(shù)。
它最重要的是兩個定義:
1、一個是賦值命令(Assign/Copy),通過賦值命令將某一變量值賦給所要調用的接口的輸入?yún)?shù)。
2、另一個是調用命令(Invoke),通過Invoke命令來調用外部服務。
另外一個比較重要的就是條件命令(Case Condition),根據(jù)變量的不同來定義各種條件,然后根據(jù)各種條件來調用不同的服務。這些變量可以來自于輸入?yún)?shù),也可以來自于調用外部服務的結果。作為BPEL運行環(huán)境的一個重要功能就是能夠保存并查詢到這些變量。
用Java實例模擬BPEL的創(chuàng)建過程
這里用一個簡單的實例來進一步說明BPEL的基本思想和核心本質,并用Java實例來模擬BPEL的創(chuàng)建過程。
首先假定已經(jīng)有了兩個Web Service,一個為“加法服務”,專門處理兩個數(shù)相加,名為AddService;另外一個為“減法服務”,專門處理兩個數(shù)相減,名為SubtractService。
現(xiàn)在有一個新的需求,需要將上面兩個Web Service集成起來,也就是需要創(chuàng)建一個新的服務,稱為“運算服務”,名為CaculatorService,它有一個運算類型的參數(shù),當運算類型為“加法”時,調用加法服務,當運算類型為“減法”時,調用減法服務。
看到這里,讀者可能會想,直接寫一個Java程序,調用者兩個Web Service不就可以了嗎?筆者的回答是:直接用Java編程當然可以,事實上現(xiàn)在大家就是這么做的。但是Java本質上是一種具體的程序語言,只能運行于JVM的Java運行環(huán)境,不是一種抽象性的通用的標準語言,而BPEL是一種標準化的執(zhí)行語言,如何能夠真正運行BPEL不是它所關心的事情,它還需要各個廠商去開發(fā)自己的BPEL運行環(huán)境,盡管各個廠商所開發(fā)的BPEL的運行環(huán)境可能會不一樣,但是同一個BPEL所開發(fā)的程序,應該可以運行于這些不同的BPEL運行環(huán)境,得到的結果應該是一樣的。就像Web Service的WSDL文件一樣,它只管如何定義服務、服務接口、服務操作、服務參數(shù)等,如何具體實現(xiàn)Web Service不是WSDL所要關心的事情。
下面繼續(xù)前面的實例,兩個Service都會有自己的WSDL定義。下面用實際的Java語言來類似地描述一下,以便于理解。
下面的AddService .java相當于AddService.wsdl(用Java的Interface可能更貼切一點,用Java的class可以說明得更詳細一點)。
Public class AddService{
Public double add(double addParameter1, double addParameter2) {
Double addResposne;
addResposne = addParameter1 +addParameter2;
// WSDL 不會定義具體如何實現(xiàn),
//此處只是說明如何實現(xiàn)操作
Return addResponse;
}
}
下面的SubstractService .java相當SubstractService.wsdl。
Public class SubstractService{
Public double substract(double substractParameter1, double substractParameter2) {
Double substractResposne = substractParameter1 - substractParameter2;
Return substractResposne;
}
}
下面用Java模擬BPEL的創(chuàng)建過程。
首先需要創(chuàng)建BPEL的接口,下面用CaculatorBPELInterface.java來說明,它將有3個參數(shù),其中paramter1和paramter2是需要運算的兩個數(shù),第3個參數(shù)processType表示運算的類型。 Public Interface CaculatorBPELInterface{
Public double caculatorProcess(double parameter1, double parameter2, String processType) ;
}
下面將創(chuàng)建一個Java實現(xiàn)類,說明如何對應于BPEL的創(chuàng)建過程(許多語句(如一些變量定義和賦值定義)對Java來說是不必要的;為了模擬BPEL的創(chuàng)建過程,讓Java開發(fā)人員更好地把握BPEL的創(chuàng)建過程,相應地加入了這些程序語句)。 Public class CaculatorBPELImple implements CaculatorBPELInterface {
Public double caculatorProcess (double parameter1, double parameter2, String processType) {
//步驟1:定義所要調用的外部類(相當于定義BPEL里面partnerLink)
AddService addServer = new AddService();
SubstractService substractSevice = new SubstractService();
/*步驟2:定義輸入和輸出變量(相當于定義BPEL里面變量variable)
定義的變量如下:
● BPEL接口的輸入和輸出變量
● 所要調用的外部類的接口方法的輸入和輸出變量 */
//定義BPEL接口的輸入變量 Double caculatorProcessParameter1Request;
Double caculatorProcessParameter2Request;
Double caculatorProcessTypeRequest;
//定義BPEL接口的輸出變量
Double caculatorProcessResponse;
//定義加法服務的輸入變量
Double addParameter1Request;
Double addParameter2Request;
//定義加法服務的輸出變量
Double addResponse;
//定義減法服務的輸入變量
Double substractParameter1Request;
Double substractParameter2Request;
//定義減法服務的輸出變量
Double substractParameter1Response;
//***將請求參數(shù)賦值給BPEL接口的輸入變量 (相當于BPEL的receive)
caculatorProcessParameter1Request = parameter1;
caculatorProcessParameter2Request= parameter2;
Double caculatorProcessTypeRequest= processType;
//步驟3:定義條件,并調用外部接口
If (caculatorProcessTypeRequest.equals.(“add”’)
// (相當于BPEL的switch/condition/case)
{
//**下面將調用加法服務
//將接口請求變量傳給加法服務的請求變量 (相當于BPEL的assign/copy)
addParameter1Request = caculatorProcessParameter1Request;
addParameter2Request = caculatorProcessParameter2Request;
//調用addService的接口 (相當于BPEL的Invoke)
addResponse = addServer.add(addParameter1Request, addParameter2Request);
//將addResponse賦值給BPEL接口的輸出變量 (相當于BPEL的assign/copy)
caculatorProcessResponse = addResponse;
} else //(相當于BPEL的 condition/otherwise)
{
//將接口請求變量傳給減法服務的請求變量 (相當于BPEL的assign/copy)
substractParameter1Request = caculatorProcessParameter1Request;
substractParameter2Request = caculatorProcessParameter2Request;
//調用substractService的接口 (相當于BPEL的invoke)
substractResponse =
substractServer.substract(substractParameter1Request, substractParameter2Request);
//將substractResponse賦值給BPEL接口的輸出變量(相當于BPEL的assign/copy)
caculatorProcessResponse = substractResponse;
}
Return caculatorProcessResponse; //相當于BPEL的reply
}
}
用實例概述BPEL的創(chuàng)建過程
上面已經(jīng)用Java模擬了BPEL的創(chuàng)建過程。下面將基于同樣的實例,用描述性的WSDL和BPEL來實現(xiàn)其創(chuàng)建過程,使讀者對BPEL能有一個整體性的掌握。
假設已經(jīng)有了前面的加法服務和減法服務的WSDL文件,加法服務為AddService.wsdl,減法服務為Substract.wsdl,它們的主要內容如下所示: AddService.wsdl
|――getRequest (請求消息)
|――addParameter1(double)
|――addParameter2(double)
|――getResponse(返回消息)
|――addResponse(double)
|――addServcie(portType接口)
|――add(operation接口操作)
|――AddService(service 服務名稱)
substractService.wsdl
|――getRequest(請求消息)
|――subtractParameter1(double)
|――subtractParameter2(double)
|――getResponse(返回消息)
|――substractResponse(double)
|――substractService(portType接口)
|――substract(operation接口操作)
|――SubstractService(服務名稱)
下面需要為BPEL創(chuàng)建一個服務接口,caculator.wsdl如下:
caculatorService.wsdl
|――getRequest(請求消息)
|――parameter1(double)
|――parameter2(double)
|――processType (String)
|――getResponse(返回消息)
|――caculatorProcessResponse(double)
|――caculatorService(portType接口)
|――caculatorPorcess(operation接口操作)
|――CaculatorService(service 服務名稱)
下面介紹創(chuàng)建BPEL的基本過程,即caculatorServiceProcess.bpel(下面只是說明BPEL的創(chuàng)建過程,沒有完全按照BPEL的語法,具體的BPEL語法和BPEL編程實例后面會詳細介紹)。
1)創(chuàng)建變量
所定義的變量包括:
1、BPEL接口的輸入和輸出變量。
2、所要調用的外部服務partnerLink的接口操作的輸入和輸出變量。 variable name="request-bpel" messageType采用caculatorService/getRequest
variable name="response-bpel" messageType采用caculatorService/getResponse
variable name="request-add" messageType采用addService/getRequest
variable name="response-add" messageType采用addService/getResponse
variable name="request-substract" messageType采用substractService/getRequest
variable name="response-substract" messageType采用substractService/getResponse
BPEL定義變量的方式與Java是不一樣的,主要因為BPEL所調用的WSDL是XML語言上面的所定義的變量并不是對應一個具體的值,它實際上對應的是一個數(shù)據(jù)結構。
如caculatorService/getRequest 對應的是caculatorService.wsdl下面的
getRequest
|――parameter1(double)
|――parameter2 (double)
|――processType (String)
也就是說getRequest下面的所有參數(shù)都包含進去了。
2)創(chuàng)建接收
portType=" caculatorService " operation=" caculatorPorcess "
variable=" request-bpel " >
Receive是整個BPEL的起點,所定義的變量request-bpel從服務請求中得到賦值,整個后面的業(yè)務過程將以這個請求變量作為觸發(fā)點。
3)創(chuàng)建條件
程序將根據(jù)不同的條件調用不同的服務,所以先要設立各種條件:
condition="getVariableData('request-bpel','payload','getRequest/processType'>= 'add' >
… 調用加法服務
上面的程序表示在request-bpel的變量中取出路徑為getRequest/ processType所對應的變量值,如果滿足這個值為“add”的條件時,可以在里面加入程序,完成相應的任務。
…… 調用減法服務
如果上面的所有條件都不滿足時,可以在里面加入程序,完成默認的任務。
4)給所要調用的服務的請求變量賦值
為了調用外部服務,先要給外部服務賦值:
上面表示將BPEL過程所收到的初始變量賦給加法服務的請求變量。
5)調用外部服務 portType="addService" operation="add"
inputVariable=" request-add"
outputVariable="response-add" />
上面將會調用加法服務AddSerivce,其中request-add為輸入變量。
6)將服務的結果賦給BPEL的返回變量
在完成了外部服務的調用之后,就可以將外部服務的輸出結果賦給BPEL流程的返回變量。文法同步驟4。
7)調用
調用BPEL的reply命令,將BPEL流程的返回變量返回給服務請求者。 portType=" caculatorService" operation="caculatorPorcess"
variable=" response-bpel" />
這里比較一下步驟2的和步驟6的,可以看到它們的partnerLink的名字、portType的名字、operation的名字都是一樣的。它們是調用的同一個服務下面的同一個接口操作,只是兩個命令的變量不一樣。是收到請求消息的變量值,是將響應變量的結果返回給服務請求者。
事實上,BPEL運行環(huán)境執(zhí)行后,就在等待的返回結果。
上面通過實例介紹了BPEL的基本創(chuàng)建過程,有了這些基本的BPEL整體創(chuàng)建思路后,就可以為更好地理解一些具體的語法打下了基礎。(IT專家網(wǎng))
- 1SOA案例:汽車行業(yè)如何加速數(shù)據(jù)引擎
- 2工信部洪京一:數(shù)據(jù)中心需解的難題
- 3電子商務產生P2P互動營銷新模式
- 4SOA實施很大程度上依賴健全的治理體系
- 5泛普軟件(南京)發(fā)布企業(yè)OA協(xié)同辦公軟件發(fā)展趨勢
- 6OA辦公系統(tǒng)功能特性及應用特點
- 7無線安全解決方案
- 8SOA發(fā)展機遇與挫折同在
- 9引入SOA對流程進行更有效管控
- 10服務商瞄準中小企業(yè)IT需求
- 11oa辦公系統(tǒng)企業(yè)信息門戶解決方案
- 12BI陣營日益龐大 七大要素構建BI系統(tǒng)
- 13SOA架構的中間件產品意味什么
- 14供應鏈中夾縫求生 三個企業(yè)三臺戲
- 15企業(yè)BI系統(tǒng)標準化定義及效益
- 16CIO如何做好企業(yè)業(yè)務流程管理
- 17泛普OA協(xié)同辦公系統(tǒng)有什么特點呢?
- 18網(wǎng)格和網(wǎng)絡中心世界中的SOA服務
- 19復雜事件處理技術是推動SOA發(fā)展的引擎
- 20剖析企業(yè)信息化商業(yè)智能標準化定義及效益
- 21生產制造業(yè)OA辦公系統(tǒng)解決方案
- 22信息系統(tǒng)實施后的災難與風險防范
- 23計世獨家:信息化撬動“三大壓力”
- 24OA辦公系統(tǒng)功能特性有何不同
- 25SCM如何為企業(yè)信息化投資提供回報
- 26南京OA實務:如何解決插單帶來的影響
- 27將IT與業(yè)務融合 企業(yè)部署SOA得回報
- 28中小企業(yè)信息化建設需要信息安全防護體系
- 29計世獨家:中國IT安全企業(yè)集體呼救
- 30協(xié)同OA軟件文檔知識管理解決方案
成都公司:成都市成華區(qū)建設南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓