董文莉 趙 懿
(華北計算技術研究所 北京 100083)
基于BPEL的一致性聲明文稿設計實現的研究
董文莉 趙 懿
(華北計算技術研究所 北京 100083)
基于BPEL(Business Process Execution Language)的服務組合是Web服務的發展方向。基于BPEL的一致性聲明文稿是基于BPEL的服務組合系統一致性測試內容和構造基于BPEL的服務組合系統測試用例的主要依據。基于一致性測試理論和BPEL/WSDL規范分析,研究基于BPEL/WSDL的各成分結構關系,提出基于BPEL的一致性聲明文稿。該文稿包含10類子文稿:流程支持文稿、合作伙伴鏈接支持文稿、服務組件支持文稿、變量支持文稿、相關集支持文稿、消息支持文稿、各種處理支持文稿、各種活動支持文稿、接口支持文稿、操作支持文稿。設計實現了文稿自動生成系統,用于自動生成基于BPEL的一致性聲明文稿。
服務組合 業務流程執行語言 Web服務描述語言 實現一致性聲明
基于BPEL[1]的一致性文稿通過提取BPEL規范中的各項測試需求產生,是基于BPEL服務組合較為標準、規范、完備的測試需求描述。基于BPEL的一致性文稿是驗證基于BPEL的服務組合系統符合既定BPEL規范程度的基礎,是形成基于BPEL的服務組合系統一致性測試內容和構造基于BPEL的服務組合系統測試用例的主要依據,是提高基于BPEL的服務組合系統一致性測試測試質量和基于BPEL的服務組合系統可信度的關鍵。
ITU-T提出了一致性測試方法和框架[2-4],發布了一致性聲明文稿需求和指南。基于CMIP[5]、SNMP[6]、CORBA[7]和XML[8-10],ITU-T/IETF都定義了相應的ICS文稿。目前的Web服務一致性測試研究中,文獻[11]研究分析了單個服務的一致性聲明文稿,然而Web服務的本質是模塊化動態組合的組件,對服務組合的研究是Web服務的一個重要方面和發展趨勢,對單個服務測試的相關研究無法滿足Web服務應用發展的需要。同時Web服務組合的分布、動態(綁定、組合等)、異構、松耦合、規范性、開放性、高度集成等特點,決定了基于BPEL服務組合的靈活性、動態性、規范性,及其一致性聲明文稿設計的難度和復雜性。
本文基于ITU-T一致性測試和一致性聲明文稿的相關定義和說明,通過對基于BPEL規范的服務組合的分析,在對BPEL及其相關WSDL(Web Services Description Language)[12]文法描述進行研究的基礎上,提出了基于BPEL服務組合的一致性聲明文稿,并設計實現了相關原型系統進行了實驗驗證。
BPEL及其引用(import)WSDL文檔定義了服務組合實例的詞匯表及其結構,使用BPEL/WSDL可以為基于BPEL的服務組合進行信息建模,從而為基于BPEL的服務組合測試提供了語法模式。BPEL/WSDL采用層層繼承/細化的方式來構造。BPEL/WSDL列出了可用于服務組合的合作伙伴鏈接、各種處理、各種活動、消息、變量、相關集、接口、操作、元素、屬性、類型、唯一性的定義及其相互關系。基于BPEL的服務組合的執行從流程開始,采用活動來描述服務組件的調用關系,活動的內容通過活動的子活動/事件、活動的調用服務、服務中的操作、操作輸入輸出消息層層展開,同時采用相關集correlationSets定義操作之間的消息調用關系,采用變量variables定義操作參數變量,采用元素、屬性、類型、唯一性細化變量variables的定義,形成多層繼承關系。忽略與基于BPEL的服務組合一致性測試文稿無關的結構,如documentation,BPEL結構(包含引用Web服務的WSDL)之間的包含關系在圖1中給出。基于BPEL的服務組合接口的ICS文稿(簡稱為BPICS)必須描述出圖1中的關系。
一致性聲明的目的就是使每一個一致性測試需求成為獨立問題,從而可以由被測用戶根據被測系統的實現情況作出清晰、明確的回答,所以基于BPEL服務組合一致性聲明文稿要盡可能的表達出細節的一致性需求,為此我們將服務組合層層展開,形成一棵繼承樹。

