專利名稱:一種基于bpel的控制信息流圖的建模方法
技術領域:
本發(fā)明是一種基于BPEL控制信息流圖的建模方法,主要用于解決BPEL組合服務 回歸測試中的建模問題。
背景技術:
以服務計算為核心的服務科學是一門融合軟件信息技術和商業(yè)服務理念的綜合 性前沿學科,代表了軟件開發(fā)領域的最新研究成果和發(fā)展方向。服務計算以面向服務的體 系結構(SOA)為中心,以Web服務為主要實現形式,以服務組合為關鍵應用模式,服務良好 的復用性、靈活性和松耦合特征使得面向服務的計算成為一種具有里程碑意義的分布式計 算技術,也使組合服務的演化和維護呈現了新的規(guī)律。Web服務的高復用性以及用戶需求的不穩(wěn)定性決定了組合服務必然處于頻繁的變 動和演化之中,因此設計一個能夠適應組合服務特點的回歸測試系統十分必要。目前的研 究一般局限于流程的回歸測試,而組合服務是內部流程、外部接口與成員服務的統一體,成 員服務的替換以及接口的改變也是服務演化的重要內容。由于成員服務的實現存在差異, 服務的替換很可能引起組合服務功能偏離或運行失敗,所以綁定變換后的組合服務也必須 進行重新測試。因此,對組合服務的流程、接口、綁定和路徑條件的表示顯得尤為重要,如何 更完整有效地對組合服務進行建模是我們關注的問題。
發(fā)明內容
技術問題本發(fā)明的目的是提供一種基于BPEL的控制信息流圖的建模 (BPELControl and Messaging Flow Graph with,BCMFG)方法,以解決 BPEL 組合服務的建 模問題。較之其他的BPEL組合服務模型,該模型能對BPEL組合服務進行全面的回歸測試 變更影響分析,識別包括流程、綁定、接口、路徑條件在內的各種修改。技術方案本發(fā)明為實現上述目的,采用如下技術方案本發(fā)明一種基于BPEL的控制信息流圖的建模方法,其特征在于包括如下步驟步驟1)對BPEL文檔進行解析,生成DOM樹;步驟2)遍歷DOM樹結點,當遇到可以映射為BCMFG的DOM樹節(jié)點時,創(chuàng)建BCMFG 元素,并給BCMFG元素的域賦值;步驟3)利用BCMFG元素間的控制關系構建BCMFG模型;步驟4)根據BCMFG模型計算所有BCMFG路徑。2、根據權利要求1所述的一種基于BPEL的控制信息流圖的建模方法,其特征在于 步驟2)所述的給BCMRi元素的域賦值方法如下對DOM樹中的每個節(jié)點進行遍歷,b)若節(jié)點代表對伙伴鏈接partnerLink,則創(chuàng)建BCMFG元素m,m的Category域的 值設定為服務節(jié)點集SN,使用節(jié)點中相關屬性為m的Name域賦值;c)若節(jié)點代表基本活動invoke或receive或reply,則首先創(chuàng)建BCMFG元 素m,m的Category域的值設定為交互節(jié)點集IN,使用節(jié)點中相關屬性為m的Name域、partnerLink域、PortType域禾口 Operation域貝武值,并通過partnerLink域值搜索至Il與節(jié) 對應得服務節(jié)點s ;d)若節(jié)點代表基本活動assign,則創(chuàng)建BCMFG元素m,m的Category域值設定為 普通節(jié)點集NN,使用節(jié)點中相關屬性為m的Name域賦值,并通過e中的partnerLink屬性 值搜索到對應得服務節(jié)點s,利用e中的子元素endpoint為s的Endpoint域賦值;
e)若節(jié)點代表結構化活動If,則創(chuàng)建BCMFG元素H^m1的Category域值設定為單 選分支節(jié)點EDN,使用節(jié)點中相關屬性為Hi1的Name域和Condition域賦值,并處理If內部 的基本活動或結構化活動;當節(jié)點中含有子元素else if,則繼續(xù)處理子元素else if的內 部活動,在完成對所有子元素else if的處理后,創(chuàng)建BCMFG元素m2,m2的Category域值設 定為單選歸并節(jié)點EMN,使用節(jié)點中相關屬性為m2的Name域賦值,最后處理else的內部活 動,同時更新在之前處理if或else if所生成的所有BCMFG元素的Target域值;f)若節(jié)點代表結構化活動While或foreach,則分別創(chuàng)建BCMFG元素Hi1和m2,Hi1 的Category域值設定為單選分支節(jié)點EDN,m2的Category域值設定為單選歸并節(jié)點EMN, 使用節(jié)點中相關屬性為Hi1的Name域和Condition域及m2的Name域賦值;然后創(chuàng)建m2到 Hi1的控制邊ce,同樣利用e中相關屬性為H^rn2及ce的Target域和Source域賦值;g)若節(jié)點代表結構化活動R印eat-Until,則創(chuàng)建BCMFG元素Hi1 ,Hi1的Category域 值設定為單選分支節(jié)點EDN,使用節(jié)點中相關屬性為Hi1的Name域和Condition域賦值,然 后處理Itepeat-Until內的所有子活動%,i為大于1的自然數,記錄下其中首個活動m2,并 創(chuàng)建Hi1到m2的控制邊ce,再次利用e中相關屬性更新mi、m2及ce的Target域和Source 域;h)若節(jié)點代表結構化活動Pick,則創(chuàng)建BCMFG元素Hi1, Hi1的Category域值設定 為單選分支節(jié)點EDN,使用節(jié)點中相關屬性為Hi1的Name域賦值,對于〈onMessage〉中的每 個活動,創(chuàng)建BCMFG元素IV i為大于1的自然數,Hii的Category域值設定為交互節(jié)點IN, 同樣使用節(jié)點中相關屬性為Hii的PartnerLink域、PortType域和Operation域賦值,并通 過partnerLink域值搜索到對應得服務節(jié)點Si,創(chuàng)建從Si到Hii的控制邊Cei,并根據控制流 關系更新Hii、Si和Cei的Target域值及Source域值,對于<onAlarm>中的每個活動,創(chuàng)建 BCMFG元素πι」(j > max (i),max ()表示取最大值,即j從i+Ι開始依次取值),Hij的Category 域值設定為普通節(jié)點NN,同樣使用e中相關屬性為Ii^的Name域賦值,最后創(chuàng)建BCMFG元素 mk,(k > max(j),即k從j+Ι開始依次取值),mk的Category的域值設定為單選歸并節(jié)點 EMN ;i)若節(jié)點代表結構化活動Flow,則創(chuàng)建BCMFG元素Hi1和m2,Hi1的Category域值 設定為并發(fā)分支節(jié)點CBN,m2的Category域值設定為并發(fā)歸并節(jié)點CMN,使用節(jié)點中相關屬 性為Hi1的Name域和m2的Name域賦值。有益效果本發(fā)明BPEL組合服務映射為富含信息的基于BPEL的控制信息流圖模 型,在表達順序、選擇、并發(fā)、循環(huán)等多種控制結構以及流程與成員服務消息交互行為的同 時,向元素中添加綁定信息和謂詞約束信息,用于控制流分析、變更的識別、路徑的比較以 及回歸測試用例的選擇與生成。與傳統BPEL流圖相比,不僅可以表達BPEL流程,還能表達 組合服務內部的消息交互行為,從真正意義上對組合服務進行建模。
圖1是BCMRi元素示意圖,圖中給出了所有類型的節(jié)點和邊的圖形表示。圖2是BCMFG控制流圖模型的構建流程。圖3是BPEL中<partnerLink>元素轉化為BCMFG子圖的流程。圖4是BPEL中〈invoke〉元素轉化為BCMFG子圖的流程。圖5是BPEL中〈receive〉元素轉化為BCMFG子圖的流程。圖6是BPEL中<r印ly>元素轉化為BCMFG子圖的流程。圖7是BPEL中〈assign〉元素轉化為BCMFG子圖的流程。圖8是BPEL中<If>元素轉化為BCMFG子圖的流程。圖9是BPEL中〈While〉元素轉化為BCMFG子圖的流程。圖10是BPEL中<R印eat_Until>元素轉化為BCMFG子圖的流程。圖11是BPEL中<Pick>元素轉化為BCMFG子圖的流程。圖12是BPEL中<Flow>元素轉化為BCMFG子圖的流程。圖13是BPEL中<Foreach>元素轉化為BCMFG子圖的流程。圖14是BPEL中〈sequence〉和<scope>元素轉化為BCMFG子圖的流程。圖15利用基于BPEL的控制信息流圖模型對貸款組合服務的BPEL文檔構建生成 的BCMFG圖。
具體實施例方式下面結合附圖對發(fā)明的技術方案進行詳細說明本發(fā)明的方法是把BPEL文件轉換為基于BPEL的控制信息流圖(BCMFG),然后根據 BCMFG生成BCMFG路徑,如圖1所示。一、模型定義BCMFG 是一個三元組<N,E ;F>,其中N為節(jié)點集,且N = NN U IN U SN U EN U麗U CN,式中,NN是普通節(jié)點集,IN是交互節(jié)點集,SN是服務節(jié)點 集,EN是單選節(jié)點集,麗是多選節(jié)點集,CN是并發(fā)節(jié)點集,到達節(jié)點的有向邊的數目稱作節(jié) 點的入度,從節(jié)點出發(fā)的有向邊的數目稱作節(jié)點的出度;E = CE U ME,其中,CE是控制邊集 合,ME是消息交互邊集合;節(jié)點、邊統稱為BCMFG的元素。F為BCMFG元素的域。1、BCMFG 元素BCMFG的普通節(jié)點代表BPEL流程中不需與成員服務交互的基本活動,如〈assign〉、<wait>等。交互節(jié)點代表BPEL中與成員服務交互的基本活動,包括〈invoke〉、 <receive>,<reply>以及<pick>結構中的〈onMessage〉活動四種。服務節(jié)點表示與流程交 互的成員服務。單選節(jié)點(Exclusive Node)也可稱作“異或”(XOR)節(jié)點,分為單選分支節(jié) 點(入度等于1、出度大于1)和單選歸并節(jié)點(入度大于1、出度等于1),單選節(jié)點有且只 有一條輸入或者輸出邊被觸發(fā);多選節(jié)點(Multiple Node)也可稱作“或”(OR)節(jié)點,分為 多選分支節(jié)點和多選歸并節(jié)點,可以有任意數目的邊被觸發(fā);并發(fā)節(jié)點(ConcurrentNode) 也可稱作“與”(AND)節(jié)點,分為并發(fā)分支節(jié)點和并發(fā)歸并節(jié)點,所有的邊都必須被觸發(fā)。圖 2給出了 BCMFG元素的圖形化示意圖,表1給出了 BCMFG元素的分類及相應縮略語。2、BCMFG 元素的域
EBCMFG元素的域F記載元素的信息。EBCMFG的所有元素都含有HashCode域、Id 域、Source 域、Target 域禾口 Category 域。(I)HashCode域是由散列函數產生的字符數組,由于相同的字符串產生的散列碼 相同,所以可以利用散列碼檢測BPEL文檔的改動。
(2) Id域的值作為BCMFG元素的標識,在BCMFG圖模型中是唯一的。(3) Source域和Target域分別表示該元素的前驅元素集和后繼元素集,對于 BCMFG節(jié)點而言,它的前驅元素集和后繼元素集一般為邊,相應地,邊的前驅節(jié)點集和后繼 節(jié)點集一般為節(jié)點。(4) Category域表示元素類型,普通節(jié)點的Category域值是NN,交互節(jié)點是IN,服 務節(jié)點是SN,單選分支節(jié)點是EDN,單選歸并節(jié)點是EMN,多選分支節(jié)點是MBN,多選分支節(jié) 點是MMN,并發(fā)分支節(jié)點是CBN,并發(fā)歸并節(jié)點是CMN,控制邊是CE,消息交互邊是ME。此外,不同類型的元素還有其特定的域。(1)Name域為BCMFG的節(jié)點所含有,其域值為對應的BPEL活動的Name屬性值。(2) PartnerLink 域為交互節(jié)點所特有,對于〈invoke〉、〈receive〉、<reply> 以及 <pick> 結構中的 <onMessage> 舌云J],PartnerLink 域值為i亥 舌云J]對應的 <partnerLink> 的 Name屬性值。(3)C0nditi0n域為單選節(jié)點、多選節(jié)點、并發(fā)節(jié)點、控制邊所含有,它表示轉移條 件(謂詞約束)。對于單選節(jié)點、多選節(jié)點、并發(fā)節(jié)點而言,其Condition域表示該節(jié)點的轉 移條件,其值為對應BPEL結構化活動Condition屬性的值;對于由<link>生成的邊,該域 的值為<link>元素的〈transitionCondition〉的值。為了分析控制流得到路徑轉移信息, 有必要向由單選分支節(jié)點發(fā)出的邊添加轉移條件信息,如果單選節(jié)點α的condition值為 c,那么α的兩條出邊的condition值分別為c和! C。(4)Endpoint域為服務節(jié)點所特有,其值為該節(jié)點代表的成員服務的端點地址。(5)PortType域和Operation域為交互節(jié)點所有,它們的值分別為該節(jié)點對應的 BPEL活動的PortType屬性和Operation的值。3、BCMFG 路徑BCMFG的路徑定義為包含節(jié)點和有向邊的元素集合。每條路徑都從BCMFG的初始 節(jié)點開始,初始節(jié)點有兩種情況如果流程始于開始活動〈receive〉,即流程通過接收成員 服務發(fā)來的調用消息被激發(fā),此時路徑開始于服務節(jié)點SN ;如果流程始于另一種開始活動 <pick>,這時路徑開始于單選分支節(jié)點EDN。這里首先給出控制流路徑和消息路徑的定義, 并在此基礎上給出BCMFG路徑的定義。(1)控制流路徑Spf= Iei,…,ei+k,…ei+n} (O 彡 k 彡 n, ei+k e IN U NN U EN U MN U CN U CE),如果對于站 e ;?沁,日它,印,ei+p e ei+k. targ ert (O ^ ρ ^ η),則稱pf是一條控制流路徑。(2)消息路徑設 pm = Iej,…,eJ+k,... eJ+m} (O 彡 k 彡 m,eJ+k e SN U ME),pm 始于 消息交互邊em并終止于消息交互邊e' m,如果對于e /^Λ。+ifc g終止消息邊),
e+p e eJ+k. targ et (O彡ρ彡m),則稱pm是一條消息路徑。(3) BCMFG路徑設pf是控制流路徑,pmi (1 < i < η)是消息路徑, ρ = Pf U pml U ... U pmi U ... U pmn (1 彡 i 彡 η)。如果對于 VpJ}化 n), Binm,inm e pf Λ inm e IN Λ em e pmi Λ (em e inm. target) V em e inm. source),貝Ij稱 ρ 是一條 BCMFG路徑。二、方法流程利用基于BPEL的控制信息流圖模型對BPEL組合服務建模主要分為兩個步驟構 建BCMFG模型和計算BCMFG路徑。1、構建 BCMFG 模型(2)使用DOM解析器將BPEL文檔和WSDL文檔解析為DOM樹,每個樹節(jié)點帶有相關
fn息
(3)對DOM樹中的每個節(jié)點e進行遍歷,判定e的類型,根據(a) ⑴生成BCMFG 元素,并為該元素的各個域進行賦值a)若節(jié)點e代表對伙伴鏈接partnerLink的定義,則創(chuàng)建BCMFG元素m,m的 Category域的值設定為“SN”,使用e中相關屬性為m的Name域賦值?;锇殒溄覲artnerLink 的具體處理流程如圖3所示。b)若節(jié)點e代表基本活動invoke,則首先創(chuàng)建BCMFG元素m,m的Category域的值 設定為“IN”,使用e中相關屬性為m的Name域、partnerLink域、PortType域和Operation 域賦值,并通過partnerLink域值搜索到對應得服務節(jié)點S。然后對服務調用過程中的請 求_響應模式進行判定,如果e中屬性inputVariable的值不為空,則創(chuàng)建一條從m到s的 消息邊Hie1,并根據控制流關系設定m、s及Hie1的Target域值和Source域值;如果e中屬 性outputVariable的值不為空,則創(chuàng)建一條從s到m的消息邊me2,并根據控制流關系設定 s、m及me2的Target域值和Source域值?;净顒觟nvoke的具體處理流程如圖4所示c)若節(jié)點e代表基本活動receive,其處理方法與invoke類似,只是在對服務調 用過程中不需要對請求_響應模式進行判定,直接創(chuàng)建一條從s到m的消息邊me即可,其 余處理過程與invoke類似?;净顒觬eceive的具體處理流程如圖5所示。d)若節(jié)點e代表基本活動reply,由于它與基本活動receive是互逆關系,故只要 反向創(chuàng)建消息邊me即可(從m到S)?;净顒觬印Iy的處理流程如圖6所示。e)若節(jié)點e代表基本活動assign,則創(chuàng)建BCMFG元素m,m的Category域值設定 為“顕”,使用e中相關屬性為m的Name域賦值,并通過e中的partnerLink屬性值搜索到 對應得服務節(jié)點s,利用e中的子元素endpoint為s的Endpoint域賦值?;净顒觓ssign 的處理流程如圖7所示。f)若節(jié)點e代表結構化活動If,則創(chuàng)建BCMFG元素Hi1, Hi1的Category域值設定為 “EDN”,使用e中相關屬性為ml的Name域和Condition域賦值,并處理If內部的基本活動 (或結構化活動),該處理過程是遞歸的,需要調用其他活動模型的處理流程。然后判定e 中是否含有子元素else if,如果有,則繼續(xù)處理else if的內部活動。在完成對所有else if處理完畢后,創(chuàng)建BCMFG元素m2,m2的Category域值設定為“EMN”,使用e中相關屬性為 m2的Name域賦值,最后處理else的內部活動,同時更新在之前處理if/elseif所生成的所 有BCMFG元素的Target域值。結構化活動If的處理流程如圖8所示。g)若節(jié)點e代表結構化活動While,則分別創(chuàng)建BCMre元素叫和叫,!!^的Category 域值設定為“EDN”,m2的Category域值設定為“EMN”,使用e中相關屬性為Hi1的Name域和 Condition域及m2的Name域賦值。然后創(chuàng)建m2到Hi1的控制邊ce,同樣利用e中相關屬性為H^m2及ce的Target域和Source域賦值。最后處理While結構內部的活動,內部活動 的同樣需要調用其他活動模型的處理流程。結構化活動While的處理流程如圖9所示。h)若節(jié)點e代表結構化活動R印eat-Until,則創(chuàng)建BCMFG元素Ivm1的Category 域值設定為“EDN”,使用e中相關屬性為Hi1的Name域和Condition域賦值,然后處理 Repeat-Until內的所有子活動HiiG > 1),記錄下其中首個活動m2,并創(chuàng)建Hi1到m2的控 制邊ce,再次利用e中相關屬性更新mi、m2及ce的Target域和Source域。結構化活動 Repeat-Until的處理流程如圖10所示。i)若節(jié)點e代表結構化活動Pick,則創(chuàng)建BCMFG元素Hi1, Hi1的Category域值設 定為“EDN”,使用e中相關屬性為Hi1的Name域賦值,對于〈onMessage〉中的每個活動,創(chuàng) 建BCMFG元素Hii (i > 1),Hii的Category域值設定為"IN",同樣使用e中相關屬性為Hii的 PartnerLink域、PortType域和Operation域賦值,并通過partnerLink域值搜索到對應得 服務節(jié)點Si。創(chuàng)建從Si到Hii的控制邊Cei,并根據控制流關系更新H^si和Cei的Target域 值及Source域值。對于<onAlarm>中的每個活動,創(chuàng)建BCMFG元素m」(j > max⑴),Hij的 Category域值設定為“NN”,同樣使用e中相關屬性為Hij的Name域賦值。最后創(chuàng)建BCMFG 元素mk(k > max (j)),mk的Category的域值設定為“EMN”。結構化活動Pick的處理流程 如圖11所示。
j)若節(jié)點e代表結構化活動Flow,則創(chuàng)建BCMFG元素Hi1和m2,Hi1的Category域值 設定為“CBN”,m2的Category域值設定為“CMN”,使用e中相關屬性為Hi1的Name域和m2的 Name域賦值。然后處理Flow內部活動,需要調用其他活動模型的處理流程,最后根據link 構成的同步依賴關系生成其它BCMFG元素。結構化活動Flow處理流程如圖12所示。k)若e代表結構化活動foreach,則處理流程與While類似。具體流程處理見如 圖13所示。1)若e代表結構化活云力sequence (或者scope),由于sequence (scope)表示簡單 的順序關系(子函數),所以真正處理流程主要還是針對內部活動的具體類型調用對應的 活動處理流程。Sequence和Scope的處理流程如圖14所示。(4)完成對BCMRi模型的構建2、計算 BCMFG 路徑根據BCMRi節(jié)點中記載的源元素和目標元素的信息,可以通過對圖形的遍歷找出 由控制流路徑和消息路徑組合而成的BCMFG路徑,分析BCMFG生成BCMFG路徑的過程。在算法開始之前,首先查找以初始節(jié)點s為源節(jié)點的控制邊如果有m條這樣的 邊,則創(chuàng)建m條路徑,向每條路徑中添加s和再對m條路徑中的每一條分別處理。這里 使用p[c0unt]記錄BCMRi路徑所包含的節(jié)點集合,count用于區(qū)分不同的路徑。根據當前節(jié)點e的類型,可分為如下五種不同處理方式(1)如果當前節(jié)點e是交互節(jié)點IN,首先將e添加進ρ [count],然后按以下方法 生成消息路徑Pm 查看e的Source域,若其中有消息邊ME,則對于每條消息邊,根據它的 Source域逆向遍歷,直至遇到交互節(jié)點為止,將遍歷到的消息邊和服務節(jié)點全部添加到Pm 中;查看e的Target域,若其中有消息邊,則對于每條消息邊,根據它的Target域正向遍 歷,直至遇到另一交互節(jié)點為止,將遍歷到的消息邊和服務節(jié)點全部添加到pm’中。最后, 將pm和pm’中的元素添加進ρ [count]。
(2)如果當前節(jié)點e是具有k個分支的單選分支節(jié)點,則將p[COimt]復制(k_l) 次,再將e以及以e為源節(jié)點的邊添加進p[count]以及復制的(k_l)條路徑中。(3)如果當前節(jié)點e是多選分支節(jié)點,假設e的出度為k,則這k條出邊中可以同 時執(zhí)行的數目介于1和k之間,是關于k的全組合,共有2k-l種,因此需將p [count]復制 2k-2次,并將e添加進p [count]以及復制的2k_2條路徑中,再分別按這2k_l種組合將這些 邊添加到對應的路徑中。(4)如果當前節(jié)點e是并發(fā)分支節(jié)點,雖然可以按照并發(fā)測試中確定性測試的思 路產生并發(fā)內部的同步序列從而衍生出多條執(zhí)行路徑,但是對于特定的輸入數據而言,這 些路徑具有相同的執(zhí)行條件和期望輸出,按照本文的測試方法可以將它們統一為一條路 徑,基于這種考慮,這里不進行路徑的復制,而將e以及以e為源節(jié)點的所有邊都添加進 p[count]。(5)如果e的目標節(jié)點n是普通節(jié)點等其它元素,則將n添加進p [count]。為了方便描述,我們利用基于BPEL的控制信息流圖模型將對貸款組合服務由 BPEL組合服務流程LomiFlo w. bpel進行建模分析,其BPEL文檔如下所示?!磒rocess nane = “ LoanFlow“... ><partnerLinks>〈partnerLink name = “ client" . . . />〈partnerLink name = 〃 creditRatmgService“…/>〈partnerLink name = 〃 UnitedLoanService“…/><partnerLinkname = ” StarLoanService“ . . . /></partnerLinnks><variables>. . . </variables>〈sequence〉〈一省略伙伴鏈接賦值活動一>〈receive name =“ =” tns:LoanFlow“operation =
>
‘GetCreditRating “ variableAccessSerializable
receivelnput 〃 partnerLink = 〃 client 〃 portType 〃 initiate 〃 variable =”input 〃 createlnstance
=〃 yes
//
=,r no
//
〈scope name =
>
〈sequence〉
〈assign name = 〃 copySSN“ >...</assign> 〈invoke name =〃 invokeCR“ partnerLink =〃 creditRatingService “
portType = “ services:CreditRatingService“ operation
=” process"inputVariable = 〃 crInput 〃 outputVariable ="crOutput" />〈assign name = “ copyRating" >. . . </assign></sequence)
</scope> 〈scope name = " GetLoanOffer" variableAccessSerializable =" no" >
<sequence>
<assign name = " prepareApp1ication" >. <flow name = " collectOffers" > <sequence>
</assign><invokename = " invokeUnitedLoan"partnerLink = " UnitedLoanService" portType ="services:LoanService"
="loanApplication" />
operation =
initiate
inputVariable
〈receive name = " receive invokeUnitedLoan'partnerLink = " UnitedLoanService " portType ="services:LoanServiceCallback"operation = " onResult" variable = " loanOfferl" />
</sequence) <sequence>
〈invoke name =
invokeStarLoan
partnerLink
="StarLoanService‘
="initiate"
="StarLoanService‘
portType = " services:LoanService" operation
inputVariable =" loanApplication" /> 〈receive name = " receive_invokeStarLoan" partnerLink
portType = " services:LoanServiceCallback" operatio
n=〃 onResult" variable = 〃 Ioan0ffer2' d',‘ d',‘
</sequence) </flow> </sequence) </scope>
<scope name =" SelectOffer" variableAccessSerializable =" no" > <if name = " selectBestOffer" >
<condition> " bpws:getVariableData (' loanOfferl' , ' payloa /auto:loanOffer/auto:APR')>
bpws:getVariableData(' Ioan0ffer2' , ' payloa /auto:loanOfer/auto:APR')〃 </condition)
<assign name = " selectStarLoanOffer" >...</assign> <else>
11
<assign name = " selectUnitedLoanOffer" >. . . </assign></else></if></scope><invoke name = " replyOutput " partne rLink = " client " portType ="tns:LoanFlowCallback"operation = " onResult" inputVariable = " selectedLoanOffer" /></sequence></process>具體建模流程如下所示(1)使用DOM解析器將BPEL文檔和WSDL文檔解析為DOM樹,每個樹節(jié)點帶有BPEL 文檔元素的基本信息。(2)從根元素開始依次讀取樹中的DOM節(jié)點,每當遇到可以映射為BCMFG節(jié)點的 BPEL活動時,使用對應的活動處理流程(圖3 圖14)創(chuàng)建BCMre元素,并給該元素的各個 域賦值。(3)利用BCMFG元素間的控制關系完成BCMFG模型的構建。(4)通過對圖形的遍歷找出由控制流路徑和消息路徑組合而成的BCMFG路徑。通過上述步驟,即使用基于BPEL的控制信息流圖模型完成對BPEL組合服務的建模。圖15顯示了對貸款組合服務建模后的圖形化表示。其中元素2、5、7、9、21、25、41分別 為服務節(jié)點、交互節(jié)點、普通節(jié)點、消息交互邊、并發(fā)節(jié)點、單選節(jié)點、控制邊。以元素2為 例,其域信息如表2所示。BCMFG路徑存在1條,為[5 ;6 ;1 ;29 ;7 ;30 ;8 ;10 ;2 ;9 ;31 ;11 ;32 ;12 ;33 ;21 ;34 ;13 ;14 ;3 ;16 ;35 ;15 ; 36 ;22 ;37 ;17 ;18 ;4 ;20 ;38 ;19 ;39 ;40 ;25 ;41 ;23 ;42 ;26 ;45 ;27 ;28 ;]。
權利要求
一種基于BPEL的控制信息流圖的建模方法,其特征在于包括如下步驟步驟1)對BPEL文檔進行解析,生成DOM樹;步驟2)遍歷DOM樹結點,當遇到可以映射為BCMFG的DOM樹節(jié)點時,創(chuàng)建BCMFG元素,并給BCMFG元素的域賦值;步驟3)利用BCMFG元素間的控制關系構建BCMFG模型;步驟4)根據BCMFG模型計算所有BCMFG路徑。
2.根據權利要求1所述的一種基于BPEL的控制信息流圖的建模方法,其特征在于步驟 2)所述的給BCMRi元素的域賦值方法如下對DOM樹中的每個節(jié)點進行遍歷,a)若節(jié)點代表對伙伴鏈接partnerLink,則創(chuàng)建BCMFG元素m,m的Category域的值設 定為服務節(jié)點集SN,使用節(jié)點中相關屬性為m的Name域賦值;b)若節(jié)點代表基本活動invoke或receive或r印ly,則首先創(chuàng)建BCMFG元素m,m的 Category域的值設定為交互節(jié)點集IN,使用節(jié)點中相關屬性為m的Name域、partnerLink 域、PortType域和Operation域賦值,并通過partnerLink域值搜索到與節(jié)點對應得服務 節(jié)點s ;c)若節(jié)點代表基本活動assign,則創(chuàng)建BCMFG元素m,m的Category域值設定為普通 節(jié)點集NN,使用節(jié)點中相關屬性為m的Name域賦值,并通過e中的partnerLink屬性值搜 索到對應得服務節(jié)點s,利用e中的子元素endpoint為s的Endpoint域賦值;d)若節(jié)點代表結構化活動If,則創(chuàng)建BCMFG元素H^m1的Category域值設定為單選分 支節(jié)點EDN,使用節(jié)點中相關屬性為Hi1的Name域和Condition域賦值,并處理If內部的基 本活動或結構化活動;當節(jié)點中含有子元素else if,則繼續(xù)處理子元素else if的內部活 動,在完成對所有子元素else if的處理后,創(chuàng)建BCMFG元素m2,m2的Category域值設定為 單選歸并節(jié)點EMN,使用節(jié)點中相關屬性為m2的Name域賦值,最后處理else的內部活動, 同時更新在之前處理if或else if所生成的所有BCMFG元素的Target域值;e)若節(jié)點代表結構化活動While或foreach,則分別創(chuàng)建BCMFG元素Hi1和m2,Hi1的 Category域值設定為單選分支節(jié)點EDN,m2的Category域值設定為單選歸并節(jié)點EMN,使 用節(jié)點中相關屬性為Hi1的Name域和Condition域及m2的Name域賦值;然后創(chuàng)建m2到Hi1 的控制邊ce,同樣利用e中相關屬性為H^m2及ce的Target域和Source域賦值;f)若節(jié)點代表結構化活動R印eat-Until,則創(chuàng)建BCMFG元素Ivm1的Category域值設 定為單選分支節(jié)點EDN,使用節(jié)點中相關屬性為Hi1的Name域和Condition域賦值,然后處 理R印eat-Until內的所有子活動叫,i為大于1的自然數,記錄下其中首個活動m2,并創(chuàng)建 Hi1到m2的控制邊ce,再次利用e中相關屬性更新mi、m2及ce的Target域和Source域;a)若節(jié)點代表結構化活動Pick,則創(chuàng)建BCMFG元素Hi1, Hi1的Category域值設定為單 選分支節(jié)點EDN,使用節(jié)點中相關屬性為Hi1的Name域賦值,對于〈onMessage〉中的每個活 動,創(chuàng)建BCMFG元素IV i為大于1的自然數,Hii的Category域值設定為交互節(jié)點IN,同 樣使用節(jié)點中相關屬性為Hii的PartnerLink域、PortType域和Operation域賦值,并通過 partnerLink域值搜索到對應得服務節(jié)點Si,創(chuàng)建從Si到Hii的控制邊Cei,并根據控制流 關系更新Hii、Si和Cei的Target域值及Source域值,對于<onAlarm>中的每個活動,創(chuàng)建 BCMFG元素πι」(j > max (i) ,max ()表示取最大值,即j從i+Ι開始依次取值,m」的Category 域值設定為普通節(jié)點NN,同樣使用e中相關屬性為Ii^的Name域賦值,最后創(chuàng)建BCMFG元素mk,k > max (j),即k從j+1開始依次取值,mk的Category的域值設定為單選歸并節(jié)點EMN, j和k都為自然數;g)若節(jié)點代表結構化活動Flow,則創(chuàng)建BCMFG元素mi和m2,m:的Category域值設定 為并發(fā)分支節(jié)點CBN,m2的Category域值設定為并發(fā)歸并節(jié)點CMN,使用節(jié)點中相關屬性為 Hi!的Name域禾口 m2的Name域賦值。
全文摘要
本發(fā)明公布了一種基于BPEL的控制信息流圖的建模方法,包括如下步驟步驟1)對BPEL文檔進行解析,生成DOM樹;步驟2)遍歷DOM樹結點,當遇到可以映射為BCMFG的DOM樹節(jié)點時,創(chuàng)建BCMFG元素,并給BCMFG元素的域賦值;步驟3)利用BCMFG元素間的控制關系構建BCMFG模型;步驟4)根據BCMFG模型計算所有BCMFG路徑。本發(fā)明不僅可以表達BPEL流程,還能表達組合服務內部的消息交互行為,從真正意義上對組合服務進行建模。
文檔編號G06F9/44GK101872302SQ20101017378
公開日2010年10月27日 申請日期2010年5月14日 優(yōu)先權日2010年5月14日
發(fā)明者周穎, 李必信, 王迪, 邱棟 申請人:東南大學