陳 龍 蘇厚勤
(東華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 上海 200051)
?
BPEL文檔基于DAG自動(dòng)生成框架的研究與實(shí)現(xiàn)
陳龍?zhí)K厚勤
(東華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院上海 200051)
摘要針對(duì)目前服務(wù)之間組合的復(fù)雜性,提出一種基于有向無環(huán)圖的業(yè)務(wù)流程執(zhí)行語言文檔生成框架。通過對(duì)框架模型的解析,提出一種能夠自動(dòng)生成服務(wù)組合所需各種文檔的改進(jìn)框架及其算法,有效地隱藏了專業(yè)的業(yè)務(wù)流程執(zhí)行語言知識(shí)和繁瑣的服務(wù)組合流程。實(shí)踐表明,該框架簡單、易用,不僅能夠清楚地反應(yīng)服務(wù)組合之間的流程,而且還不需要BPEL專業(yè)方面的知識(shí),減少了服務(wù)組合的工作量。
關(guān)鍵詞業(yè)務(wù)流程執(zhí)行語言Web服務(wù)服務(wù)組合有向非循環(huán)圖
0引言
由于Web服務(wù)具有跨平臺(tái)、跨語言和低耦合等應(yīng)用特性,使得Web服務(wù)技術(shù)已經(jīng)成為解決企業(yè)集成、組件復(fù)用問題的一種重要方法[1]。實(shí)際業(yè)務(wù)環(huán)境中,單個(gè)Web 服務(wù)的功能是特定的,為了滿足快速發(fā)展的業(yè)務(wù)需求,需要對(duì)Web 服務(wù)進(jìn)行組合。2002年7月在BEA、IBM和微軟的努力下,發(fā)布了業(yè)務(wù)流程執(zhí)行語言(BPEL)來解決Web 服務(wù)集成問題。在實(shí)踐中一般使用BPEL設(shè)計(jì)器來編寫B(tài)PEL文檔。目前市場(chǎng)上有許多BPEL設(shè)計(jì)器,如Eclipse 的BPEL插件、Oracle的BPEL Process Manager以及Active Endpoints的 Active BPEL等[2]。這些設(shè)計(jì)器都是圖形化操作,通過手工拖動(dòng)組件設(shè)計(jì)業(yè)務(wù)流程,生成Web 服務(wù)組合需要的文檔。但是使用這些BPEL設(shè)計(jì)器需要相關(guān)的Web服務(wù)和BPEL知識(shí),并且創(chuàng)建組合服務(wù)的過程非常繁瑣。目前針對(duì)Web服務(wù)組合建模并自動(dòng)生成BPEL的研究已有一定的成果,如文獻(xiàn)[3,4]采用的是Petri 網(wǎng)模型來對(duì)服務(wù)組合建模。文獻(xiàn)[5]使用有限自動(dòng)機(jī)來對(duì)服務(wù)組合建模。但是這兩種建模方式可讀性比較差。有向圖模型的建模過程簡單并且模型流程清楚。文獻(xiàn)[2]給出了一種基于有向無環(huán)圖的自動(dòng)生成組合文檔的原型框架,但是此原型框架沒有控制流程且組合的活動(dòng)不能并行執(zhí)行。由于在BPEL2.0規(guī)范中有
1BPEL元模型
BPEL是一種使用XML編寫的業(yè)務(wù)流程執(zhí)行語言,主要用來對(duì)Web 服務(wù)進(jìn)行編制,組合成大粒度的服務(wù)以滿足復(fù)雜的業(yè)務(wù)需求[6]。BPEL定義了一些元素標(biāo)簽用來描述服務(wù)組合流程的消息流、控制流、數(shù)據(jù)流和伙伴會(huì)話的通道。消息流部分使用
圖1 BPEL 2.0元模型的UML視圖
2Web服務(wù)組合工作流建模
DAG模型的建模過程簡單、描述內(nèi)容豐富,廣泛應(yīng)用于描述業(yè)務(wù)流程,已成為流程工業(yè)系統(tǒng)建模的主要建模方法之一[8]。鑒于DAG建模的簡單性,采用DAG對(duì)服務(wù)組合工作流進(jìn)行建模,并稱這種模型為服務(wù)組合DAG(SCDAG)。一個(gè)SCDAG主要由3部分組成:開始和結(jié)束節(jié)點(diǎn)、伙伴節(jié)點(diǎn)以及節(jié)點(diǎn)之間的連接。
2.1開始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)
開始節(jié)點(diǎn)是流程的開始,用來接收整個(gè)流程的輸入?yún)?shù),并說明開始調(diào)用流程,對(duì)應(yīng)BPEL文檔中的
圖2 SCDAG模型圖
2.2伙伴節(jié)點(diǎn)
伙伴節(jié)點(diǎn)和BPEL文檔中的
2.3連接
連接是用來連接節(jié)點(diǎn)之間的弧,并且弧是有方向的?;〉姆较虮硎净顒?dòng)調(diào)用的順序,并且也表示一種依賴關(guān)系,只有當(dāng)該節(jié)點(diǎn)父節(jié)點(diǎn)全部執(zhí)行完,該節(jié)點(diǎn)才能被調(diào)用。一般在連接中會(huì)傳遞一些服務(wù)調(diào)用的變量參數(shù)和一些條件選擇信息。節(jié)點(diǎn)之間是通過連接串連一起的,節(jié)點(diǎn)間是選擇執(zhí)行還是并行執(zhí)行都可以通過連接來傳遞。SCDAG中有3種類型的連接,分別是順序連接、并行連接和帶有條件選擇的連接。順序連接只是表明節(jié)點(diǎn)之間的依賴關(guān)系。并行連接和條件選擇連接除了有依賴關(guān)系還有其他特性。并行連接表明有唯一相同父節(jié)點(diǎn)的節(jié)點(diǎn)可以并行執(zhí)行,如圖3所示的?節(jié)點(diǎn)有兩個(gè)并行執(zhí)行節(jié)點(diǎn)?和。條件選擇連接和高級(jí)語言中的選擇判斷語句相似,只有條件滿足時(shí),被指向的分支才能夠執(zhí)行。其中順序連接和并行連接使用實(shí)線有向弧表示,在代碼生成時(shí),通過模型上下文來區(qū)分是哪種連接。條件選擇連接使用虛線有向弧表示,如圖2所示。
圖3 SCDAG并行模型圖
3Web服務(wù)組合文檔的生成
Web服務(wù)組合時(shí)會(huì)涉及到3個(gè)文檔,分別是Web服務(wù)描述語言WSDL(Web Services Description Language)文檔、BPEL文檔、Deploy發(fā)布文檔。其中WSDL是Web服務(wù)的描述文檔,為用戶提供詳細(xì)的接口說明書。BPEL文檔是描述Web服務(wù)組合之間業(yè)務(wù)流程的文檔。Deploy發(fā)布文檔用來發(fā)布新集成的服務(wù)。由于這3個(gè)文檔都使用XML語言描述,可以采用開源的XML解析框架DOM4J來生成和解析這些XML文檔。其中WSDL文檔和Deploy文檔的結(jié)構(gòu)比較固定且內(nèi)容簡單,容易生成,這里不再贅述。
3.1生成BPEL文檔算法選擇
對(duì)于有向無環(huán)圖的遍歷方法,主要有廣度優(yōu)先遍歷和深度優(yōu)先遍歷。但是在SCDAG模型中,節(jié)點(diǎn)之間是有依賴的。如圖2所示,c節(jié)點(diǎn)指向e節(jié)點(diǎn),那么e節(jié)點(diǎn)就依賴c節(jié)點(diǎn)。如果想要遍歷e節(jié)點(diǎn),必須當(dāng)e的前驅(qū)節(jié)點(diǎn)c、d、b都被執(zhí)行后才能遍歷e節(jié)點(diǎn)。所以一般的廣度和深度優(yōu)先遍歷不能滿足對(duì)SCDGA模型的遍歷。對(duì)于這種有依賴關(guān)系的遍歷,可以采用基于一種依賴的遍歷方法,具體在3.3節(jié)予以描述。
3.2并行和條件選擇設(shè)計(jì)
BPEL使用
在SCDGA中,使用條件選擇連接控制活動(dòng)分支的選擇。每一個(gè)條件選擇連接都有一個(gè)判斷條件,當(dāng)條件為真時(shí),則會(huì)執(zhí)行該分支。
3.3整體設(shè)計(jì)和算法實(shí)現(xiàn)
如果把BPEL文檔中的服務(wù)之間調(diào)用看成一個(gè)整體,那么BPEL文檔結(jié)構(gòu)是比較固定的,可以采用生成器模式來設(shè)計(jì)。圖4是框架的整體實(shí)現(xiàn),BpelBulider定義了BPEL文檔主要結(jié)構(gòu)的接口,BpelBuliderImpl是接口實(shí)現(xiàn)。Edge表示連接,Vertex表示伙伴節(jié)點(diǎn),Graph表示SCDAG模型。
圖4 框架實(shí)現(xiàn)類視圖
在對(duì)SCDAG模型進(jìn)行遍歷生成BPEL文檔前,應(yīng)該保證SCDAG是一個(gè)無環(huán)的并且沒有孤立節(jié)點(diǎn)的有向圖,這兩點(diǎn)也比較容易實(shí)現(xiàn)。在DAG中,若從節(jié)點(diǎn)i到節(jié)點(diǎn)j有一條有向路徑,那么就說節(jié)點(diǎn)j依賴節(jié)點(diǎn)i,i是j的入度節(jié)點(diǎn),j是i的出度節(jié)點(diǎn)。在對(duì)DAG進(jìn)行依賴遍歷時(shí),如果遍歷i節(jié)點(diǎn),必須把i的依賴節(jié)點(diǎn)全部遍歷后才能遍歷i節(jié)點(diǎn)。由于BPEL標(biāo)簽可以嵌套,是有層次結(jié)構(gòu)的,那么在生成BPEL標(biāo)簽時(shí)也是分層次。如果節(jié)點(diǎn)i有一個(gè)出度節(jié)點(diǎn)j,那么節(jié)點(diǎn)i和節(jié)點(diǎn)j生成的BPEL標(biāo)簽是同一層次;如果節(jié)點(diǎn)i有多個(gè)出度,那么出度節(jié)點(diǎn)的生成標(biāo)簽在i后面的
算法1依賴遍歷算法
輸入?yún)?shù)v表示當(dāng)前要遍歷的節(jié)點(diǎn),f是節(jié)點(diǎn)v的一個(gè)入度節(jié)點(diǎn),e當(dāng)前XML標(biāo)簽。
void genBpel(v,f, e)
{
if(v的入度節(jié)點(diǎn)還有沒訪問的) return;
v.visit = true;
//標(biāo)記當(dāng)前節(jié)點(diǎn)已訪問
type = 節(jié)點(diǎn)f到節(jié)點(diǎn)v的連接類型;
if(v有多個(gè)入度節(jié)點(diǎn))
{
commFather=lastCommonFather(v);
//算法下面給出
e = 獲取節(jié)點(diǎn)commFather對(duì)應(yīng)同一層級(jí)的XML標(biāo)簽;
}
if(type == IF連接)
e = 生成BPEL的IF標(biāo)簽;
else If(type == Flow類型連接)
e = 生成BPEL的Flow標(biāo)簽;
生成節(jié)點(diǎn)v的活動(dòng)調(diào)用標(biāo)簽invoke;
For(v的出度節(jié)點(diǎn)v1…vn)
{
生成節(jié)點(diǎn)v到出度節(jié)點(diǎn)vi的參數(shù)賦值標(biāo)簽Assign;
genBpel(vi,v,e);
} }
算法2最近公共父節(jié)點(diǎn)算法
在調(diào)用算法前,先把v的入度節(jié)點(diǎn)放入集合set中。對(duì)DAG進(jìn)行深度優(yōu)先遍歷,如果節(jié)點(diǎn)在set集合中則返回,當(dāng)遞歸節(jié)點(diǎn)w的出度節(jié)點(diǎn)有返回多個(gè)不同的值時(shí),則說明要找的節(jié)點(diǎn)分布在以w出度節(jié)點(diǎn)為根子圖中,這時(shí)遞歸函數(shù)返回w。輸入?yún)?shù)root為DAG根節(jié)點(diǎn)S。
Node lastCommonFather(root)
{
If(root == null) return null;
If(root 在集合set中)
{
return root;
}
node = v;
int cnt = 0;
for(root出度節(jié)點(diǎn)child1…childn)
{
nodei = lastCommonFather(childi);
if(nodei != null&& node !=nodei)
{
cnt ++;
//簡單記錄nodei是否多于2個(gè)
node = nodei;
}
}
If(cnt >=2) return root;
Else if(cnt == 1) return node;
Else return null;
}
4原型系統(tǒng)搭建及驗(yàn)證
用戶通過使用UML建模工具Enterprise Architect建立服務(wù)組合流程,并生成相應(yīng)的XML文檔,系統(tǒng)對(duì)XML文檔解析建立SCDAG模型。然后系統(tǒng)再讀取伙伴服務(wù)的WSDL文檔,提取相關(guān)信息生成組合服務(wù)的WSDL文檔,結(jié)合SCDAG模型生成BPEL文檔和服務(wù)發(fā)布文檔。把生成的文檔放入BPEL引擎中進(jìn)行發(fā)布。系統(tǒng)使用的是Apache 基金下的開源項(xiàng)目Apache ODE作為BPEL執(zhí)行引擎。
圖5 服務(wù)組合工作流程圖
當(dāng)把生成的文檔在ODE引擎中發(fā)布后,可以調(diào)用新的組合服務(wù)。使用SoapUI對(duì)組合服務(wù)進(jìn)行測(cè)試,圖6是調(diào)用組合服務(wù)的往返soap消息,其中左邊是發(fā)送的soap消息,右邊是返回的soap消息。
圖6 服務(wù)調(diào)用時(shí)的往返SOAP消息
5結(jié)語
針對(duì)目前服務(wù)之間組合的復(fù)雜性,提出了一種基于DGA的BPEL文檔生成框架。通過對(duì)框架模型的解析,能夠自動(dòng)生成服務(wù)組合時(shí)所需要的各種文檔,有效地隱藏了專業(yè)的BPEL知識(shí)和繁瑣的服務(wù)組合流程。實(shí)踐表明,該框架簡單易用,不僅能夠清楚地反應(yīng)服務(wù)組合之間的流程而且還不需要BPEL專業(yè)方面的知識(shí),減少了服務(wù)組合的工作量。
實(shí)驗(yàn)驗(yàn)證表明該框架是可行的,但是該框架還不夠完善。雖然框架解決了伙伴服務(wù)的并行調(diào)用,但是沒有把融入并行處理中。框架還應(yīng)該增加對(duì)BPEL的故障異常處理的支持。
參考文獻(xiàn)
[1] 岳昆,王曉玲,周傲英.Web服務(wù)核心支撐技術(shù):研究綜述[J].軟件學(xué)報(bào),2004,15(3):428-442.
[2] 崔福東,喬彥友,常原飛.基于BPEL的Web服務(wù)快速組合框架[J].計(jì)算機(jī)工程,2010,36(7):262-264.
[3] 劉賢,李建華,李向,等.基于擴(kuò)展同步Petri網(wǎng)的BPEL建模[J].計(jì)算機(jī)工程,2011,37(2):57-60.
[4] 杜彥華,范玉順,李喜彤.基于模塊化可達(dá)圖的服務(wù)組合驗(yàn)證及BPEL代碼生成[J].軟件學(xué)報(bào),2010,21(8):1810-1819.
[5] 于守健,李衛(wèi)民,吳國文,等.BPEL中基于有限狀態(tài)自動(dòng)機(jī)的Web服務(wù)自動(dòng)組合[J].小型微型計(jì)算機(jī)系統(tǒng),2007,28(4):742-747.
[6] 丁兆青,董傳良.基于SOA的分布式應(yīng)用集成研究[J].計(jì)算機(jī)工程,2007(10):246-248.
[7] 鐵威,黃志球,王進(jìn).基于BPEL的RESTful Web服務(wù)異步交互及組合研究[J].計(jì)算機(jī)工程與科學(xué),2013,35(4):29-36.
[8] 韓中,高建民,陳富民,等.面向?qū)ο蟮牧鞒坦I(yè)系統(tǒng)有向無環(huán)圖建模[J].計(jì)算機(jī)工程,2009,35(8):23-25.
RESEARCH AND IMPLEMENTATION OF DAG-BASED AUTOMATIC BPEL DOCUMENT GENERATION FRAMEWORK
Chen LongSu Houqin
(SchoolofComputerScienceandTechnology,DonghuaUniversity,Shanghai200051,China)
AbstractWe proposed a DAG-based framework of Business Process Execution Language document generation for the complexities of compositions among current services. By resolving the framework model, we presented an improved framework, which can automatically generate various documents required for service compositions, and its algorithm, the professional knowledge of Business Process Execution Language and complex service composition processes are effectively hidden. Practice indicated that the framework was simple and easy to apply, the process among service compositions could be clearly reflected, and there was no need of professional knowledge of Business Process Execution Language as well, this reduced the work quantity for service compositions.
KeywordsBusiness Process Execution Language (BPEL)Web serviceService compositionDirected acyclic graph(DAG)
收稿日期:2014-11-14。陳龍,碩士生,主研領(lǐng)域:Web服務(wù)。蘇厚勤,教授級(jí)高工。
中圖分類號(hào)TP393
文獻(xiàn)標(biāo)識(shí)碼A
DOI:10.3969/j.issn.1000-386x.2016.05.022