圖1 基于BPEL.的各成分結構關系圖
基于BPEL的ICS文稿包含一系列表格,表格中的通用項目主要有:索引/子索引、支持/不支持、補充信息。其中相對次序采用“索引/子索引”來表示,“索引/子索引”也包含了業務流程中各要素的相互關系。在“支持”項中,采用“Y”來表示該項內容被實現,“N”表示該項內容未實現,“-”表示該項內容不適用于本業務。補充信息又稱為額外信息,用來提供一些無法表述于其他項目同時對一致性測試比較重要的額內容。在填充信息時,用“*”表示在生成一致性聲明文稿時填寫的項目,用“○”表示被測試的用戶聲明的項目,“△”表示測試者填寫的項目。
基于和一致性測試理論,分析BPEL語法定義,我們提出的BPICS文稿主要包括10類子文稿:流程支持文稿、合作伙伴鏈接支持文稿、服務組件支持文稿、變量支持文稿、相關集支持文稿、消息支持文稿、各種處理支持文稿、各種活動支持文稿、接口支持文稿、操作支持文稿。BPEL和WSDL基于XML Schema來描述,BPEL和WSDL的XML Schema部分的一致性文稿(包括元素支持文稿、屬性支持文稿、類型支持文稿、唯一性支持文稿、可替換類型支持文稿和可替換元素支持文稿)我們已經完成標準制定,參見ITU-T M.3031定義[8-9],本文不再贅述。
2.1 流程支持文稿
基于BPEL的服務組合(process)的一致性測試是從流程開始的,服務組合由活動組成,活動一致性信息用服務組件支持文稿進行描述。基于一致性測試需求和流程聲明,服務組件支持如表1所示。其中“Identifier”欄標識文稿描述對象名字,本文稿中是流程的名字,后文中的“Identifier”欄有類似含義,不再贅述。

表1 流程支持文稿
2.2 合作伙伴鏈接支持文稿
我們采用合作伙伴鏈接partnerLink來定義服務組合和外部定義服務(外部WSDL)的關聯關系,其中myRole/parternerRole用于定義服務組合/外部服務的調用關系,“myRole”欄用于標識服務組合角色,“parternerRole”欄用于標識調用服務角色。portType用于指出外部服務類型。suppressJoinFailure用于定義是否抑制服務組合中的活動的 joinFailure 故障(有兩個選項可填:y/n),exitOnStandardFault用于定義標準故障時是否退出(有兩個選項可填:y/n),合作伙伴鏈接支持文稿如表2所示。

表2 合作伙伴鏈接支持文稿
2.3 服務組件支持文稿
服務組件支持文稿從屬于流程/服務組合持文稿,用來標識流程的不同服務組件。服務組件支持文稿如表3所示,其中“Category”欄有兩個選項可填:“activity”、“handler”。

表3 服務組件支持文稿
2.4 變量支持文稿
變量支持文稿用于描述BPEL中的變量(variable)一致化信息,變量支持文稿如表4所示,其中 “VarType”欄是變量的類型,“VarType-Name” 欄是變量的類型名,“From-spec”欄是變量的初始定義。

表4 變量支持文稿
2.5 相關集支持文稿
相關集支持文稿用于描述BPEL中的相關集(correlationSets)一致化信息,相關集支持文稿如表5所示,其中“Properties”欄是相關聯部分,“Initiate”欄是是否初始化該相關集,相關集的“property”和“propertyAlias” 的具體信息由其“property”和“propertyAlias”通過消息 Property支持文稿、消息propertyAlias 支持文稿來詳細展開。

