亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

面向服務(wù)環(huán)境中基于模板實現(xiàn)bpel子流程復(fù)用的方法及系統(tǒng)的制作方法

文檔序號:6597680閱讀:153來源:國知局
專利名稱:面向服務(wù)環(huán)境中基于模板實現(xiàn)bpel子流程復(fù)用的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及面向服務(wù)的開發(fā)技術(shù)領(lǐng)域,具體地說,是面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法及系統(tǒng)。
背景技術(shù)
隨著面向服務(wù)思想的出現(xiàn),用服務(wù)組合的方法來構(gòu)建系統(tǒng)成為了目前的研究熱點。而Web Services技術(shù)是目前把一個信息系統(tǒng)封裝成服務(wù)的主要方法,也是SOA (Service-Oriented Architecture,面向服務(wù)的體系結(jié)構(gòu))設(shè)計思想的一個重要部分,基于Web Service的服務(wù)組合的方法可以降低系統(tǒng)開發(fā)的難度和復(fù)雜度,提高系統(tǒng)對復(fù)雜多變的業(yè)務(wù)需求的適應(yīng)能力。技術(shù)人員可以通過對已有Web Service的組合,設(shè)計并實現(xiàn)一套完整的解決方案來適應(yīng)復(fù)雜多變的業(yè)務(wù)需求。 在Web Service的服務(wù)組合中,一般可以通過某種腳本語言來描述最終的組合流程,并在支持該腳本語言的引擎上部署和運行。這種腳本語言被成為服務(wù)編排語言,屬于服務(wù)編排這一層。目前,比較成熟的服務(wù)編排語言主要有BPEL(Business Process ExecutionLanguage,業(yè)務(wù)流程執(zhí)行語言)。目前,對于BPEL腳本的開發(fā),IBM、Oracle和微軟等公司都提供了廣泛的支持。這些公司都提供了自己開發(fā)的BPEL執(zhí)行引擎和與之配套的BPEL腳本圖形化的開發(fā)環(huán)境。但是在眾多的執(zhí)行引擎和圖形化開發(fā)環(huán)境中,對于BPEL腳本的復(fù)用機(jī)制始終缺乏一套靈活完善的解決方案,絕大多數(shù)的系統(tǒng)只是提供部分支持,且使用起來難度大。 考慮到在現(xiàn)實生活中,實際上利用BPEL來進(jìn)行Web Services間的組合和系統(tǒng)開
發(fā),大都是基于一定的行業(yè)領(lǐng)域內(nèi)進(jìn)行開發(fā)的。而一個行業(yè)領(lǐng)域內(nèi)部,其實有很多業(yè)務(wù)的邏
輯和功能是可以被重復(fù)使用的。但是這種重復(fù)使用的層次和粒度也可能是多種多樣的。因
此希望能夠有效的復(fù)用這些邏輯功能,也必然需要提供一套靈活性高的服用機(jī)制。同時,同
一行業(yè)領(lǐng)域內(nèi)部,不同的解決方案間,對于同樣的業(yè)務(wù)也都會有著自己特有的邏輯設(shè)計,這
就意味著系統(tǒng)也要給用戶足夠的自主性,讓其對復(fù)用的邏輯能進(jìn)行自主控制。 而且,由于系統(tǒng)的復(fù)雜性和現(xiàn)實需求的變更等等原因,都不可避免的要對已有的
BPEL腳本進(jìn)行新的開發(fā)或者修改。尤其是在創(chuàng)建新的相關(guān)流程時,往往會重復(fù)使用到以前
開發(fā)過的BPEL片段,但是如果都進(jìn)行BPEL流程的封裝,又勢必會造成在流程結(jié)構(gòu)和層次上
的復(fù)雜性,帶來不便。 因此,現(xiàn)有的BPEL應(yīng)用方面存在著一些不足首先,BPEL流程開發(fā)對具體實際場景的依賴性較大,針對不同的業(yè)務(wù)場景需要使用原子粒度的開發(fā)單元設(shè)計實現(xiàn)新的流程,缺乏一定的靈活性;其次,目前對BPEL的開發(fā)缺乏一套完備的復(fù)用機(jī)制,現(xiàn)有的BPELDesigner僅提供BPEL基本活動,這樣導(dǎo)致重復(fù)開發(fā)的工作量很大,目前,針對這一問題,還沒有一套有效的解決方案。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法及系統(tǒng),可以實現(xiàn)對BPEL子流程的復(fù)用,也能預(yù)先設(shè)定行業(yè)內(nèi)通用的業(yè)務(wù)流程模板,從而大大減少開發(fā)人員的工作量,提高面向服務(wù)的開發(fā)效率,縮短開發(fā)周期。 為了解決上述技術(shù)問題,本發(fā)明提供了一種面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制的BPEL子流程復(fù)用的方法,包括以下步驟 A.生成模板步驟解析BPEL流程的結(jié)構(gòu),接收用戶的指令定位需要進(jìn)行復(fù)用的BPEL子流程,然后抽取用戶需要復(fù)用的BPEL子流程,根據(jù)定義的模板模型對子流程進(jìn)行封裝,并且給出封裝后模板的接口定義,最后將生成的模板保存到本地的模板庫中;
B.組裝模板步驟將模板庫中的模板加載到業(yè)務(wù)流程的編輯開發(fā)環(huán)境中,并與模板庫保持同步更新,并提供對于模板的接口的對接;對模板進(jìn)行相應(yīng)的BPEL語法驗證和模板相關(guān)檢驗; C.導(dǎo)出模板步驟將含有模板擴(kuò)展標(biāo)簽的BPEL業(yè)務(wù)流程轉(zhuǎn)換為標(biāo)準(zhǔn)的可執(zhí)行的BPEL,包括將調(diào)用的已經(jīng)封裝的BPEL模板中的變量、條件參數(shù)根據(jù)接口中的參數(shù)進(jìn)行實例化的轉(zhuǎn)換,得到符合具體流程要求的BPEL片段,然后補充完整BPEL流程,得到可執(zhí)行的標(biāo)準(zhǔn)BPEL流程。 進(jìn)一步地,所述步驟A具體包括
Al.對BPEL文件進(jìn)行解析; A2.建立BPEL的樹形結(jié)構(gòu),并把該結(jié)構(gòu)提供給圖形化顯示模塊; A3.圖形化顯示模塊用可選多叉樹的方式來展示整個BPEL的層次結(jié)構(gòu)給用戶,清
楚表示出節(jié)點的層次包含關(guān)系、節(jié)點的名稱、類型和相關(guān)屬性; A4.用戶從所BPEL樹形結(jié)構(gòu)選取自己需要抽取封裝成為模板的部分; A5.將用戶選中的BPEL片段提取出來保存至模板中,同時將該BPEL片段相關(guān)的屬
性信息和WSDL信息都一并提取出來; A6.展示提取的BPEL片段中,需要用戶進(jìn)行操作的接口信息,包括輸入變量、輸出變量和控制條件,保存至模板文件中,并將得到的模板保存到模板庫中。
進(jìn)一步地,所述步驟Al中對BPEL文件進(jìn)行解析包括 a)讀取用戶指定進(jìn)行模板抽取的BPEL文件,通過XML解析,首先創(chuàng)建BPEL文檔對象; b)根據(jù)用戶指定的相關(guān)聯(lián)的WSDL文件,配合解析BPEL文件時,取得所引入的WSDL文件信息,提取WSDL文件中的message、partnerLinkType和portType元素的信息進(jìn)行保存; c)采用遞歸的方式來遍歷整個BPEL文件的樹形結(jié)構(gòu),解析每一個BPEL活動,對于BPEL基本活動提取出variable、 partnerLinkType和portType屬性添加到模板中進(jìn)行保存;對于BPEL容器活動,如果存在控制條件的,提取其condition的屬性值添加到模板信息中進(jìn)行保存。 進(jìn)一步地,所述步驟A6中,所述展示的輸入變量和輸出變量通過以下方式得到
首先,找出復(fù)用的BPEL子流程中的所有變量。保證在封裝模板的接口時,不會出現(xiàn)變量的丟失現(xiàn)象; 然后,遍歷子流程中的所有活動,確定子流程中的輸入變量集合和輸出變量集合. 最后,去除兩個集合中的公共變量,得到所述BPEL模板封裝時所需定義的輸入變量和輸出變量。
進(jìn)一步地,所述步驟A中,模板的封裝具體包括 解析抽取出來的BPEL片段,分析得到其包含的所有BPEL活動,并將每個BPEL活動都保存到節(jié)點列表nodeList中。 讀取nodeList中當(dāng)前的BPEL活動,判斷該BPEL活動是BPEL的基本活動,還是BPEL的容器活動,如果是BPEL基本活動,提取BPEL基本活動中的各個變量;如果是BPEL的容器活動,則繼續(xù)判斷該容器活動是否含有控制條件,如果該容器活動中包含控制條件,先將控制條件抽取出來保存到模板中,然后將控制條件所在的路徑也保存到模板中,判斷抽取出來的控制條件中是否含有變量,如果有,將所有的變量解析出來保存到輸入變量列表中;如果沒有,結(jié)束節(jié)點的變量分析;如果容器活動中不包含控制條件,再判斷該容器活動是否是scope活動,如果是,判斷該scope活動中是否定義了局部變量,如果定義了局部變量,則將所有的局部變量保存到輸出變量中,如果scope活動中沒有定義局部變量,結(jié)束節(jié)點的變量分析。 進(jìn)一步地,所述步驟B具體包括 讀取模板庫中所有的模板信息,并且導(dǎo)入到圖形界面顯示面板中;
用戶從所述圖形界面顯示面板中選擇活動或連線,如果用戶選擇的是活動,判斷用戶選擇的是BPEL活動還是模板,如果是BPEL活動,先在編輯窗口中顯示此BPEL活動的圖標(biāo),然后由用戶對所添加的BPEL活動的屬性進(jìn)行設(shè)置如果是BPEL基本活動,為該活動創(chuàng)建或者導(dǎo)入其依賴的partnerLink,然后再為該活動創(chuàng)建和導(dǎo)入相關(guān)的變量;如果用戶選擇的是容器活動,同時該容器活動有控制條件需要指定,由用戶添加對應(yīng)的控制條件;
如果用戶選擇了模板,首先在編輯窗口中顯示模板圖標(biāo),提取模板文件中保存的信息,導(dǎo)入該模板所依賴的WSDL文件、partnerLink和變量; 如果用戶選擇的是連線,由用戶指定好該連線的源和目標(biāo),在編輯窗口上顯示出連線,判斷此時連線的目標(biāo)節(jié)點是否為模板,如果是,由用戶為模板選擇匹配的輸入變量,或為模板添加匹配的控制條件,保存用戶對于模板做出的修改操作,判斷用戶是否還繼續(xù)編輯流程,如果是,重復(fù)上述的過程;如果否,保存退出。 進(jìn)一步地,用戶完成模板接口交互操作保存退出時,觸發(fā)以下操作
讀取變量列表variableList中的變量信息,并獲取某節(jié)點所在的模板信息;
判斷該節(jié)點所在的模板是否為當(dāng)前正在編輯的模板,如果不是,繼續(xù)讀取variableList中的變量信息;如果是,首先建立對應(yīng)的BPEL文件即完整的BPEL樹,根據(jù)
模板中保存的變量路徑信息,定位到要修改的變量或者是條件在模板中的位置,然后更新BPEL代碼的信息, 判斷variableList中是否還有變量沒有處理,如果有,讀取未處理的變量進(jìn)行上
述處理;如果沒有,結(jié)束循環(huán)。 進(jìn)一步地,所述步驟C具體包括
7
CI.首先遍歷整個流程代碼中的連線,將所有連線連接的節(jié)點都添加到nodeList中,在該nodeList中沒有相同的節(jié)點;找到整個流程的起點,然后讀入當(dāng)前鎖定的節(jié)點;
C2.判斷當(dāng)前鎖定的節(jié)點是BPEL活動還是模板; C3.如果當(dāng)前節(jié)點是BPEL活動,轉(zhuǎn)到步驟C4 ;如果當(dāng)前節(jié)點是模板,提取模板中保存的BPEL片段,然后根據(jù)拼接時保存的修改操作,對提取出的BPEL片段進(jìn)行更新操作,轉(zhuǎn)到步驟C4 ; C4.將該節(jié)點按照連線的順序和層次關(guān)系導(dǎo)出到指定的BPEL文件中保存,在為BPEL活動時導(dǎo)出的是本身的活動定義和相關(guān)的屬性定義;在為模板時導(dǎo)出模板中定義好的但是已經(jīng)更新過的BPEL片段; C5.在BPEL文件中導(dǎo)入與當(dāng)前節(jié)點相關(guān)的WSDL文件,以及相關(guān)的partnerLink和variable的定義; C6.判斷是否還有節(jié)點沒有導(dǎo)出到指定的BPEL文件中,如果有,讀取下一個節(jié)點,執(zhí)行步驟C2 C5 ;如果沒有,跳出循環(huán),完成導(dǎo)出過程。 本發(fā)明還提供了一種面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的系統(tǒng),包括 BPEL腳本解析模塊,用于對BPEL腳本進(jìn)行解析,通過基于Dom的XML解析,依賴BPEL的EMF模型,對用戶要抽取的BPEL腳本以及相關(guān)聯(lián)的WSDL文件建立樹形模型,獲取BPEL腳本中的每一個BPEL活動的信息; 模板抽取和封裝模塊,根據(jù)所述BPEL腳本解析模塊的解析結(jié)果,用于對用戶選中的BPEL腳本片段進(jìn)行抽取,通過給用戶展示整個BPEL的結(jié)構(gòu),由用戶選擇需要進(jìn)行抽取和封裝的BPEL邏輯;在確定抽取的BPEL代碼后,根據(jù)已有的Template Schema封裝生成模板,保存到模板庫中; 服務(wù)組合模塊,用于開發(fā)BPEL業(yè)務(wù)流程并且融合模板機(jī)制,完成對業(yè)務(wù)流程的開發(fā);完成對模板的組合操作,包括對接口中定義的所有輸入變量進(jìn)行對應(yīng)地賦值操作;對接口中定義的所有控制條件進(jìn)行對應(yīng)地重設(shè)操作;提供了 BPEL的基本活動和結(jié)構(gòu)化活動來幫助模板組合以及操作。
進(jìn)一步地,還包括 新業(yè)務(wù)導(dǎo)出模塊,用于對已經(jīng)編輯好的業(yè)務(wù)流程導(dǎo)出生成可執(zhí)行的BPEL腳本,包括對圖形化文件的分析,得到一系列有效的節(jié)點,同時將其中的模板中包含的有效信息提取出來,最后一個保存到BPEL腳本中。 本發(fā)明提供的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法及系統(tǒng),其靈活性好,抽取和組合的層次多樣,粒度也能進(jìn)行很好的控制;可以基于圖形化的開發(fā)界面,同時包含了 BPEL流程和模板融合的業(yè)務(wù)流程開發(fā),能有效的降低用戶二次開發(fā)的工作;利用本發(fā)明,用戶可以使用基于模板的擴(kuò)展標(biāo)簽來協(xié)助開發(fā),但是最終可轉(zhuǎn)換成可執(zhí)行的、符合規(guī)范的WS-BPEL腳本,能在不同的BPEL執(zhí)行引擎上運行;能夠很好的根據(jù)用戶的需求來生成其所需的模板,或者預(yù)先設(shè)計好行業(yè)內(nèi)的通用業(yè)務(wù)流程模板,具有很高的可定制性。
8


