摘 要: 工作流技術是實現(xiàn)業(yè)務流程自動化的關鍵技術,但現(xiàn)有的工作流技術已不能滿足目前分布式異構和松散耦合的企業(yè)信息資源需求。利用SOA技術,結合JBPM,提出了一種基于SOA和JBPM的工作流引擎模型,并對其流程控制與任務管理進行了分析,最后,基于SOAP、WSDL協(xié)議和JPDL實現(xiàn)了此工作流引擎,證明了其有效性。
關鍵詞: 工作流引擎;SOA;JBPM;流程實例;模型
工作流是全部或部分由計算機支持或自動處理的業(yè)務過程,目的是為了提高效率、降低生產(chǎn)成本、提高企業(yè)整體的生產(chǎn)管理水平和競爭力。但是現(xiàn)代企業(yè)信息資源已呈現(xiàn)出一種分布式異構和松耦合的特點,傳統(tǒng)的工作流已不能滿足其功能要求。
面向服務的體系結構SOA[1](Service-Oriented Architecture)技術將應用程序的不同服務通過這些服務之間定義良好的接口和契約聯(lián)系起來,這使得構建在各種這樣的系統(tǒng)中的服務可以以一種統(tǒng)一和通用的方式進行交互。因此,在傳統(tǒng)工作流當中引入SOA技術,發(fā)揮兩者的優(yōu)勢,使工作流具有互操作性、強大的開放性及語言和平臺無關性,可以滿足跨平臺、跨組織、跨部門的分布式的企業(yè)應用需求。
本文利用輕量級的開源工作流引擎JBPM(Java Business Process Management),結合SOA,提出了一種基于SOA和JBPM的工作流引擎模型,并對其流程控制與任務管理進行了分析,最后,基于SOAP、WSDL協(xié)議和JPDL實現(xiàn)了此工作流引擎,證明了其有效性。
1 基于SOA和JBPM的工作流引擎模型
基于SOA和JBPM的工作流引擎框架模型如圖1所示,該模型主要由3部分組成:服務提供者、服務請求者和服務代理。
該模型的工作流程是:工作流引擎將流程定義工具產(chǎn)生XML格式的流程定義文件解析,產(chǎn)生流程實例。然后通過Web服務接口將這個流程實例反映的流程信息封裝成服務形式,發(fā)布于服務代理中,供服務請求者查找,服務請求者根據(jù)描述信息找到服務提供者并綁定服務提供者,隨后兩者間可以消息傳遞,工作流引擎根據(jù)與服務請求者的消息交互完成流程實例。
(1)服務請求者:當服務請求者需要某項服務時,先在服務代理中查找相關的服務描述信息,然后它與服務提供者提供的服務進行綁定,并且與服務提供者信息交換實現(xiàn)業(yè)務任務。
?。?)服務代理:存儲服務提供者發(fā)布服務的服務描述,服務消費者向服務代理查詢它所需要的服務,并根據(jù)描述與服務提供者綁定。當所請求的服務是服務代理時,服務代理也經(jīng)常充當服務提供者的角色。
?。?)服務提供者:提供工作流引擎的功能,把工作流引擎提供的服務相關描述信息WSDL發(fā)布于服務代理中,供服務請求者查詢綁定。由于本模型中主要是對工作流引擎功能封裝成服務,所以本模型的服務提供者即是工作流引擎模塊。
此工作流引擎模塊主要包括JBPM工作流引擎和Web服務接口。Web服務接口主要是將工作流引擎發(fā)布為服務以和服務請求者交互,最終使得整個流程可被封裝為Web服務并完成服務請求者的需求。
上述模型中的3種角色之間的交互是通過以下3種基本操作來實現(xiàn)的。
?。?)發(fā)布服務:服務提供者向服務代理發(fā)布他們的服務。其發(fā)布的信息包括服務的接口定義、服務提供者所處的位置以及其他可能用到的支持信息和文檔。
?。?)查找服務:服務請求者向服務代理查找他們需要的服務。
?。?)綁定服務:服務消費者與服務提供者提供的具體服務進行綁定,這個綁定的過程主要是用戶的身份驗證和服務確認。
在上述的服務操作中,服務的發(fā)布或查找是通過WSDL協(xié)議實現(xiàn),該協(xié)議主要描述Web服務提供的功能、訪問該服務的數(shù)據(jù)格式與協(xié)議要求以及該服務如何定位等內容。服務提供者與服務請求者間的綁定是通過SOAP協(xié)議實現(xiàn)的,SOAP是一種輕量的、簡單的、基于XML的協(xié)議,它被設計成在Web上交換結構化的和固化的信息。而工作流引擎的流程定義是遵循JPDL協(xié)議實現(xiàn)的,在JPDL中提供了任務(tasks)、待處理狀態(tài)(wait states)、計時器(timers)、自動處理(automated actions)、事件(event)等術語,并通過圖形化的流程定義,很直觀地描述業(yè)務流程。
2 工作流引擎的流程控制與任務管理
2.1 流程調度控制
工作流的最顯著的優(yōu)點是實現(xiàn)了流程的自動控制。在工作流引擎中的表現(xiàn)是工作流引擎把流程定義文件解析、實例,生成流程實例也就是一套對象,而這套對象的結構則反映了流程的結構。當流程實例創(chuàng)建完成并進入運行狀態(tài)時,流程實例的運行全部依靠工作流引擎的控制。
在JBPM中,一個運行標記token代表一個流程實例中的一次執(zhí)行,它是運行時的概念,用來維護流程設計圖中節(jié)點的指針。token需要一個信號(signal)來讓流程向前執(zhí)行。當接收到一個signal,token會通過路徑(弧transition)離開當前所在的結點到達下一個節(jié)點。若token已經(jīng)在Start-State節(jié)點,那么就可以開始往前推進,從而促使流程實例往前運行。對于外部操作,觸發(fā)流程實例往下運行的操作有兩個:
?。?)強制執(zhí)行ProcessInstance的signal操作。
?。?)執(zhí)行TaskInstance的end操作。
如圖2所示,這兩個操作主要是調用內部的token.signal方法來實現(xiàn)流程實例的推進。
token.signal()方法的一些內部操作如圖3所示。即:確定轉向節(jié)點、確定轉向節(jié)點的上下文對象、離開本節(jié)點、獲取轉向節(jié)點的上下文對象、執(zhí)行節(jié)點。當執(zhí)行完本節(jié)點流程會循環(huán)進入token.signal()方法,直至完成流程實例。
初始態(tài)指任務實例被創(chuàng)建成功的狀態(tài),當執(zhí)行任務的條件滿足后就進入到運行態(tài),任務實例在運行態(tài)時,如果由于某些依賴性或者約束性的限制,如必須等待某些任務實例的執(zhí)行,必須等到它所需要的資源都滿足時才能繼續(xù)運行,那么該任務實例就進入到掛起狀態(tài),直到依賴或者約束性的限制得到滿足時,任務實例重新進入運行態(tài),任務實例的運行由于某些原因可能執(zhí)行失敗,任務實例進人到終止態(tài),當任務成功執(zhí)行后進入到完成態(tài),任務的執(zhí)行結束。
任務實例的一個作用就是支持用戶交互,把數(shù)據(jù)顯示給用戶并從用戶那里收集數(shù)據(jù)。任務實例需要從服務請求者輸入數(shù)據(jù),然后工作流引擎對數(shù)據(jù)進行處理操作,最后把信息再通過服務消息傳遞到服務請求者顯示給用戶。JBPM工作流引擎支持對任務實例分配處理器進行擴展開發(fā),實現(xiàn)對特定數(shù)據(jù)的特定處理操作,同時其支持對任務實例分配給用戶、候選者或泳道。
3 基于SOAP、WSDL協(xié)議和JPDL工作流引擎的實現(xiàn)
本文以數(shù)字檔案歸檔流程為例,對圖1所示的模型進行了實現(xiàn)。
(1)SOAP
在服務提供者與服務請求者之間的消息交換是通過SOAP協(xié)議進行的。SOAP是一種輕量的、簡單的、基于XML的協(xié)議,它被設計成在Web上交換結構化的和固化的信息。SOAP協(xié)議可以與現(xiàn)存的許多因特網(wǎng)協(xié)議和格式結合使用,包括超文本傳輸協(xié)議(HTTP),簡單郵件傳輸協(xié)議(SMTP),多用途網(wǎng)際郵件擴充協(xié)議(MIME),它還支持從消息系統(tǒng)到遠程過程調用(RPC)等大量的應用程序。同樣,SOAP中消息頭和消息體的機構確?;A架構消息和服務應用消息的完整性。
下面是SOAP協(xié)議部分代碼:
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/
soap-encoding">
<soap:Bodyxmlns:m="http://localhost:8080/
FilearchivingProcess">
<m:GetArchiveTable>
</m:GetArchiveTable>
…
</soap:Body>
</soap:Envelope>
(2)WSDL
WSDL是Web服務描述語言,主要描述Web服務提供的功能、訪問該服務的數(shù)據(jù)格式與協(xié)議要求以及該服務如何定位等內容。服務提供者把自己的服務轉換成XML格式的描述語言發(fā)布于服務代理中。當服務請求者在服務代理中查找到需要的服務的WSDL時,服務請求者解析其內容,同時確定服務提供者的位置、協(xié)議、需求的數(shù)據(jù)格式、方法信息,最后生成符合的SOAP文件并發(fā)送給服務提供者,此時兩者實現(xiàn)連接。
下面是歸檔流程的WSDL部分代碼:<wsdl:message name="archiveTable">
<wsdl:part element="tns:archiveTable"name="
parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="FilearchivingProcess">
<wsdl:operation name="submit">
<wsdl:input message="tns:archiveTable"
name="archiveTable">
</wsdl:input>
<wsdl:output message="tns:archiveResponse"name="archiveResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:service name="FilearchivingProcessImplService">
<wsdl:port binding="tns:
FilearchivingProcessImplServiceSoapBinding"
name="FilearchivingProcessImplPort">
<soap:address location="http://localhost:8080/
FilearchivingProcess"/>
</wsdl:port>
</wsdl:service>
?。?)JPDL
JPDL其實是一套XML語言,這套語言有特定的節(jié)點,每個節(jié)點代表不同的流程定義規(guī)則。通過XML對流程進行描述,JBPM去解析這套XML語言,然后把得到的信息存儲到數(shù)據(jù)庫中。
下面是歸檔流程的JPDL部分代碼,主要是開始狀態(tài)填寫歸檔表,指定管理員,并且有提交動作,同時JBPM需要進行數(shù)據(jù)處理。
<start-state name="填寫歸檔表">?
<task name="填寫歸檔表">
<assignment
class="com.archive.assign.ApplicantHandler">
</assignment>?
</task>?
<transition to="主管審批"name="主管審批">
<action name="Submit"
class="com.archive.action.SubmitHandler">
</action>
</transition>?
</start-state>
…
對于傳統(tǒng)工作流已不能滿足分布式異構和松散耦合的企業(yè)信息資源的要求,本文在傳統(tǒng)的工作流技術基礎上,利用SOA技術,結合JBPM,提出了一種基于SOA和JBPM的工作流引擎模型。本文目前主要研究的是模型的構造與工作流引擎的流程管理與任務控制方面,今后主要工作將是對服務并發(fā)數(shù)的控制與均衡進一步完善。
參考文獻
[1] 毛新生.SOA原理·方法·實踐[M].北京:電子工業(yè)出版社,2007.
[2] 胡奇.JBPM4工作流應用開發(fā)指南[M].北京:電子工業(yè)出版社,2010.
[3] 蔡孝武,韓永國,藍科.一種輕量級工作流引擎的研究與設計[J].計算機工程,2010,36(20):30-33.
[4] 朱永華,張倩,吳俊杰.基于操作的輕量級工作流模型的研究與設計[J].計算機工程與設計,2012,33(1):153-157.
[5] Guo Xiaofeng, Shen Jianjing, Wu Shanming. On Workflow Engine Based on Service-Oriented Architecture[C].2008International Symposium on Information Science and Engieering, Shanghai, 2008.
[6] Wang Huijiao, Huang Tinglei, Chen Zhifen. Research and Design of the Workflow Engine based on Web Services[C].Intelligent Computing and Integrated Systems, Guilin,2010.
[7] Yu Jie, Yu Zhang. The Research and application of Web-Application Based Workflow Engine[C]. 2011Communication Software and Networks, 2011.
[8] HEINIS, THOMAS. Design and evaluation of an autonomic workflow engine[C]. Autonomic Computing, Seattle, WA.2005.
[9] Liu Peng. Research on workflow patterns based on JBPMand JPDL[C]. Computational Intelligence and IndustrialApplication, 2008.
[10] Liu Guanjun, Jiang Changjun, Zhou Mengchu. Interactive Pe-tri Nets[J]. Systems, Man, and Cybernetics: Systems,2013(43):291-302.
[11] KIM K P. BPM-supported social networks discover-y and analysis techniques[C]. Kyonggi Univ.Advanced Communication Technology (ICACT),2013.
[12] DU Y,TAN W, ZHOU M C. Timed compatibility analysis of web servicecomposition: a modular approach based on petri nets[J]. Automation Science and Engineering, 2013:1-13.