表5 相關集支持文稿
2.6 消息支持文稿
BPEL采用屬性/屬性別名來實現不同消息及其部分(part)的共享,消息支持文稿共由三個文稿組成:消息message支持文稿、消息Property支持文稿和消息propertyAlias支持文稿。
消息message支持文稿用于描述BPEL中的消息message一致化信息,由主表和附表組成,其主表如表6所示,其中“type”欄用來標識消息類型,附表如表7所示。

表6 消息message支持文稿主表

表7 消息message支持文稿附表
消息Property支持文稿用于描述BPEL中的消息Property一致化信息,消息Property支持文稿如表8所示,其中“propertyType”欄是Property的類型,“propertyType-Name” 欄是Property的類型名。

表8 消息Property支持文稿
消息propertyAlias支持文稿用于描述BPEL中的消息propertyAlias一致化信息,消息propertyAlias支持文稿如表9所示,其中“propertyName”欄是Property的名字,“Type” 欄是propertyAlias的類型,“Type-Name”欄是propertyAlias的類型名,“Query”欄是對消息查詢標識以得到一個字段。

表9 消息propertyAlias支持文稿
2.7 各種處理支持文稿
各種處理支持文稿是對BPEL中定義的所有處理的y一致性信息的描述,它包括“范圍支持文稿”、“補償處理支持子表”、“錯誤處理支持子表”、“事件處理支持子表”、“終止處理支持子表”和“消息事件處理文稿”范圍支持文稿用于定義BPEL中的scope一致化信息,范圍支持文稿如表10所示,Isolated用于定義隔離性(有兩個選項可填:y/n),exitOnStandardFault定義同2.2節,messageExchange用于定義接收和回復的內部關聯,即消息交互。

表10 范圍支持文稿
補償(BPEL中的Compensation Handlers)處理支持文稿如表11所示。

表11 補償處理支持文稿
錯誤(BPEL中的Fault Handlers)處理支持文稿如表12所示,其中“Variable”欄是錯誤數據元素的標識,“VarType”欄是錯誤變量的類型,“VarType-Name” 欄是錯誤變量的類型名。

表12 錯誤處理支持文稿
事件(參見BPEL的event handler定義)處理支持文稿如表13所示,onMessage用于指出相關變量屬性的可選類型引起的活動,事件處理的消息事件、相關集、活動由其消息事件、相關集、活動支持文稿來詳細展開。

表13 事件處理支持文稿
終止(參見BPEL的Termination Handlers)處理支持文稿如表14所示。

表14 終止處理支持文稿
消息事件處理文稿
消息事件(onMessage)支持文稿如表15所示,其中“partnerLink”欄是要處理事件的合作伙伴連接名,“portType”欄是要處理事件的服務名。“operation”欄是要處理事件操作名。“variable”欄是要處理事件中操作的輸入變量名。“messageExchange”欄是消息活動關聯的元素能夠接收的消息名。消息事件的關聯集、子活動由其關聯集、子活動的支持文稿來詳細展開。

表15 消息事件支持文稿
onAlarm支持文稿如表16所示,其中,“duration / deadline”欄是持續時間或者等待時間點,“exprType”欄是表達式類型,有兩種,分別是“duration-expr”和“deadline-expr”,onAlarm的子活動由其子活動的支持文稿來詳細展開。

表16 onAlarm支持表格
2.8 各種活動支持文稿
各種活動支持文稿包括基本活動文稿(Receive支持文稿、Reply支持文稿、Invoke支持文稿、Assign支持文稿、Wait支持文稿、Empty支持文稿)和結構化活動文稿(Sequence支持文稿、Switch支持文稿、While支持文稿、Pick支持文稿、Flow支持文稿、Link支持文稿)。
receive支持文稿如表17所示,其中 “activityType”是該活動的類型名,即“receive”, “portType”欄是要receive要接收的操作的服務名,“operation”欄是要接收的操作名,“Variable/fromPart”欄是要receive中操作的輸入變量,“messageExchange”欄是receive關聯的元素能夠接收消息,“createInstance”欄是否要創建實例,后文中相關欄定義類似,不再贅述。