圖1是本發(fā)明的面向服務(wù)的開發(fā)環(huán)境中代碼復(fù)用的方法的示意2是模板模型的schema的定義結(jié)構(gòu)的一實施例的示意圖;圖3是本發(fā)明進(jìn)行服務(wù)抽取的流程圖;圖4是對BPEL文件進(jìn)行解析的流程圖;圖5是對模板進(jìn)行封裝的示意圖;圖6是用戶通過調(diào)色板使用模板庫進(jìn)行編輯的流程圖;圖7是開發(fā)過程進(jìn)行拼接的流程圖;圖8是完成對模板連線的編輯后對修改進(jìn)行保存的流程圖;圖9是模板導(dǎo)出的流程圖;圖10是本發(fā)明的系統(tǒng)驗證處理流程圖;圖ll是本發(fā)明的系統(tǒng)的結(jié)構(gòu)圖。
具體實施例方式
下面結(jié)合附圖和具體實施例對本發(fā)明作進(jìn)一步說明,以使本領(lǐng)域的技術(shù)人員可以
更好的理解本發(fā)明并能予以實施,但所舉實施例不作為對本發(fā)明的限定。 本發(fā)明是為了增加BPEL開發(fā)的靈活性和有效降低開發(fā)人員的二次開發(fā)的難度,
本發(fā)明不僅提供了一套完整的BPEL圖形化的開發(fā)環(huán)境,更提出和實現(xiàn)了一套基于模板機(jī)
制實現(xiàn)BPEL子流程復(fù)用的方法和系統(tǒng),從而讓開發(fā)人員不僅能通過圖形化的方式進(jìn)行業(yè)
務(wù)流程開發(fā),也能有效的提供一套可行的復(fù)用機(jī)制降低二次開發(fā)的難度,通過預(yù)設(shè)的行業(yè)
通用流程模板提高開發(fā)效率。本發(fā)明擁有獨立的模板模型,定義了一套模板標(biāo)簽來擴(kuò)展實
現(xiàn)了模板的抽取、封裝、拼接和導(dǎo)出的機(jī)制,最終得到的仍然是符合WS-BPEL規(guī)范的可執(zhí)行
的BPEL文件,因此,本發(fā)明開發(fā)的業(yè)務(wù)流程最終仍然是以BPEL腳本的形式展現(xiàn),也能在所
有的通用的BPEL執(zhí)行引擎上運行。 如圖l所示,本發(fā)明通過基于模板的機(jī)制來對需要重復(fù)利用的BPEL片段進(jìn)行有效的封裝,然后存入到模板庫中保存。本發(fā)明提供了一套完備的圖形化開發(fā)環(huán)境,不僅能有效的提高開發(fā)人員的效率,也能將模板機(jī)制和BPEL流程的開發(fā)融合在一起,提供一套完整高效的開發(fā)方式。在完成流程的編輯之后,系統(tǒng)會將編輯好的流程導(dǎo)出成可執(zhí)行的BPEL文件,去除之前對于BPEL片段所增加的封裝,完成到BPEL腳本的轉(zhuǎn)換。此外,整個系統(tǒng)也提供了完整的驗證機(jī)制,能對模板抽取、模板組裝和模板導(dǎo)出這幾個部分都提供BPEL的語法驗證支持。同時,對于模板復(fù)用機(jī)制提供了相應(yīng)的驗證機(jī)制。 本發(fā)明的代碼復(fù)用系統(tǒng)為了有效的復(fù)用BPEL代碼,首先需要完成對于BPEL代碼段的描述工作。當(dāng)系統(tǒng)用戶將自己需要進(jìn)行封裝的BPEL代碼段抽取出來后,該系統(tǒng)會自動將其封裝成為統(tǒng)一形式的模板,通過系統(tǒng)的解析,該模板會詳細(xì)記錄下抽取出來的BPEL代碼段的接口信息。因此,該系統(tǒng)必須首先提供了一套模板封裝的模型定義,用來保存所需要的相關(guān)信息。
系統(tǒng)的模型層完成了對于模板的定義,系統(tǒng)主要通過自定義的擴(kuò)展標(biāo)簽來完成對模板的各項操作。所以,系統(tǒng)通過定義模板的schema來實現(xiàn)建模的過程。對于需要被復(fù)用的BPEL片段,可以理解為一個函數(shù)中的代碼,而模板就是要給這段代碼進(jìn)行類似函數(shù)接口的定義和描述工作。那么作為一個模板,暴露給用戶使用時,就必須聲明其中的接口定義,主要包括幾個方面 〈template〉保存當(dāng)前模板的自身信息,如命名空間和模板名稱; 〈inputVariable〉保存模板中作為輸入變量的變量相關(guān)信息。包括輸入消息中的
所有輸入?yún)?shù)和參數(shù)的結(jié)構(gòu),以及在哪個活動中使用該輸入變量。 〈outputVariable〉保存模板中作為輸出變量的變量相關(guān)信息。包括輸出消息中的
所有輸出參數(shù)和參數(shù)的結(jié)構(gòu),以及在哪個活動使用了該輸出變量。
〈element〉說明了在變量中定義的具體參數(shù)的信息。 〈condition〉保存模板中作為控制條件的相關(guān)信息。包括該控制條件所在的控制
活動以及該控制條件的內(nèi)容和抽取時用戶增加的注釋。 〈activity〉保存在抽取的BPEL片段中包含的BPEL活動信息。 〈bpelCode〉保存模板封裝的BPEL片段。 〈wsdlCode〉保存模板封裝的BPEL片段相關(guān)聯(lián)的WSDL文件信息。
模板模型的schema的定義如圖2所示。 本發(fā)明的系統(tǒng)為用戶提供了一套定制自己所需要的BPEL模板,也就是模板抽取的機(jī)制。在開發(fā)BPEL流程時,尤其是在開發(fā)行業(yè)領(lǐng)域相關(guān)的流程時,有不少的業(yè)務(wù)邏輯其實都是類似的,或者是部分類似的。對于這些會被頻繁使用到的業(yè)務(wù)邏輯,如果能夠?qū)⑵浞庋b成模板,在開發(fā)時作為一個整體使用,必然給開發(fā)人員帶來極大的便利。
模板抽取是從一個已有的BPEL文件開始的。用戶對于自己感興趣的BPEL流程以及相關(guān)聯(lián)的WSDL文件,通過系統(tǒng)的向?qū)б氲较到y(tǒng)中來,然后系統(tǒng)會自動解析該BPEL流程和相關(guān)聯(lián)的WSDL文件,建立BPEL和WSDL模型。然后將BPEL流程的整個結(jié)構(gòu)都以圖形化的樹形結(jié)構(gòu)展示給用戶。用戶此時可以選擇自己需要復(fù)用的BPEL邏輯,讓系統(tǒng)進(jìn)行模板的抽取和封裝,生成用戶感興趣的模板,或者是用戶創(chuàng)建自己行業(yè)內(nèi)通用的業(yè)務(wù)流程模板,然后保存到模板庫中。 該系統(tǒng)提供了良好的靈活性和定制性,能讓用戶使用該系統(tǒng)建立自己的模板庫,可以將自己感興趣的BPEL業(yè)務(wù)邏輯封裝成模板保存到模板庫中。系統(tǒng)提供給用戶一套完整的模板抽取和封裝的功能。而這些抽取出來的模板能有效降低用戶的開發(fā)難度。
如圖3所示,該系統(tǒng)在進(jìn)行服務(wù)抽取的時候主要包括以下步驟
l.BPEL文件的解析。其具體的過程如圖4所示。 a)讀取用戶指定進(jìn)行模板抽取的BPEL文件,通過XML解析,首先創(chuàng)建BPELDocument對象。 b)根據(jù)用戶指定的WSDL文件,配合解析BPEL文件時,取得所引入的WSDL文件信息。提取WSDL文件中的message、 partnerLinkType和portType元素的信息進(jìn)行保存。
c)采用遞歸的方式來遍歷整個BPEL文件的樹形結(jié)構(gòu),解析每一個BPEL活動。對于是BPEL基本活動提取出variable、 partnerLinkType和portType等屬性添加到模板中進(jìn)行保存。對于BPEL容器活動,如果存在控制條件的,應(yīng)該提取其condition的屬性值添加到模板信息中進(jìn)行保存。 2.對進(jìn)行模板抽取的BPEL文件和WSDL文件的解析工作完成后,系統(tǒng)會相應(yīng)的建
立BPEL的樹形結(jié)構(gòu),并把這個結(jié)構(gòu)提供給wizard的圖形化顯示模塊。 3.圖形化顯示模塊在接收到請求后,會用可選多叉樹的方式來展示整個BPEL的
10層次結(jié)構(gòu)給用戶,其中會清楚表示出節(jié)點的層次包含關(guān)系,以及節(jié)點的名稱,類型和一些有關(guān)的屬性,如condition或variable等。 4.然后,用戶針對展示出來的BPEL結(jié)構(gòu)圖,選取自己需要抽取成為模板的部分。
5.然后,系統(tǒng)就會將用戶選中的BPEL片段提取出來,保存至模板中。同時,將這段BPEL代碼相關(guān)聯(lián)的屬性信息和WSDL信息都一并提取出來。 6.展示提取的BPEL片段中,需要用戶進(jìn)行操作的接口信息,主要包括輸入變量、輸出變量和控制條件。用戶此時還可以對每個變量和條件添加自己的注釋,以方便其他的用戶使用該模板。 7.然后,將BPEL片段,解析出來的變量值和控制條件等信息都保存至模板文件中,也就完成了對模板的封裝工作。 8.最后,將得到的模板保存到指定的模板庫中。 系統(tǒng)在對模板進(jìn)行封裝時,需要確定該模板的接口的相關(guān)信息,主要是輸入變量、輸出變量以及模板中包含的控制條件。但是在一個流程片段中存在很多的活動,這些活動都會使用到變量,如何來區(qū)分其中哪些是需要外界輸入的變量,哪些是輸出給外界的變量,還有哪些變量只是在抽取的BPEL片段內(nèi)部使用的?;镜乃悸肥菍Τ槿〕鰜淼腂PEL片段進(jìn)行解析,對其中包含的每一個BPEL活動所使用的變量進(jìn)行分析。建立兩個集合,一個用來存儲每個活動需要輸入的變量,另一個用來存儲每個活動需要輸出的變量。采用集合的話,每個集合中不會包含有重復(fù)的變量。完成集合后,就將兩個集合中公共的變量去除,因為這部分共有的變量也就是在抽取的BPEL片段內(nèi)部使用的變量,與片段外的流程沒有什么聯(lián)系。在輸入集合中剩余的部分就是封裝模板中需要的輸入變量,而在輸出集合中剩余的部分就是封裝模板中將會輸出的變量。
模板封裝具體的實現(xiàn)步驟如圖5所示,包括 1.解析抽取出來的BPEL片段,分析得到其包含的所有BPEL活動,并每個BPEL活動都保存到nodeList中。 2.如果nodeList不為空,進(jìn)入循環(huán)。讀取nodeList中當(dāng)前的BPEL活動。
3.判斷從nodeList中讀取出來的BPEL活動是BPEL的基本活動,還是BPEL的容器活動。 4.如果此時的BPEL活動是BPEL基本活動,則開始提取BPEL基本活動中的各個變量。由于不同的BPEL基本活動對于變量的使用是不一樣的,所以這里需要分別對待。
5.如果讀入的BPEL基本活動是invoke活動,則提取invoke活動中的inputVairable保存到輸入變量列表中。然后再提取invoke活動中的outputVariable保存到輸出變量列表中。 6.如果讀入的BPEL基本活動是assign活動,則提取assign活動中的from中的變量保存到輸入變量列表中。然后再提取assign活動中的to中的變量保存到輸出變量列表中。 7.如果讀入的BPEL基本活動是receive活動,則提取receive活動中的variable保存到輸入變量列表中。 8.如果讀入的BPEL基本活動是r印ly活動,則提取r印ly活動中的variable保存到輸出變量列表中。[O103] 9.如果讀入的BPEL基本活動是onMessage活動,則提取onMessage活動中的variable保存到輸入變量列表中。 10.如果讀入的BPEL基本活動是onEvent活動,則提取onEvent活動中的variable保存到輸入變量列表中。 11.判斷從nodeList中讀取出來的BPEL活動是BPEL的容器活動,則繼續(xù)判斷該容器活動是否含有控制條件。 12.如果該容器活動中包含控制條件的話,先將條件抽取出來保存到模板中,然后
將控制條件所在的路徑也要保存到模板中。 13.判斷抽取出來的控制條件中是否含有變量。 14.如果控制條件中含有變量的話,將所有的變量解析出來保存到輸入變量中列表。如果控制條件中沒有包含變量的話,結(jié)束節(jié)點的變量分析。 15.如果判斷容器活動中不包含控制條件,接著需要再判斷該容器活動是否是scope活動。 16.如果是scope活動還要繼續(xù)判斷該scope中是否定義了局部變量。 17.如果scope活動中定義了局部變量,則將所有的局部變量保存到輸出變量中。 18.如果scope活動中沒有定義局部變量,結(jié)束節(jié)點的變量分析。 本發(fā)明的系統(tǒng)對于模板的使用和創(chuàng)建一個BPEL活動沒有什么區(qū)別,也就是說該
系統(tǒng)將模板的使用與BPEL的流程開發(fā)有機(jī)的結(jié)合在一起。當(dāng)該系統(tǒng)的用戶打開圖形編輯
窗口 ,希望開發(fā)一個新的業(yè)務(wù)流程時,該系統(tǒng)會在提供BPEL的基本編輯能力之外,也提供
基于模板的流程編輯方式。 系統(tǒng)會自動讀入在模板庫中保存的模板的信息,將模板導(dǎo)入到當(dāng)前的業(yè)務(wù)流程編輯窗口中,以供用戶隨時使用。這樣用戶就能輕松的復(fù)用已經(jīng)抽取出來的模板了 。為自己的模板定義上相關(guān)的變量信息和控制條件,同時配合上BPEL活動來進(jìn)行模板的控制和補全,這樣就能快速組合開發(fā)出用戶所需要的新流程了。 當(dāng)已經(jīng)建立了對應(yīng)的模板庫后,就可以以模板庫中的模板作為起點,配合上BPEL的基本活動和容器活動實現(xiàn)靈活的業(yè)務(wù)開發(fā)方式。 如圖6所示,當(dāng)用戶打開編輯窗口開始創(chuàng)建新的業(yè)務(wù)時,調(diào)色板模塊會自動讀取此時模板庫中所有的模板信息,并且導(dǎo)入到圖形界面顯示,以供調(diào)用。然后用戶會多次拖拽需要使用的BPEL活動或者是模板進(jìn)入編輯窗口 ,通過連線來確定各個活動之間的關(guān)系。通過圖形化的方式來完成系統(tǒng)和用戶之間的交互,幫助用戶以圖形拖拽的方式來完成流程的編輯工作。
在進(jìn)行流程的拼接的過程中,其具體的步驟如圖7所示,包括 1.調(diào)色板模塊會自動讀取此時模板庫中所有的模板信息,并且導(dǎo)入到圖形界面顯示面板中,以供調(diào)用。 2.用戶想要編輯流程,因此從調(diào)色板中拖拽一個圖標(biāo)到編輯窗口中。此時,需要判斷用戶選擇的是活動的圖標(biāo)還是選擇的連線。 3.如果用戶選擇的是活動,接著判斷用戶選擇的是一個BPEL活動,還是選擇了一個模板。 4.如果用戶選擇的是一個BPEL活動,那么首先在編輯窗口中顯示此BPEL活動的圖標(biāo)。 5.然后用戶需要對所添加的BPEL活動的屬性進(jìn)行相應(yīng)的設(shè)置。如果是BPEL基本活動,那么需要為該活動創(chuàng)建或者導(dǎo)入其依賴的partnerLink,然后再為該活動創(chuàng)建和導(dǎo)入相關(guān)的變量。如果用戶選擇的是容器活動,同時該容器活動有控制條件需要指定時,如if的判斷條件,那用戶應(yīng)該添加對應(yīng)的控制條件。 6.如果用戶沒有選擇BPEL活動,而是選擇了添加一個模板。首先也是在編輯窗口中顯示模板圖標(biāo)。 7.提取模板文件中保存的信息,導(dǎo)入該模板所依賴的WSDL文件。
8.提取模板文件中保存的信息,導(dǎo)入該模板所依賴的partnerLink。
9.提取模板文件中保存的信息,導(dǎo)入該模板所依賴的變量。 10.如果用戶一開始選擇的是添加一個連線。用戶指定好該連線的源和目標(biāo),在編輯窗口上顯示出連線。 11.判斷此時連線的目標(biāo)節(jié)點是不是一個模板。 12.如果連線的目標(biāo)節(jié)點是一個模板,用戶可以雙擊該連線,系統(tǒng)會彈出一個接口
編輯窗口,用來完成與用戶的交互操作。在此用戶可以為模板選擇匹配的輸入變量,也可以
為模板添加匹配的控制條件。系統(tǒng)保存用戶對于模板做出的修改操作。 13.用戶是否還繼續(xù)編輯流程。如果繼續(xù)則重復(fù)上面的過程。如果用戶完成了編
輯的話,就可以保存退出了。 如圖8所示,當(dāng)用戶完成對于模板連線的編輯后,點擊保存退出時,會觸發(fā)下列步驟來實現(xiàn)對修改的保存。 1.首先讀取variableList中的變量信息,并獲取某節(jié)點所在模板信息。
2.判斷是否是當(dāng)前正在編輯的模板。 3.如果不是當(dāng)前正在編輯的模板,則繼續(xù)讀取variableList中的變量信息。
4.如果是當(dāng)前正在編輯的模板,則首先建立對應(yīng)的BPEL Document,即建立完整的BPEL樹。 5.根據(jù)模板中保存的變量路徑信息,定位到要修改的變量或者是條件在模板中的位置。 6.然后更新BPEL代碼的信息。 7.判斷是否還有variableList中的變量沒有處理。 8.如果variableList中還有變量沒有處理,回到第1步進(jìn)行循環(huán)。 9.如果variableList中的變量都已經(jīng)處理了,結(jié)束循環(huán)。 當(dāng)用戶完成了基于模板的新的業(yè)務(wù)流程的開發(fā)工作后,此時得到的是基于擴(kuò)展標(biāo)簽完成的包含有模板的文件。此時得到的文件不是標(biāo)準(zhǔn)的BPEL腳本,無法部署到BPEL執(zhí)行引擎中運行。所以,該系統(tǒng)提供了一套導(dǎo)出的機(jī)制,用來實現(xiàn)將包含模板的流程轉(zhuǎn)換為標(biāo)準(zhǔn)的BPEL可執(zhí)行文件。這樣得到的BPEL腳本就能在任何一個BPEL執(zhí)行引擎上運行了 。
當(dāng)用戶完成了基于模板的業(yè)務(wù)流程的開發(fā)之后,都是為了最終能夠得到一個可執(zhí)行的BPEL文件。此時用戶需要將自己編輯好的業(yè)務(wù)流程導(dǎo)出成BPEL文件,也就是調(diào)用系統(tǒng)中的模板導(dǎo)出功能,生成可執(zhí)行的BPEL文件。
如圖9所示,模板導(dǎo)出的過程主要步驟如下所示
13
1.首先遍歷整個流程代碼中的連線,將所有連線連接的節(jié)點都添加到nodeList 中,在該nodeList中沒有相同的節(jié)點。 2.找到整個流程的起點,即同時滿足這樣條件的點一是本身有連線相連的話, 只是作為源節(jié)點,而不是目標(biāo)節(jié)點;二是如果本事沒有連線相連的話,其也沒有父親節(jié)點。 三是節(jié)點本身是容器活動sequence的話,就是他的第一個孩子節(jié)點;這樣點就是所需要的 流程起點。 3.然后讀入當(dāng)前鎖定的節(jié)點。 4.判斷當(dāng)前鎖定的節(jié)點是BPEL活動還是模板。 5.如果當(dāng)前節(jié)點是BPEL活動,則直接到第8步繼續(xù)執(zhí)行。 6.如果當(dāng)前節(jié)點是模板,則先必須得提取模板中保存的BPEL片段 7.然后根據(jù)拼接時保存的修改操作,對提取出的BPEL片段進(jìn)行更新操作。然后繼
續(xù)執(zhí)行第8步操作。 8.不論當(dāng)前節(jié)點是BPEL活動還是模板,都要將該節(jié)點按照連線的順序和層次關(guān) 系導(dǎo)出到指定的BPEL文件中保存。作為BPEL活動需要導(dǎo)出的是本身的活動定義和相關(guān)的 屬性定義。作為模板需要導(dǎo)出模板中定義好的但是已經(jīng)更新過的BPEL片段,
9.然后在BPEL文件中導(dǎo)入與當(dāng)前節(jié)點相關(guān)的WSDL文件,以及相關(guān)的 partnerLink禾口 variable的定義。 10.查看是否還有節(jié)點沒有導(dǎo)出到指定的BPEL文件中,如果還有的話,就準(zhǔn)備讀 取下一個節(jié)點,然后循環(huán)回到第3步繼續(xù)執(zhí)行。 11.如果所有的節(jié)點都已經(jīng)正確導(dǎo)出,跳出循環(huán),完成整個導(dǎo)出的過程。 該系統(tǒng)為這個業(yè)務(wù)流程的開發(fā)過程都提供了相應(yīng)的驗證工作。 模板抽取階段,會對作為模板的BPEL文件和相關(guān)的WSDL文件進(jìn)行BPEL語法驗
證。從而保證模板抽取是在一個正確的流程的基礎(chǔ)上開始的。 模板拼接階段,驗證會對當(dāng)前編輯的流程進(jìn)行BPEL語法的驗證,同時,也會在編 輯的過程中進(jìn)行語義上的驗證。如當(dāng)用戶未對模板的輸入或輸出變量進(jìn)行匹配時,提醒用 戶完成操作。當(dāng)模板充當(dāng)流程測起點時,要檢驗?zāi)0逯惺欠裼锌梢詣?chuàng)建實例的receive或 是pick活動。 1.創(chuàng)建bpel文件的D0M模型(即建立bpel文件的內(nèi)存表示,用樹形結(jié)構(gòu)表示 bpel文件元素節(jié)點之間的層次關(guān)系); 2.進(jìn)行DOM模型和EMF模型的映射,驗證工程利用EMF對BPEL文件進(jìn)行持久化建 模,需要建立DOM模型和EMF模型之間的一一映射關(guān)系; 3.將EMF模型轉(zhuǎn)換為INode模型,驗證工程使用樹形結(jié)構(gòu)對bpel文件進(jìn)行建模, 這種樹形結(jié)構(gòu)的節(jié)點用INode結(jié)構(gòu)表示。 在對BPEL文件進(jìn)行建模之后,通過對模型進(jìn)行兩次遍歷(two pass walk)完成對 BPEL模型中每個節(jié)點的語法驗證,第一次遍歷為第二次遍歷提供有用的狀態(tài)信息。這里,驗 證器被設(shè)計成為BPEL樹形結(jié)構(gòu),這樣,對于BPEL樹中不同的節(jié)點都有相應(yīng)類型的驗證器, 如對于變量有VariableValidator,對于While結(jié)構(gòu)有WhileValidator,對于Until結(jié)構(gòu) 有UntilValidator等等; 驗證器的輸入是BPEL模型的根節(jié)點(INode類型)和IModelQuery,輸出是一個Iprob 1 em類型的數(shù)組,用于保存驗證中出現(xiàn)的語法問題。 IModelQuery是一個接口 ,通過查詢實現(xiàn)以下方面的驗證 某個BPEL節(jié)點是否合法(通過返回一個INode類型的節(jié)點); 變量類型是否匹配; Xpath表達(dá)式的合法性; 問題的準(zhǔn)確定位。 驗證的基本過程 1.初始化操作按照BPEL的樹形結(jié)構(gòu)依次生成每個模型節(jié)點的validator,將它們 放入到隊列fValidator中; 這里,所有的Validator由factories生成。 Factories在org. eclipse, bpel. validation, model. RuleFactory中實現(xiàn)注冊。
關(guān)于Validator需要注意如下幾點 (1) Validator針對不同的節(jié)點,每個BPEL元素節(jié)點可能需要調(diào)用很多個 Validator ; (2)創(chuàng)建Validator的factory必須實現(xiàn)注冊,每個factory都必須實現(xiàn)Ifactory
接口完成創(chuàng)建和注冊。 2.第一遍遍歷 (1)訪問fValidator隊列中,得到每個validator的相關(guān)信息; (2)調(diào)用當(dāng)前需要執(zhí)行的fCurrentRule,將它放入至堆棧fStackRule中; (3)調(diào)用Validator利用fCurrentRule進(jìn)行語法驗證。 3.第二遍遍歷將第一遍遍歷中出現(xiàn)的問題依次放入問題隊列IProblem類型的數(shù)組。 該系統(tǒng)是基于Eclipse插件開發(fā)技術(shù)來實現(xiàn)的,主要是利用EMF(EclipseModel Framework)禾口 GEF (Graphical Eclipse Framework)來實現(xiàn)的。其中EMF用來完成建 模的工作,GEF用來完成圖形化的功能。圖2是整個系統(tǒng)設(shè)計的結(jié)構(gòu)圖,該系統(tǒng)采用 MVC (Mode 1 -View-Contro 11 er)的設(shè)計思路來實現(xiàn)。
模型層 模型層是整個系統(tǒng)的基礎(chǔ),提供整個系統(tǒng)圖形化和各項功能所需要的模型,系統(tǒng) 主要建立了兩個基本的模型BPEL模型和模板模型。
BPEL模型 由于是在BPEL的基礎(chǔ)上來生成模板的,首先需要對BPEL進(jìn)行建模。在WS-BPEL2. 0 的規(guī)范中,已經(jīng)定義好了 BPEL語法的schema,此方案也是基于此而完成BPEL的建模。由于 使用了 EMF來建模,在導(dǎo)入了 BPEL的schema定義后,還需要在模型中增加,對于WSDL的建 模來支持BPEL與web service的結(jié)合。
模板模型 針對模板進(jìn)行建模,主要用來實現(xiàn)對于BPEL代碼的封裝,從而構(gòu)建能夠重復(fù)使用 的模板??紤]到模板的幾個特點可重復(fù)性,靈活性。需要對抽取出來作為模板使用的BPEL 代碼進(jìn)行建模,模板模型能清楚的說明BPEL模板的"輸入變量"、"輸出變量"、"控制條件" 和"結(jié)構(gòu)"等信息。這些都是抽取的BPEL代碼形成模板后會進(jìn)行匹配修改的地方,
15
控制層 控制層是對整個系統(tǒng)中的可視化進(jìn)行控制操作,并且實現(xiàn)了 BPEL腳本解析、模板
抽取和封裝、服務(wù)組合和新業(yè)務(wù)導(dǎo)出的功能。 BPEL腳本解析模塊BPEL腳本解析模塊提供了對BPEL腳本進(jìn)行解析的功能,通過基于Dom的XML解 析,依賴BPEL的EMF模型,就能對用戶要抽取的BPEL腳本以及相關(guān)聯(lián)的WSDL文件建立樹 形模型,獲取BPEL腳本中的每一個BPEL活動的信息。
模板抽取和封裝模塊 在完成了對BPEL腳本的解析操作之后,模板抽取和封裝模塊主要完成對于用戶 選中的BPEL腳本片段進(jìn)行抽取,通過給用戶展示整個BPEL的結(jié)構(gòu),然后由用戶來自主選 擇需要進(jìn)行抽取和封裝的BPEL邏輯。在確定抽取的BPEL代碼后,封裝模塊會根據(jù)已有的 Template Schema封裝生成模板,保存到模板庫中。
服務(wù)組合模塊 服務(wù)組合模塊主要用來完成對模板的組合操作。在流程中使用到模板時,需要對
模板封裝出來的接口進(jìn)行相應(yīng)的處理,主要進(jìn)行以下一些操作 1.對接口中定義的所有輸入變量進(jìn)行對應(yīng)的賦值操作。 2.對接口中定義的所以條件進(jìn)行對應(yīng)的重設(shè)操作。 3.提供了 BPEL的基本活動和結(jié)構(gòu)化活動來幫助模板組合,以及操作。 服務(wù)組合模塊還提供了基于BPEL的可視化的交互界面來方便用戶完成以上的操
作。分析現(xiàn)在編輯的流程中存在哪些變量,以樹形結(jié)構(gòu)將其展示出來,能夠快捷的編輯這些
變量來完成交互操作。 新業(yè)務(wù)導(dǎo)出模塊 新業(yè)務(wù)導(dǎo)出模塊主要用來對已經(jīng)編輯好的業(yè)務(wù)流程導(dǎo)出生成可執(zhí)行的BPEL腳 本。用戶在完成新業(yè)務(wù)的圖形化開發(fā)后得到的文件并不是標(biāo)準(zhǔn)的BPEL腳本,就需要新業(yè)務(wù) 導(dǎo)出模塊來完成到BPEL腳本的轉(zhuǎn)換工作。主要完成對圖形化文件的分析,得到一系列有效 的節(jié)點,同時將其中的模板中包含的有效信息提取出來,最后一個保存到BPEL腳本中。
UI層 UI層主要是整個系統(tǒng)的可視化的部分,主要實現(xiàn)了調(diào)色板、編輯窗口、屬性視圖、
大綱視圖和向?qū)б晥D等功能。 調(diào)色板 調(diào)色板主要用來顯示用于流程組合的活動和模板,這里是圖形化編輯的起點。 調(diào)色板的內(nèi)容有兩部分組成BPEL活動和模板庫中的模板。所以每次打開圖形化
的編輯界面時,調(diào)色板都會完成與模板庫的同步跟新操作。 1.讀取模板庫 2.遍歷模板庫中的所有模板 3.在調(diào)色板中顯示出所有的模板,如果模板庫添加了新的模板,或者是刪除了過 時的模板,都能在調(diào)色板中保持更新。
編輯窗口 編輯窗口主要用來進(jìn)行流程的編輯組合。當(dāng)從調(diào)色板中選中一個BPEL活動或者模板,然后拖拽到編輯窗口中。這里能將BPEL活動和模板二者有機(jī)的結(jié)合在一起進(jìn)行業(yè)務(wù)
邏輯的開發(fā)。 屬性視圖 屬性窗口主要用來顯示在編輯窗口中被選中的圖標(biāo)代表的活動的屬性,當(dāng)沒有選
中任何圖標(biāo)時,屬性窗口顯示背景的相關(guān)信息。 大綱視圖 大綱視圖主要顯示當(dāng)前窗口中所有的活動的簡單信息和層次包含關(guān)系。
向?qū)б晥D 該系統(tǒng)主要實現(xiàn)了兩個向?qū)б晥D,一個是導(dǎo)入向?qū)В硪粋€是導(dǎo)出向?qū)?。?dǎo)入向?qū)?br> 用來完成模板的抽取過程的用戶交互,最終實現(xiàn)模板的封裝和保存。導(dǎo)出向?qū)в脕硗瓿尚?的業(yè)務(wù)流程導(dǎo)出成可執(zhí)行的BPEL腳本的用戶交互,有用戶來制定導(dǎo)出的目標(biāo)目錄和文件
名,并將導(dǎo)出的文件以指定文件名保存到指定目錄。
驗證層 驗證層的主要功能是在系統(tǒng)流程的不同階段對系統(tǒng)中的相關(guān)操作進(jìn)行必要的驗 證工作。主要是正對三個階段來實施對應(yīng)的驗證工作模板抽取、模板組合和模板導(dǎo)出,進(jìn) 而也是對系統(tǒng)的各個層次的操作進(jìn)行對應(yīng)的驗證工作模型建立、BPEL腳本解析、模板抽 取、服務(wù)組合和新業(yè)務(wù)生成等操作。 以上所述實施例僅是為充分說明本發(fā)明而所舉的較佳的實施例,本發(fā)明的保護(hù)范 圍不限于此。本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明基礎(chǔ)上所作的等同替代或變換,均在本發(fā)明 的保護(hù)范圍之內(nèi)。本發(fā)明的保護(hù)范圍以權(quán)利要求書為準(zhǔn)。
1權(quán)利要求
一種面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制的BPEL子流程復(fù)用的方法,其特征在于,包括以下步驟A.生成模板步驟解析BPEL流程的結(jié)構(gòu),接收用戶的指令定位需要進(jìn)行復(fù)用的BPEL子流程,然后抽取用戶需要復(fù)用的BPEL子流程,根據(jù)定義的模板模型對子流程進(jìn)行封裝,并且給出封裝后模板的接口定義,最后將生成的模板保存到本地的模板庫中;B.組裝模板步驟將模板庫中的模板加載到業(yè)務(wù)流程的編輯開發(fā)環(huán)境中,并與模板庫保持同步更新,并提供對于模板的接口的對接;對模板進(jìn)行相應(yīng)的BPEL語法驗證和模板相關(guān)檢驗;C.導(dǎo)出模板步驟將含有模板擴(kuò)展標(biāo)簽的BPEL業(yè)務(wù)流程轉(zhuǎn)換為標(biāo)準(zhǔn)的可執(zhí)行的BPEL,包括將調(diào)用的已經(jīng)封裝的BPEL模板中的變量、條件參數(shù)根據(jù)接口中的參數(shù)進(jìn)行實例化的轉(zhuǎn)換,得到符合具體流程要求的BPEL片段,然后補充完整BPEL流程,得到可執(zhí)行的標(biāo)準(zhǔn)BPEL流程。
2. 根據(jù)權(quán)利要求1所述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用 的方法,其特征在于,所述步驟A具體包括Al.對BPEL文件進(jìn)行解析;A2.建立BPEL的樹形結(jié)構(gòu),并把該結(jié)構(gòu)提供給圖形化顯示模塊;A3.圖形化顯示模塊用可選多叉樹的方式來展示整個BPEL的層次結(jié)構(gòu)給用戶,清楚表 示出節(jié)點的層次包含關(guān)系、節(jié)點的名稱、類型和相關(guān)屬性;A4.用戶從所BPEL樹形結(jié)構(gòu)選取自己需要抽取封裝成為模板的部分;A5.將用戶選中的BPEL片段提取出來保存至模板中,同時將該BPEL片段相關(guān)的屬性信 息和WSDL信息都一并提取出來;A6.展示提取的BPEL片段中,需要用戶進(jìn)行操作的接口信息,包括輸入變量、輸出變量 和控制條件,保存至模板文件中,并將得到的模板保存到模板庫中。
3. 根據(jù)權(quán)利要求2述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的 方法,其特征在于,所述步驟Al中對BPEL文件進(jìn)行解析包括a) 讀取用戶指定進(jìn)行模板抽取的BPEL文件,通過XML解析,首先創(chuàng)建BPEL文檔對象;b) 根據(jù)用戶指定的相關(guān)聯(lián)的WSDL文件,配合解析BPEL文件時,取得所引入的WSDL文 件信息,提取WSDL文件中的message、partnerLinkType和portType元素的信息進(jìn)行保存;c) 采用遞歸的方式來遍歷整個BPEL文件的樹形結(jié)構(gòu),解析每一個BPEL活動,對于 BPEL基本活動提取出variable、 partnerLinkType和portType屬性添加到模板中進(jìn)行保 存;對于BPEL容器活動,如果存在控制條件的,提取其condition的屬性值添加到模板信息 中進(jìn)行保存。
4. 根據(jù)權(quán)利要求3所述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用 的方法,其特征在于,所述步驟A6中,所述展示的輸入變量和輸出變量通過以下方式得到首先,找出復(fù)用的BPEL子流程中的所有變量。保證在封裝模板的接口時,不會出現(xiàn)變 量的丟失現(xiàn)象;然后,遍歷子流程中的所有活動,確定子流程中的輸入變量集合和輸出變量集合; 最后,去除兩個集合中的公共變量,得到所述BPEL模板封裝時所需定義的輸入變量和 輸出變量。
5. 根據(jù)權(quán)利要求4所述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法,其特征在于,所述步驟A中,模板的封裝具體包括解析抽取出來的BPEL片段,分析得到其包含的所有BPEL活動,并將每個BPEL活動都保存到節(jié)點列表nodeList中。讀取nodeList中當(dāng)前的BPEL活動,判斷該BPEL活動是BPEL的基本活動,還是BPEL的容器活動,如果是BPEL基本活動,提取BPEL基本活動中的各個變量;如果是BPEL的容器活動,則繼續(xù)判斷該容器活動是否含有控制條件,如果該容器活動中包含控制條件,先將控制條件抽取出來保存到模板中,然后將控制條件所在的路徑也保存到模板中,判斷抽取出來的控制條件中是否含有變量,如果有,將所有的變量解析出來保存到輸入變量列表中;如果沒有,結(jié)束節(jié)點的變量分析;如果容器活動中不包含控制條件,再判斷該容器活動是否是scope活動,如果是,判斷該scope活動中是否定義了局部變量,如果定義了局部變量,則將所有的局部變量保存到輸出變量中,如果scope活動中沒有定義局部變量,結(jié)束節(jié)點的變量分析。
6. 根據(jù)權(quán)利要求5所述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法,其特征在于,所述步驟B具體包括讀取模板庫中所有的模板信息,并且導(dǎo)入到圖形界面顯示面板中;用戶從所述圖形界面顯示面板中選擇活動或連線,如果用戶選擇的是活動,判斷用戶選擇的是BPEL活動還是模板,如果是BPEL活動,先在編輯窗口中顯示此BPEL活動的圖標(biāo),然后由用戶對所添加的BPEL活動的屬性進(jìn)行設(shè)置如果是BPEL基本活動,為該活動創(chuàng)建或者導(dǎo)入其依賴的partnerLink,然后再為該活動創(chuàng)建和導(dǎo)入相關(guān)的變量;如果用戶選擇的是容器活動,同時該容器活動有控制條件需要指定,由用戶添加對應(yīng)的控制條件;如果用戶選擇了模板,首先在編輯窗口中顯示模板圖標(biāo),提取模板文件中保存的信息,導(dǎo)入該模板所依賴的WSDL文件、partnerLink和變量;如果用戶選擇的是連線,由用戶指定好該連線的源和目標(biāo),在編輯窗口上顯示出連線,判斷此時連線的目標(biāo)節(jié)點是否為模板,如果是,由用戶為模板選擇匹配的輸入變量,或為模板添加匹配的控制條件,保存用戶對于模板做出的修改操作,判斷用戶是否還繼續(xù)編輯流程,如果是,重復(fù)上述的過程;如果否,保存退出。
7. 根據(jù)權(quán)利要求6所述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法,其特征在于,用戶完成模板接口交互操作保存退出時,觸發(fā)以下操作讀取變量列表variableList中的變量信息,并獲取某節(jié)點所在的模板信息;判斷該節(jié)點所在的模板是否為當(dāng)前正在編輯的模板,如果不是,繼續(xù)讀取variableList中的變量信息;如果是,首先建立對應(yīng)的BPEL文件即完整的BPEL樹,根據(jù)模板中保存的變量路徑信息,定位到要修改的變量或者是條件在模板中的位置,然后更新BPEL代碼的信息,判斷variableList中是否還有變量沒有處理,如果有,讀取未處理的變量進(jìn)行上述處理;如果沒有,結(jié)束循環(huán)。
8. 根據(jù)權(quán)利要求7所述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法,其特征在于,所述步驟C具體包括CI.首先遍歷整個流程代碼中的連線,將所有連線連接的節(jié)點都添加到nodeList中,在該nodeList中沒有相同的節(jié)點;找到整個流程的起點,然后讀入當(dāng)前鎖定的節(jié)點;C2.判斷當(dāng)前鎖定的節(jié)點是BPEL活動還是模板;C3.如果當(dāng)前節(jié)點是BPEL活動,轉(zhuǎn)到步驟C4 ;如果當(dāng)前節(jié)點是模板,提取模板中保存的BPEL片段,然后根據(jù)拼接時保存的修改操作,對提取出的BPEL片段進(jìn)行更新操作,轉(zhuǎn)到步驟C4 ;C4.將該節(jié)點按照連線的順序和層次關(guān)系導(dǎo)出到指定的BPEL文件中保存,在為BPEL活動時導(dǎo)出的是本身的活動定義和相關(guān)的屬性定義;在為模板時導(dǎo)出模板中定義好的但是已經(jīng)更新過的BPEL片段;C5.在BPEL文件中導(dǎo)入與當(dāng)前節(jié)點相關(guān)的WSDL文件,以及相關(guān)的partnerLink和variable的定義;C6.判斷是否還有節(jié)點沒有導(dǎo)出到指定的BPEL文件中,如果有,讀取下一個節(jié)點,執(zhí)行步驟C2 C5 ;如果沒有,跳出循環(huán),完成導(dǎo)出過程。
9. 面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的系統(tǒng),其特征在于,包括BPEL腳本解析模塊,用于對BPEL腳本進(jìn)行解析,通過基于Dom的XML解析,依賴BPEL的EMF模型,對用戶要抽取的BPEL腳本以及相關(guān)聯(lián)的WSDL文件建立樹形模型,獲取BPEL腳本中的每一個BPEL活動的信息;模板抽取和封裝模塊,根據(jù)所述BPEL腳本解析模塊的解析結(jié)果,用于對用戶選中的BPEL腳本片段進(jìn)行抽取,通過給用戶展示整個BPEL的結(jié)構(gòu),由用戶選擇需要進(jìn)行抽取和封裝的BPEL邏輯;在確定抽取的BPEL代碼后,根據(jù)已有的Template Schema封裝生成模板,保存到模板庫中;服務(wù)組合模塊,用于開發(fā)BPEL業(yè)務(wù)流程并且融合模板機(jī)制,完成對業(yè)務(wù)流程的開發(fā);完成對模板的組合操作,包括對接口中定義的所有輸入變量進(jìn)行對應(yīng)地賦值操作;對接口中定義的所有控制條件進(jìn)行對應(yīng)地重設(shè)操作;提供了 BPEL的基本活動和結(jié)構(gòu)化活動來幫助模板組合以及操作。
10. 根據(jù)權(quán)利要求9所述的面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的系統(tǒng),其特征在于,還包括新業(yè)務(wù)導(dǎo)出模塊,用于對已經(jīng)編輯好的業(yè)務(wù)流程導(dǎo)出生成可執(zhí)行的BPEL腳本,包括對圖形化文件的分析,得到一系列有效的節(jié)點,同時將其中的模板中包含的有效信息提取出來,最后一個保存到BPEL腳本中。
全文摘要
本發(fā)明公開了一種面向服務(wù)的開發(fā)環(huán)境中基于模板機(jī)制實現(xiàn)BPEL子流程復(fù)用的方法及系統(tǒng)。其包括對模板進(jìn)行模型定義,以保存抽取BPEL子流程進(jìn)行復(fù)用所需要的相關(guān)信息;對已有的BPEL文件和相關(guān)聯(lián)的WSDL文件進(jìn)行解析,建立BPEL和WSDL模型,根據(jù)所建立的模型,從已有BPEL文件中抽取需要的BPEL子流程,封裝成模板并保存到模板庫中;開發(fā)時從模板庫中讀取模板信息,將模板調(diào)入到BPEL流程可視化開發(fā)窗口,使用戶在進(jìn)行BPEL流程開發(fā)的同時也能調(diào)用模板來輔助流程設(shè)計和開發(fā),從而實現(xiàn)模板機(jī)制和BPEL流程開發(fā)的統(tǒng)一。本發(fā)明可實現(xiàn)對BPEL子流程的復(fù)用,能通過預(yù)先設(shè)計的行業(yè)內(nèi)通用流程模板或者用戶自定義復(fù)用模板,大大減少開發(fā)人員的工作量,提高服務(wù)組合的開發(fā)效率,縮短開發(fā)周期。
文檔編號G06F9/45GK101777004SQ20101010168
公開日2010年7月14日 申請日期2010年1月26日 優(yōu)先權(quán)日2010年1月26日
發(fā)明者程渤, 章洋, 鄧敏, 陳俊亮 申請人:北京郵電大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1