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