表17 receive支持文稿
reply支持文稿如表18所示,其中variable/ toParts”欄是要reply中操作的輸出變量名,“faultName”欄是reply活動的錯誤處理過程的名字。
invoke支持文稿如表19所示,其中“inputVariable/ toParts”欄是要invoke中操作的輸入變量名,“outputVariable/ fromParts”欄是要invoke中操作的輸出變量名。
Assign支持文稿如表20所示,其中,“from-spec”欄是源變量,“to-spec”欄是賦值目標變量,“keepSrcElementName”欄標識是否修改賦值目標元素名稱。

表18 reply支持文稿

表19 invoke支持文稿

表20 assign支持文稿
Wait支持文稿如表21所示,其中“duration/deadline”欄是持續時間或者等待時間點,exprType”欄是表達式類型,有兩種,分別是“duration-expr”和“deadline-expr”。wait的元素、屬性由其元素、屬性支持文稿來詳細展開。

表21 wait支持文稿
empty支持文稿如表22所示,empty的元素、屬性由其元素、屬性支持文稿來詳細展開。

表22 empty支持文稿
sequence支持文稿如表23所示,sequence的元素、屬性、子活動由其元素、屬性、子活動的支持文稿來詳細展開。

表23 sequence支持文稿
if/elseif/else活動的一致性描述包括if/elseif/else支持文稿和附表,分別如表24和表25所示,其中“condition”用來填寫要執行相關活動(表21中特指if/elseif/else) 的條件布爾表達式(后同)。if/elseif/else的元素、屬性、子活動由其元素、屬性、子活動的支持文稿來詳細展開。

表24 if/elseif/else支持文稿主表

表25 if/elseif/else支持文稿附表
while支持文稿如表26所示,while的元素、屬性、子活動由其元素、屬性、子活動的支持文稿來詳細展開。

表26 while支持文稿
repeatUntil支持文稿如表27所示,repeatUntil的元素、屬性、子活動由其元素、屬性、子活動的支持文稿來詳細展開。

表27 repeatUntil支持文稿
forEach支持文稿如表28所示,其中“parallel”欄是該活動中的分支是否并行執行,“startCounter”欄是forEach活動的開始計數,“finalCounter” 欄是forEach活動的結束計數,“completionCondition”欄是forEach活動的可終止數,“successfulBranchesOnly”欄是否所有范圍都要計數。forEach的元素、屬性、子活動、范圍(Scope)由其元素、屬性、子活動、范圍的支持文稿來詳細展開。

表28 forEach支持文稿
pick支持文稿如表29所示,其中“createInstance”欄是用來指出pick活動的是否創建實例,“fromParts”欄是pick活動的請求變量名稱。pick的onMessage元素、屬性、onAlarm由其onMessage、元素、屬性、onAlarm的支持文稿來詳細展開。

表29 pick支持文稿
link支持文稿如表30所示,link鏈接的活動由其鏈接的活動的支持文稿來詳細展開。

表30 link支持文稿
flow支持文稿如表31所示,其中“Sub-acitity”欄用于標識flow調用的活動,flow的子活動由其子活動的支持文稿來詳細展開。

表31 flow支持表格
2.9 接口支持文稿
接口(WSDL中的interface)支持文稿如表32所示,其中“extends”欄用來填入當前接口的直接父接口的名字,“styleDefault”欄是接口中操作的缺省類型定義。

表32 接口支持文稿
2.10 操作支持文稿
操作(BPEL中的operation)支持文稿如表33所示,其中“style”欄是操作的類型定義 ,“Pattern”欄是接口的調用模式,可以填寫“in-only”、“in-out”、“Out-in”、“out-only”。“wsdlx:safe”欄是用來聲明該操作是否不修改資源。

表33 操作支持文稿
為了提高從組織到分析BPEL的效率,并保證生成的ICS文稿的質量,我們設計并實現了基于BPEL服務組合ICS文稿自動生成系統。BPEL本身是一種形式化輸入的可執行的算法語言,其可計算性和合理的算法復雜滿足基于BPEL的服務組合一致性聲明文稿的自動生成的必要條件。BPEL采用XML語言來描述,XML的自描述性在提供了BPEL定義的靈活性同時決定了其相關文檔規模比較大,對其進行人工分析和生成ICS文稿工作量大,很難保證其質量和正確性,所以需要一種自動化的生成方法來實現基于BPEL的服務組合一致性聲明文稿的自動生成。
基于BPEL一致性聲明文稿自動生成系統如圖2所示。BPEL采用XML來描述,其一致性聲明文稿的生成與我們完成的基于DTD/Schema的一致性聲明文稿[9,11]類似,主要由XML解析器來完成,也包括三部分:前端編譯器,邏輯結構樹和后端編譯器組成[12-18]。

圖2 ICS生成系統結構圖
前段編譯器是一個BPEL編譯器,該編譯器基于XML。解析的過程是根據BPEL/WSDL文檔定義,實現流式文檔結構化。首先對輸入的BPEL/WSDL文檔進行詞法分析,識別出BPEL/WSDL文檔中的有意義的token。然后進行語法分析,分析token之間關系,判斷token之間關系的正確性。BPEL/WSDL采用XML描述,屬于上下文無關文法,可轉化為LL(K)文法,進行自定向下分析,生成語法樹。最后進行語義分析,整體把握,產生邏輯結構樹。為了快速提取BPEL/WSDL中的相關信息生成一致性文檔,分析結果采用hash索引技術,以利于一致性聲明系統信息提取。
邏輯結構樹定義了的對象和方法,實現對樹的節點信息進行的提取操作:1) process對象:是這棵邏輯結構數的頂層節點,是對整個BPEL文檔進行操作的入口。2) 節點對象是文檔中對象的映射,通過定級層次來反映了服務組合的結構,以及對象之間的繼承關系。3) 文本節點:是元素、屬性、消息、類型對象的子節點,是邏輯結構樹的葉子節點。讀取邏輯結構樹的獲取其名稱、屬性值,采用遍歷算法可遍歷/讀取子節點指針,從而支實現層層遍歷,獲取一致性信息。
在基于BPEL服務組合一致性聲明文稿生成中,首先訪問邏輯結構樹,獲取process指針,取得指針的屬性,然后采用廣度遍歷和深度遍歷相結合的方式,獲取子節點指針,查詢子節點,層層遍歷,構建生成一致性聲明文稿的二叉樹,提取這顆二叉樹上的信息操作,生成本文提出基于BPEL的服務組合ICS文稿。在不同的條件下,基于BPEL的服務組合,可有不同實現,采用配置文件,在后端編譯器中,設置相關控制信息于關鍵節點,可生成不同服務組合ICS文稿。測試的另一關鍵是測試用例,后端編譯器為測試用例自動生成提供相關API,支持基于BPEL服務組合測試用例自動生成。
基于BPEL的一致性聲明文稿是基于BPEL的服務組合系統一致性測試內容和構造基于BPEL的服務組合系統測試用例的主要依據,本文基于一致性需求,通過對BPEL文檔結構分析,探討并提出了基于BPEL的一致性聲明文稿,文稿覆蓋了基于BPEL規范的一致性測試項,文稿有利于基于BPEL規范的一致性測試的標準化和規范化。基于提出的文稿,我們設計實現了基于BPEL的一致性聲明文稿生成系統,可自動化基于BPEL的一致性聲明文稿生成。本文提出的文稿和自動生成系統已經成功應用于服務組合的測試中,以自動取款交易服務流程為例,輸入自動取款交易服務流程的BPEL/WSDL,可自動生成相應一致性聲明文稿,涵蓋了該服務流程中定義的流程、合作伙伴鏈接和所有的變量、消息、接口、操作及其語法細節等,驗證了所提文稿的可行性、有效性。同時,在文稿的設計研制過程中,對BPEL的語法特征和內容結構進行了系統的分析梳理,嘗試了分析BPEL、解析BPEL的方法,為基于BPEL服務組合應用的提供了一種可行的分析存取模式。
[1] IBM.Business process execution language for Web Service, version 1.1.2003[S/OL].2003.http://www-106.ibm.com/developerworks/library/ws-bpel/.
[2] ITU-T Rec. X.291, OSI Conformance Testing Methodology and Framework for Protocol Recommendations for ITU-T Aplications-Implementation Conformance Statement [S].ITU-T,1995.
[3] ITU-T Rec. X.296--1995, Implementation Conformance Statement Requiremnt and Guidance on ICS and ICS Proforma [S].ITU-T,1995.
[4] ITU-T Rec. X.290-1995, OSI Conformance Testing Methodology and Framework for Protocol Recommendations for ITU-T Applications-General Concept[S].ITU-T,1995.
[5] ITU-T Rec. X.724-1996, Requirements and Guidelines for Implementation Conformance Statement Proformas Associated with OSI Management [S].ITU-T,1995.
[6] IETF RFC 2580 Conformance Statements for SMIv2[S].IETF,1999.
[7] ITU-T Rec. X.781-2001, Requirments and Guidelines for Implementation Conformance Statement Proformas Associated with CORBA-Based Systems [S].ITU-T,2001.
[8] ITU-T Rec.M.3031.Guidelines for Implementation Conformance Statement proformas for tML Schemas [S].ITU-T,2004.
[9] Dong Wenli,Meng Luoming.tML Schema Based ICS Proforma and Generation Method[J].Chinese Journal of Electronics,2005,14(4):681-685.
[10] 董文莉,孟洛明,邱雪松,等.基于文檔類型定義的實現一致性聲明文稿及生成方法[J].通信學報,2005(2):38-44.
[11] 翟小東.WSDL實現一致性聲明文稿的設計與實現[D].北京:北京郵電大學,2009.
[12] 王龍.基于WSDL擴展的Web服務組合研究與實現[D].上海:復旦大學,2013.
[13] 高榮.基于Scrapy和casperjs的電子商務網站信息采集系統研究[J].數字技術與應用,2015(3):67-68.
[14] 湯瀑.物聯網服務組合與驗證的研究[D].上海:復旦大學,2013.
[15] 袁婷.RESTful Web服務的形式化建模與分析[D].上海:華東師范大學,2015.
[16] 羅程多.RESTful服務語義解析和標注功能的設計與實現[D].北京:北京郵電大學,2014.
[17] 劉鵬.BPEL語言的語義連接理論和驗證技術的機器實現[D].上海:華東師范大學,2013.
[18] 孟若.基于AOP的Web服務演化方法[D].武漢:武漢工程大學,2015.
RESEARCH ON THE DESIGN AND IMPLEMENTATION OF THE ICS PROFORMA BASED ON BPEL
Dong Wenli Zhao Yi
(NorthChinaInstituteofComputingTechnology,Beijing100083,China)
Service composition based on BPEL is the development direction of Web services. BPEL-based ICS is the main basis of service composition system consistency test content based on BPEL and the construction of test case of BPEL-based service composition system. Based on the theory of conformance testing and BPEL/WSDL specification analysis, this paper studies the structural relationship of each component based on BPEL/WSDL and presents ICS proforma based on BPEL. The proforma contains 10 sub-proformas: process support proforma, partnerLink support proforma, service composite support proforma, variables support proforma, correlationSets support proforma, message support proforma, handler support proforma, activity support proforma, interface support proforma, operation support proforma. This paper designs and implements a proforma automatic generation system for automatically generating ICS proforma based on BPEL.
Service composition BPEL Web service description language ICS Logical structure tree
2016-06-24。國家自然科學基金面上項目(61071077);國家科技支撐項目(2013BAK06B03)。董文莉,高工,主研領域:服務架構,軟件測評,計算機仿真,大數據。趙懿,工程師。
TP391
A
10.3969/j.issn.1000-386x.2017.05.002
邏輯結構樹