第一篇:JAVA工作流引擎原理學(xué)習(xí)
JAVA工作流引擎原理學(xué)習(xí)
工作流是業(yè)務(wù)流程的全部或部分自動(dòng)化,在此過(guò)程中,文檔、信息或任務(wù)按照一定的過(guò)程規(guī)則流轉(zhuǎn),實(shí)現(xiàn)組織成員間的協(xié)同工作,以達(dá)到業(yè)務(wù)的整體目標(biāo)。工作流管理系統(tǒng)是支持企業(yè)經(jīng)營(yíng)過(guò)程高效執(zhí)行并監(jiān)控其執(zhí)行過(guò)程的計(jì)算機(jī)軟件系統(tǒng)。典型的WFMS至少由如下幾個(gè)模塊組成:業(yè)務(wù)流程建模定義工具、過(guò)程定義、工作流執(zhí)行環(huán)境(引擎)、任務(wù)管理。當(dāng)然還會(huì)包括應(yīng)用和IT工具。常用的工作流引擎有osworkflow,jbpm,shark。剛學(xué)習(xí)了一點(diǎn)osworkflow,現(xiàn)在轉(zhuǎn)向jbpm,公司要求,沒(méi)辦法。osworkflow,最大特點(diǎn)就是靈活,這個(gè)網(wǎng)上都說(shuō)遍了。也就是說(shuō)它提供了一個(gè)引摯,在此基礎(chǔ)上你可以進(jìn)行擴(kuò)展,可以自已寫一些條件、動(dòng)作類,只是繼承它的接口就行,不需要修改它的源代碼。他只提供一個(gè)工作流控制框架給你,他也只專注于管理工作流自身的東西,對(duì)其他的東西不管,其他的功能對(duì)他來(lái)說(shuō)都只是一個(gè)插件組件。所以你可以自己擴(kuò)展里面的功能,例如用戶管理模式,工作流本身不帶用戶模式,他公司的另外一個(gè)項(xiàng)目osuser,可以結(jié)合使用來(lái)管理用戶權(quán)限,當(dāng)然你可以不用osuer,自己建立自己的用戶模式,其實(shí)就是建立自己的運(yùn)行判斷條件;支持多種插件式的持久化機(jī)制;他的數(shù)據(jù)表也很少,就三個(gè)……
Shark的流程定義語(yǔ)言是XPDL,我們知道,XPDL的兩個(gè)最重要的概念是Process和Activity。XPDL中的Activity是基于UML1.x中的活動(dòng)圖的概念?;顒?dòng)圖天生的適于工作流程建模,它相對(duì)于狀態(tài)圖的一個(gè)最大的優(yōu)點(diǎn)是容易做并發(fā)線程的分叉控制,這些并發(fā)線程可以同時(shí)執(zhí)行也可以順序執(zhí)行;它還有一個(gè)優(yōu)點(diǎn)是有泳道的概念,可以控制工作流引擎中的任務(wù)的產(chǎn)生。Shark的如來(lái)神掌是活動(dòng)圖。Osworkflow的如來(lái)神掌又是什么呢?我們知道,它有個(gè)重要概念是State……呵呵,我們知道了,它的如來(lái)神掌是FSM。不知道FSM是什么東西??那你讀大學(xué)時(shí)肯定不是好學(xué)生;當(dāng)然了,不知道也不打緊,你把他類似理解為狀態(tài)圖就可以了。Osworkflow中的State是由step和status聯(lián)合表達(dá)的,一個(gè)State就是一個(gè)step中的某個(gè)status;而state的轉(zhuǎn)換由action來(lái)驅(qū)動(dòng),類似狀態(tài)圖中的event,因?yàn)橐粋€(gè)event對(duì)應(yīng)一個(gè)action嘛。Jbpm的如來(lái)神掌就沒(méi)有上面的簡(jiǎn)單了,它結(jié)合應(yīng)用了狀態(tài)圖+活動(dòng)圖+PetriNet的知識(shí),而且,這里的活動(dòng)圖還是UML2.0版的。UML2.0的活動(dòng)圖中,節(jié)點(diǎn)不叫活動(dòng)(Activity)而叫動(dòng)作(action),活動(dòng)成了一個(gè)高層次的概念,它包含一個(gè)動(dòng)作序列。一個(gè)活動(dòng)圖展現(xiàn)一系列的動(dòng)作,這些動(dòng)作組成了活動(dòng)。Jbpm把a(bǔ)ction也改名了,稱為state。Jbpm使用的狀態(tài)圖的概念有transition/event等,這個(gè)自己去看吧。Jbpm來(lái)內(nèi)部實(shí)現(xiàn)中還采用了PetriNet的概念,如token,signal等。什么?又不知道PetriNet什么東東?那你大學(xué)是學(xué)計(jì)算機(jī)的嗎?不是?那你可能是學(xué)文科的,學(xué)機(jī)械/電氣/土木工程/交通運(yùn)輸?shù)葘I(yè)都有接觸PetriNet的課程,如果沒(méi)有學(xué)過(guò),還是看看jbpm吧,反正我們也不搞理論,知道大致概念就行。
軟件學(xué)習(xí)到迅騰國(guó)際,老師都會(huì)給你提供這些資料的,只要你問(wèn)就可以了,至于地址嗎?自己查吧!我也只知道哪里是學(xué)習(xí)軟件的。我是在北京學(xué)的。
第二篇:java 工作流
Willow 由Huihoo Power開(kāi)發(fā)詳細(xì)可到其中文主頁(yè)查看。
更多Willow信息
OpenWFE OpenWFE是一個(gè)開(kāi)放源碼的Java工作流引擎。它是一個(gè)完整的業(yè)務(wù)處理管理套件:一個(gè)引擎,一個(gè)工作列表,一個(gè)Web界面和一個(gè)反應(yīng)器(存放自動(dòng)代理)。它可以可以跟你的程序很好的給合。
更多OpenWFE信息
jBpm jBpm是一個(gè)靈活可擴(kuò)展的工作流管理系統(tǒng)。作為 jBpm運(yùn)行時(shí)server輸入的業(yè)務(wù)流程使用簡(jiǎn)單強(qiáng)大的語(yǔ)言表達(dá)并打包在流程檔案中。jBmp將工作流應(yīng)用開(kāi)發(fā)的便利性和杰出的企業(yè)應(yīng)用集成(EAI)能力結(jié)合了起來(lái)。jBmp包括一個(gè)Web應(yīng)用程序和一個(gè)日程安排程序。jBmp是一組J2SE組件,可以作為J2EE應(yīng)用集群部署。
更多jBpm信息
OpenEbXML OpenebXML項(xiàng)目致力于提供一個(gè)ebXML框架,主要支持不久將由 UN/CEFACT和OASIS發(fā)布的ebXML規(guī)范2.0版。
更多OpenEbXML信息
Werkflow Werkflow是一個(gè)靈活可擴(kuò)展的基于流程和狀態(tài)的工作流引擎。它的目標(biāo)是滿足可以想象的所有工作流程,從企業(yè)級(jí)的業(yè)務(wù)流程到小范圍的用戶交互流程。通過(guò)使用可插拔和分層結(jié)構(gòu),可以方便地容納各種工作流語(yǔ)義。
更多Werkflow信息
OSWorkflow OSWorkflow是一個(gè)靈活的工作流引擎,設(shè)計(jì)成可嵌入到企業(yè)應(yīng)用程序中。它提供了許多的持久化API支持包括:EJB,Hibernate,JDBC和其它。OSWorkflow還可以與Spring集成。
更多OSWorkflow信息
wfmOpen WfMOpen是WfMC和OMG中所謂工作流設(shè)施(workflow facility)(工作流引擎)的J2EE實(shí)現(xiàn)。工作流通過(guò)擴(kuò)展的XPDL描述。
更多wfmOpen信息
OFBiz OFBiz是一個(gè)非常著名的開(kāi)源項(xiàng)目,提供了創(chuàng)建基于最新J2EE/XML規(guī)范和技術(shù)標(biāo)準(zhǔn),構(gòu)建大中型企業(yè)級(jí)、跨平臺(tái)、跨數(shù)據(jù)庫(kù)、跨應(yīng)用服務(wù)器的多層、分布式電子商務(wù)類WEB應(yīng)用系統(tǒng)的框架。OFBiz最主要的特點(diǎn)是OFBiz提供了一整套的開(kāi)發(fā)基于Java的web應(yīng)用程序的組件和工具。包括實(shí)體引擎, 服務(wù)引擎, 消息引擎, 工作流引擎, 規(guī)則引擎等。更多OFBiz信息
ObjectWeb Bonita Bonita 是一個(gè)符合WfMC規(guī)范、靈活的協(xié)同工作流系統(tǒng)。對(duì)于各種動(dòng)作如流程概念建模、定義、實(shí)例化、流程控制和用戶交互等提供了全面的集成圖形工具。100% 基于瀏覽器、使用SOAP和XML數(shù)據(jù)綁定技術(shù)的Web Services封裝了已有的工作流業(yè)務(wù)方法并將它們以基于J2EE的Web Service形式發(fā)布?;诨顒?dòng)預(yù)測(cè)模型的第三代工作流引擎。更多ObjectWeb Bonita信息
Bigbross Bossa 速度非???、輕量級(jí)的引擎,使用富有表達(dá)能力的Petri網(wǎng)定義工作流,不要求關(guān)系數(shù)據(jù)庫(kù),使用簡(jiǎn)單,能和Java應(yīng)用集成。事實(shí)上,它是按嵌入式設(shè)計(jì)的。更多Bigbross Bossa信息
XFlow XFlow運(yùn)行于EJB和servlet容器中。
更多XFlow信息
Taverna Taverna項(xiàng)目的目標(biāo)是提供一種語(yǔ)言和軟件工具,方便在eScience中使用工作流和分布計(jì)算技術(shù)。
更多Taverna信息
Enhydra Shark Shark完全基于WfMC和OMG標(biāo)準(zhǔn),使用 XPDL作為工作流定義語(yǔ)言。流程和活動(dòng)的存儲(chǔ)使用Enhydra DODS(一個(gè)開(kāi)源OR映射工具)。
更多Enhydra Shark信息
PowerFolder PowerFolder是一個(gè)容易使用,容易安裝基于J2EE的工作流服務(wù)器,包括開(kāi)發(fā)人員使用的基于web的studio。
更多PowerFolder信息
Open Business Engine Open Business Engine是一個(gè)開(kāi)放源碼的Java工作流引擎,支持WfMC規(guī)范,包括接口1(XPDL)、接口2/3(WAPI)和接口5。OBE為活動(dòng)的運(yùn)行提供了一個(gè)可控的集中環(huán)境。OBE主要基于J2EE實(shí)現(xiàn)。
更多Open Business Engine信息
OpenWFE OpenWFE是一個(gè)開(kāi)放源碼的Java工作流引擎。它包括可升級(jí)的三個(gè)組件:引擎、工作列表和Web界面。它的流程定義語(yǔ)言雖然使用XML格式,其靈感來(lái)源于 Scheme,一種Lisp方言。
更多OpenWFE信息
Freefluo Freefluo 是一個(gè)使用Web Service的工作流協(xié)同工具,可以處理WSDL的Web Service調(diào)用。支持兩種XML格式的工作流語(yǔ)言:IBM的WSFL和XScufl。Freefluo非常靈活,它的核心是不與任何工作流語(yǔ)言或執(zhí)行架構(gòu)關(guān)聯(lián)的可重用協(xié)同框架。Freefluo包括可執(zhí)行使用WSFL一個(gè)子集描述的工作流的運(yùn)行庫(kù)。
更多Freefluo信息
Twiste Twister的目標(biāo)是提供新一代、易集成、應(yīng)用Java領(lǐng)域中最新成果、面向B2B的工作流解決方案。流程引擎基于BPEL業(yè)務(wù)流程規(guī)范和Web Service標(biāo)準(zhǔn)。
更多Twiste信息
Con:cern con:cern工作流引擎基于擴(kuò)展的案例(case)處理方法,流程由一組具有前后條件的活動(dòng)組成。
更多Con:cern信息
JFlower JFlower是一個(gè)用Java開(kāi)發(fā)的工作流引擎,可以通過(guò)Java插件來(lái)擴(kuò)展。服務(wù)器可以
解析XML文檔來(lái)執(zhí)行任務(wù),檢查條件。會(huì)話數(shù)據(jù)保存在一個(gè)數(shù)據(jù)庫(kù)中,所以服務(wù)器是完全可伸縮的。
更多JFlower信息
JFolder JFolder(formerly PowerFolder)是一個(gè)工作流服務(wù)器和開(kāi)發(fā)環(huán)境,它可以配置在任何J2EE服務(wù)器與數(shù)據(jù)庫(kù)。
更多JFolder信息
JAWE 基于Java的圖形化工作流編輯器。圖形化工作流編輯器。使用JAVA語(yǔ)言開(kāi)發(fā),開(kāi)放源碼。嚴(yán)格遵循WFMC規(guī)范。XPDL(XML Process Definition Language)WFMC的 XML 過(guò)程描述語(yǔ)言。工作流定義文件保存在本地的XML文件中
更多JAWE信息
Zebra Zebra是一個(gè)工作流引擎。原先的設(shè)計(jì)是為了填補(bǔ)商業(yè)開(kāi)源工作流引擎的空白。它有一些不同于其它工作流系統(tǒng)的特點(diǎn):
*所有工作流模型都可以在workflow patterns中描述
*一個(gè)易于使用的GUI designer
*一個(gè)持久層中間件
*OO設(shè)計(jì)
*一個(gè)基于Turbine的Web應(yīng)用程序
更多Zebra信息
ActiveBPEL ActiveBPEL引擎是一個(gè)健壯的運(yùn)行時(shí)環(huán)境,它能執(zhí)行依據(jù)BPEL4WS或just BPEL1.1與WS-BPEL2.0規(guī)范編寫的業(yè)務(wù)流程。
更多ActiveBPEL信息
YAWL YAWL(Yet Another Workflow Language)一個(gè)開(kāi)源工作流語(yǔ)言/處理系統(tǒng).它基于現(xiàn)有的工作流處理系統(tǒng)與工作流語(yǔ)言的一個(gè)精確分析.不像傳統(tǒng)的系統(tǒng),它提供對(duì)大部分工作流模式的直接支持.YAWL支持控制流透視圖,數(shù)據(jù)透視圖并且能與WSDL標(biāo)準(zhǔn)的web服務(wù)相結(jié)合.更多YAWL信息
MOBE MidOffice BPEL Editor(MOBE)是一個(gè)開(kāi)源平臺(tái)能夠讓執(zhí)行,監(jiān)控,調(diào)整,結(jié)束每個(gè)定義的過(guò)程和諧地結(jié)合起來(lái).這個(gè)平臺(tái)的實(shí)現(xiàn)使用到J2EE技術(shù)與公共的標(biāo)準(zhǔn)如:BPEL,XML與SOAP.更多MOBE信息
RUNA WFE RUNA WFE是一個(gè)基于JBOSS-JBPM引擎的開(kāi)源工作流工作平臺(tái)它是一個(gè)跨平臺(tái)適用于商業(yè)流程處理的最終用戶解決方案,很容易與所有SQL數(shù)據(jù)庫(kù)管理系統(tǒng)相結(jié)合.更多RUNA WFE信息
micro-workflow micro-workflow框架適用于那些要在他們程序中分離控制與邏輯方面的開(kāi)發(fā)者,所以這個(gè)框架可以使他們的流程相互獨(dú)立。這樣有利于代碼重復(fù)使用與代碼的完整性。更多micro-workflow信息
bexee bexee是一個(gè)BPEL執(zhí)行引擎并且是BPEL標(biāo)準(zhǔn)的一個(gè)開(kāi)源實(shí)現(xiàn).更多bexee信息
PXE PXE-Process eXecution Engine是一個(gè)模塊化的商業(yè)流程執(zhí)行引擎.支持用WS-BPEL2.0或用BPEL4WS1.1規(guī)范描述的商業(yè)流程.
第三篇:工作流引擎五大接口
工作流引擎的五大接口
工作流參考模型確定了工作流管理系統(tǒng)的基本架構(gòu)。該架構(gòu)是開(kāi)發(fā)工作流軟件時(shí)應(yīng)當(dāng)采納的系統(tǒng)模型,當(dāng)然,一個(gè)工作流管理系統(tǒng)也可以不遵循這個(gè)模型標(biāo)準(zhǔn),或只實(shí)現(xiàn)這個(gè)模型的一部分,但事實(shí)證明,這個(gè)模型結(jié)構(gòu)是目前最為合理的。
系統(tǒng)的核心部分是工作流引擎,引擎是驅(qū)動(dòng)流程流動(dòng)的主要部件,它負(fù)責(zé)解釋工作流流程定義,創(chuàng)建并初始化流程實(shí)例,控制流程流動(dòng)的路徑,記錄流程運(yùn)行狀態(tài),掛 起或喚醒流程,終止正在運(yùn)行的流程,與其他引擎之間通訊等等工作。WfMC沒(méi)有針對(duì)引擎的實(shí)現(xiàn)提供具體的標(biāo)準(zhǔn),因?yàn)閷?duì)引擎做過(guò)多的約束并沒(méi)有多大的現(xiàn)實(shí)意 義。
一個(gè)工作流管理系統(tǒng)可以包含一個(gè)或多個(gè)引擎,并通過(guò)API向外部提供五個(gè)方面的功能服務(wù),這些功能分別為:
· 接口1-流程定義的導(dǎo)入導(dǎo)出
· 接口2-同客戶端應(yīng)用程序和工作列表處理程序之間的交互
· 接口3-軟件工具和應(yīng)用程序的調(diào)用
· 接口4-不同工作流管理系統(tǒng)之間的協(xié)同工作
· 接口5-管理和監(jiān)視功能
接口1-流程定義的導(dǎo)入導(dǎo)出
許多不同廠商提供的工具可以進(jìn)行工作流流程的分析、建模、描述和歸檔等工作。這些工具需要識(shí)別公共的流程交換格式,以支持在這些不同的產(chǎn)品之間傳送工作流程流程定義。接口1便定義了這樣的交換格式。此外,接口1還定義了設(shè)計(jì)環(huán)境與運(yùn)行環(huán)境之間交換的規(guī)范,以使不同的建模工具產(chǎn)生的流程定義可以輸入到不同的工作流產(chǎn)品的運(yùn)行環(huán)境中。
為了提供一個(gè)訪問(wèn)和描述工作流定義的公共方法,需要引入一個(gè)工作流元數(shù)據(jù)模型(meta-data Model),這個(gè)模型確定了流程定義中用到的一般的實(shí)體,這些實(shí)體都有不同的屬性,不同廠商開(kāi)發(fā)的工具可以根據(jù)公共的交換形式向工作流運(yùn)行環(huán)境傳送這些模型,傳送可以通過(guò)API實(shí)現(xiàn),也可以通過(guò)批量(Batch)傳送實(shí)現(xiàn)。
元模型提供了流程定義交換中用到的基本的實(shí)體及其屬性,這些都是工作流流程的組成部分,這些實(shí)體包括:
工作流流程定義 工作流流程活動(dòng) 過(guò)渡信息(Transition Information)工作流參與者 組織模型 工作流應(yīng)用程序 工作流相關(guān)類型 工作流相關(guān)數(shù)據(jù) 系統(tǒng)和環(huán)境數(shù)據(jù) 數(shù)據(jù)類型和表達(dá)式
流程定義的交換
在不同的系統(tǒng)之間傳遞流程定義數(shù)據(jù)可能需要不同的機(jī)制,但在所有的情況下,流程定義數(shù)據(jù)的表達(dá)必須是一致的,這些表達(dá)包括一些公共的對(duì)象、關(guān)系及其屬性。接口2與接口3:
工作流管理系統(tǒng)必須提供同用戶之間交互的通道,以便用戶參與到系統(tǒng)的運(yùn)行中。接口2主要完成這方面的功能。
WfMC在關(guān)于接口2 的規(guī)范中定義了工作流管理系統(tǒng)必須提供的類型、數(shù)據(jù)結(jié)構(gòu)、API和錯(cuò)誤代碼,并以C語(yǔ)言頭文件的形式提供。接口2所提供的功能大致可以分為一下五個(gè)方面:
1、會(huì)話的建立和與撤銷;
2、獲取工作流流程定義及狀態(tài);
3、工作流流程實(shí)例的操作,如創(chuàng)建、掛起、終止流程,獲取和設(shè)置流程屬性等;
4、工作流活動(dòng)實(shí)例的操作,如獲取和設(shè)置活動(dòng)的屬性,改變活動(dòng)的狀態(tài)等;
5、工作列表(worklist)及工作項(xiàng)(workitem)的操作,如獲取工作列表,處理工作項(xiàng)等。
通過(guò)這些功能,用戶可以完成與工作流管理系統(tǒng)之間交互的所有任務(wù):登錄系統(tǒng)、打開(kāi)自己的工作列表、處理自己的工作任務(wù)、將完成的任務(wù)提交給系統(tǒng)、將自己的任務(wù)轉(zhuǎn)交給其他用戶等等。
工作流系統(tǒng)在運(yùn)行過(guò)程中有時(shí)需要調(diào)用外部應(yīng)用程序,以完成系統(tǒng)不能完成的工作(比如,發(fā)送Email或傳真,掃描文件等),或者與其他系統(tǒng)集成到一起。此時(shí)可以通過(guò)接口3來(lái)完成。
接口3的功能同接口2的功能大部分是相同的,因此,這兩個(gè)接口有融合的趨勢(shì)。接口3主要規(guī)定了調(diào)用外部應(yīng)用程序的函數(shù)規(guī)范,以及外部應(yīng)用程序返回?cái)?shù)據(jù)的格式。
接口4-不同工作流管理系統(tǒng)之間的協(xié)同工作
在企業(yè)級(jí)的工作流系統(tǒng)中,流程往往需要跨越多個(gè)服務(wù)器或系統(tǒng),比如應(yīng)用于跨國(guó)公司或大型集團(tuán)公司的工作流系統(tǒng)經(jīng)常會(huì)有這種的需求,此時(shí)就需要服務(wù)器或系統(tǒng)之間進(jìn)行通訊,交換流程控制信息和流程定義等數(shù)據(jù),以實(shí)現(xiàn)流程跨地域運(yùn)行。WfMC在規(guī)范中以C函數(shù)的形式提供了這些控制的定義,其中包括以下幾個(gè)方面的功能:
1、創(chuàng)建流程實(shí)例;
2、獲取流程實(shí)例狀態(tài);
3、獲取和設(shè)置流程實(shí)例屬性;
4、啟動(dòng)或終止流程實(shí)例;
5、改變流程實(shí)例的狀態(tài);
6、改變流程實(shí)例的屬性;
7、更新流程實(shí)例 服務(wù)器或系統(tǒng)之間信息交換的格式有多種,例如:文件、數(shù)據(jù)庫(kù)表、E-mail或直接通過(guò)網(wǎng)絡(luò)傳送的數(shù)據(jù)流等等。
接口5-管理和監(jiān)視功能
此接口提供給用戶管理和監(jiān)控系統(tǒng)的運(yùn)行狀態(tài)、查看系統(tǒng)運(yùn)行的歷史記錄的功能。WfMC在此接口的規(guī)范中定義了各種審計(jì)信息的數(shù)據(jù)格式,這些格式包括:
1.流程實(shí)例(Process Instance)審計(jì)信息:包括創(chuàng)建、啟動(dòng)流程實(shí)例和子流程實(shí)例的審計(jì)數(shù)據(jù);流程實(shí)例狀態(tài)變化的審計(jì)數(shù)據(jù);流程實(shí)例屬性變化的審計(jì)數(shù)據(jù);
2.活動(dòng)實(shí)例(Activity Instance)審計(jì)信息:包括活動(dòng)實(shí)例狀態(tài)變化的審計(jì)數(shù)據(jù);活動(dòng)實(shí)例屬性變化的審計(jì)數(shù)據(jù);
3.工作項(xiàng)(Workitem)審計(jì)信息:包括工作項(xiàng)狀態(tài)變化的審計(jì)數(shù)據(jù);工作項(xiàng)分配合重新分配的審計(jì)數(shù)據(jù);工作項(xiàng)屬性變化的審計(jì)數(shù)據(jù);
4.遠(yuǎn)程操作審計(jì)信息:包括開(kāi)始和停止會(huì)話(Session)的審計(jì)數(shù)據(jù);遠(yuǎn)程創(chuàng)建流程實(shí)例和遠(yuǎn)程改變流程實(shí)例狀態(tài)的審計(jì)數(shù)據(jù);遠(yuǎn)程獲取和設(shè)置流程實(shí)例屬性的審計(jì)數(shù)據(jù);會(huì)話管理的審計(jì)數(shù)據(jù); 5.流程定義審計(jì)信息;
6.擴(kuò)展的審計(jì)信息及專用的審計(jì)信息這些審計(jì)數(shù)據(jù)在系統(tǒng)運(yùn)行時(shí)刻由系統(tǒng)自動(dòng)記錄在數(shù)據(jù)庫(kù)或文件中,可通過(guò)系統(tǒng)提供的API進(jìn)行統(tǒng)計(jì)和查詢,或者通過(guò)系統(tǒng)工具導(dǎo)出到系統(tǒng)外部。
另外,此接口還要提供系統(tǒng)管理與流程控制的功能,如:系統(tǒng)流程數(shù)據(jù)的備份和恢復(fù),用戶管理,流程管理等等。
通過(guò)這五個(gè)接口,工作流管理系統(tǒng)可以同外部的軟件工具進(jìn)行交互,這些工具可以由同一廠商提供,也可以由不同的廠商提供,但前提是這些工具都必須遵循WfMC的規(guī)范。用戶也可以有充分的選擇空間來(lái)決定哪一廠商的產(chǎn)品,或者自己開(kāi)發(fā)屬于哪一個(gè)接口的工具。
這五個(gè)接口一般通過(guò)API的形式提供給用戶或軟件開(kāi)發(fā)商,這些API稱為WAPI(Workflow API),也有廠商將API封裝成組件形式提供,以簡(jiǎn)化開(kāi)發(fā)難度、降低成本并提高效率。
可以用下面的圖來(lái)表示這五個(gè)接口的作用:
第四篇:基于WEB的工作流引擎設(shè)計(jì)和實(shí)現(xiàn)
基于WEB的工作流引擎設(shè)計(jì)和實(shí)現(xiàn)
一、引言
隨著社會(huì)生產(chǎn)的流程化,工作流(Workflow)起著越來(lái)越重要的作業(yè),工作流的核心是流程管理。對(duì)于企業(yè)來(lái)說(shuō),其生產(chǎn)經(jīng)營(yíng)活動(dòng)就是由各種各樣業(yè)務(wù)流程交織在一起組成的。然而,在企業(yè)管理中,許多流程在日常操作過(guò)程中已被習(xí)慣,而不被人們所重視,更不能被有效的管理起來(lái)。另外,客戶的需求瞬息萬(wàn)變,而產(chǎn)品的生命周期也是在不斷縮短,技術(shù)在不斷創(chuàng)新。企業(yè)要在這樣一個(gè)競(jìng)爭(zhēng)和變換的外部環(huán)境中求得生存,就必須要有隨需而變的能力,不斷地調(diào)整和優(yōu)化自身的各種業(yè)務(wù)流程,對(duì)流程進(jìn)行重構(gòu)和再造。為此,本文詳細(xì)描述了工作流引擎的系統(tǒng)結(jié)構(gòu)、接口設(shè)計(jì)、功能建模,以及工作流引擎在ERP系統(tǒng)中的應(yīng)用。
二、工作流技術(shù)概述
(一)相關(guān)概念
工作流(Workflow)就是工作流程的計(jì)算模型,即將工作流程中的工作如何前后組織在一起的邏輯和規(guī)則,在計(jì)算機(jī)中以恰當(dāng)?shù)哪P瓦M(jìn)行表示并對(duì)其實(shí)施計(jì)算。工作流引擎(Workflow Engine,WfE)的主要功能是通過(guò)計(jì)算機(jī)技術(shù)的支持去定義、執(zhí)行和管理工作流,協(xié)調(diào)工作流執(zhí)行過(guò)程中工作之間以及群體成員之間的信息交互。工作流需要依靠工作流引擎來(lái)調(diào)度、實(shí)現(xiàn)。
(二)工作流引擎的主要功能
工作流引擎是定義、創(chuàng)建、執(zhí)行工作流的軟件組元。作為工作流的核心應(yīng)能提供以下幾個(gè)方面的功能支持:解釋過(guò)程定義;創(chuàng)建過(guò)程實(shí)例并控制其執(zhí)行;調(diào)度各項(xiàng)活動(dòng);為用戶工作表添加工作項(xiàng);通過(guò)應(yīng)用程序接口(API)調(diào)用應(yīng)用程序;提供監(jiān)督和管理功能等。
三、工作流引擎的分析及設(shè)計(jì)
(一)工作流引擎的功能結(jié)構(gòu)
工作流引擎需要支持兩種業(yè)務(wù)流程,即確定型工作流和非確定工作流。確定型工作流是指人們可以事先給出運(yùn)行路線的一類業(yè)務(wù)流程;非確定型工作流是指人們事先不能給出運(yùn)行路線的一類業(yè)務(wù)流程。業(yè)務(wù)流程的流向應(yīng)根據(jù)實(shí)際情況而定。工作流引擎的功能結(jié)構(gòu)圖應(yīng)該如圖一所示:
圖1 工作流引擎的功能結(jié)構(gòu)圖
(二)工作流引擎控制器分析
引擎控制器是工作流引擎在運(yùn)行時(shí)的控制中心,引擎控制器的控制結(jié)構(gòu)圖如圖二所示:
圖二 引擎控制器的控制結(jié)構(gòu)圖
1.調(diào)度中心。調(diào)度中心接受從外部接口發(fā)送過(guò)來(lái)有關(guān)流程控制的請(qǐng)求,然后根據(jù)不同的請(qǐng)求類型調(diào)用相應(yīng)的處理模塊完成與本次請(qǐng)求相關(guān)的操作并將結(jié)果返回。由于是在DBMS內(nèi)部實(shí)現(xiàn)工作流引擎的控制模型,因此有關(guān)請(qǐng)求的并發(fā)處理等問(wèn)題完全可以交給數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)完成,也不需要諸如請(qǐng)求隊(duì)列等形式的數(shù)據(jù)結(jié)構(gòu)。
2.任務(wù)管理。任務(wù)管理主要根據(jù)調(diào)度中心的指示完成諸如任務(wù)創(chuàng)建、任務(wù)狀態(tài)的轉(zhuǎn)換以及相關(guān)數(shù)據(jù)的維護(hù)等工作。每次“結(jié)束任務(wù)”的外部請(qǐng)求將觸發(fā)調(diào)度中心調(diào)用“任務(wù)管理”為后繼活動(dòng)(如果存在的話)創(chuàng)建新的實(shí)例,其狀態(tài)為“待定”;同時(shí),其他不同的外部請(qǐng)求也將觸發(fā)“任務(wù)管理”實(shí)施任務(wù)狀態(tài)的切換。
3.任務(wù)指派。任務(wù)指派處理只是針對(duì)常規(guī)交互活動(dòng),通常情況下,在任務(wù)狀態(tài)由“待定”切換到“等待”過(guò)程中完成任務(wù)的指派工作,即處于就緒狀態(tài)的任務(wù)在通常情況下都確定了其執(zhí)行者。任務(wù)指派過(guò)程首先根據(jù)任務(wù)指派基準(zhǔn)確定可以執(zhí)行此任務(wù)的群體人員,通常情況下這是一個(gè)包含多個(gè)人員的集合;然后根據(jù)任務(wù)指派方法確定由這個(gè)群體中的哪些個(gè)體來(lái)執(zhí)行任務(wù),執(zhí)行任務(wù)的個(gè)體標(biāo)識(shí)記錄在相應(yīng)任務(wù)記錄的字段中。
4.依賴檢查。在工作流引擎中,業(yè)務(wù)規(guī)則可以分解成活動(dòng)的前依賴規(guī)則和活動(dòng)的后轉(zhuǎn)發(fā)規(guī)則。依賴檢查指的是活動(dòng)的前依賴規(guī)則的檢查,調(diào)度中心在將任務(wù)切換到就緒狀態(tài)之前將進(jìn)行相關(guān)的前依賴規(guī)則檢查,只有滿足檢查條件的任務(wù)才可以進(jìn)行狀態(tài)的切換。
前依賴規(guī)則包含順序、與匯聚、或匯聚和投票匯聚四種規(guī)則:
第一,對(duì)于順序前依賴規(guī)則,從前趨活動(dòng)流轉(zhuǎn)到當(dāng)前活動(dòng)跟其他前趨活動(dòng)沒(méi)有關(guān)系,當(dāng)前活動(dòng)的啟動(dòng)沒(méi)有其他約束條件,相應(yīng)任務(wù)可以立即由“待定”狀態(tài)轉(zhuǎn)換到“等待”狀態(tài)。
第二,對(duì)于與匯聚前依賴規(guī)則,相應(yīng)記錄要指明所有參與與匯聚的其他前趨活動(dòng),只有所有相關(guān)的前趨活動(dòng)均到達(dá)各自指定的結(jié)束狀態(tài),當(dāng)前活動(dòng)方可啟動(dòng)。第三,對(duì)于或匯聚前依賴規(guī)則,前依賴活動(dòng)集為空集,此規(guī)則的檢查將涉及到業(yè)務(wù)活動(dòng)表中的或匯集標(biāo)志,其取值可以是所有相關(guān)的前趨活動(dòng)的結(jié)束標(biāo)記之一或者是一個(gè)特殊的標(biāo)記。如果或匯集標(biāo)志不是一個(gè)特殊標(biāo)記,則將檢查相應(yīng)前趨活動(dòng)的結(jié)束標(biāo)記是否和或匯集標(biāo)志相同,若相同,則啟動(dòng)當(dāng)前活動(dòng),若不相同,則不作任何處理。如果或匯集標(biāo)志是一個(gè)特殊標(biāo)記,則首先結(jié)束的前趨活動(dòng)將啟動(dòng)當(dāng)前活動(dòng),后結(jié)束的活動(dòng)將被丟棄。
第四,對(duì)于投票匯聚活動(dòng),前依賴活動(dòng)集同樣為空集,當(dāng)前活動(dòng)要等到屬于同一批次任務(wù)數(shù)目達(dá)到設(shè)置的要求方可啟動(dòng)。
5.轉(zhuǎn)發(fā)控制。當(dāng)應(yīng)用發(fā)出“結(jié)束任務(wù)”的外部請(qǐng)求時(shí),該請(qǐng)求將觸發(fā)調(diào)度中心啟動(dòng)“轉(zhuǎn)發(fā)控制”。轉(zhuǎn)發(fā)控制的主要依據(jù)在工作流數(shù)據(jù)模型中定義的后轉(zhuǎn)發(fā)規(guī)則,后轉(zhuǎn)發(fā)規(guī)則定義了當(dāng)前活動(dòng)與其后繼活動(dòng)之間的關(guān)系。
6.啟動(dòng)控制。啟動(dòng)控制負(fù)責(zé)常規(guī)自動(dòng)活動(dòng)的所對(duì)應(yīng)的自動(dòng)執(zhí)行體的啟動(dòng)并對(duì)其活動(dòng)進(jìn)行監(jiān)控。
三、工作流引擎實(shí)現(xiàn)
(一)任務(wù)表結(jié)構(gòu)
確定型任務(wù)表負(fù)責(zé)保存系統(tǒng)中所有確定型流程的任務(wù)實(shí)例待處理記錄及任務(wù)實(shí)例處理的歷史記錄,工作流引擎定期掃描該任務(wù)表,將任務(wù)表中所有待處理的任務(wù)實(shí)例分發(fā)給相應(yīng)流程中的相應(yīng)節(jié)點(diǎn)。
確定型任務(wù)表的結(jié)構(gòu)為:TaskList(TasklnstanceID,TasklD,TaskStep,TaskHandleTime,ProceeID,DstNodelD,lsHandled,CommmitMan),分別為:TasklnstaneeID:同一個(gè)任務(wù)可以有多個(gè)不同的運(yùn)行實(shí)例。該字段用于區(qū)別多個(gè)不同的運(yùn)行實(shí)例;TasklD:用于區(qū)別不同的任務(wù);TaskStep:記錄任務(wù)運(yùn)行實(shí)例在流程中的處理步驟;TaskHand]eTime:任務(wù)運(yùn)行實(shí)例在相應(yīng)處理步驟中的處理時(shí)間;Processed:記錄任務(wù)實(shí)例所在流程的ID;DstNodelD:處理任務(wù)運(yùn)行實(shí)例的后續(xù)節(jié)點(diǎn);IsHandled:任務(wù)實(shí)例在后續(xù)節(jié)點(diǎn)是否已經(jīng)處理;CommitMan:任務(wù)的處理人。
(二)工作流的流向控制
工作流引擎的一個(gè)核心功能就是要決定確定型任務(wù)表中各個(gè)任務(wù)運(yùn)行實(shí)例的后續(xù)處理節(jié)點(diǎn),使任務(wù)運(yùn)行實(shí)例按照事先定義好的路線流動(dòng),也就是流程的流向控制。
流向控制算法描述如下:
/*控制流程流向*/
function HowControl(string processid,string nodeid){
string[] followIds= GetSueNodeld(processed,nodeid);
for(int i=0;i /*后續(xù)節(jié)點(diǎn)同步控制*/ if(查詢后續(xù)節(jié)點(diǎn)i所對(duì)應(yīng)的條件中有無(wú)isprecondition為true的條件)對(duì)后續(xù)節(jié)點(diǎn)進(jìn)行同步控制; /*子流程的處理情況*/ if(后續(xù)節(jié)點(diǎn)i是子流程) 將子流程的第一個(gè)節(jié)點(diǎn)作為后續(xù)節(jié)點(diǎn); 向任務(wù)表中加入一條待處理記錄; } } 四、結(jié)語(yǔ) 本文介紹了一個(gè)基于Web的工作流引擎的具體實(shí)現(xiàn),該工作流引擎已經(jīng)在藥業(yè)管理系統(tǒng)中得到了實(shí)際應(yīng)用,基本上可以達(dá)到預(yù)期效果,說(shuō)明基于Web的工作流引擎設(shè)計(jì)和實(shí)現(xiàn)都具有相對(duì)可行性,可以應(yīng)用在具體的管理系統(tǒng)中。 第一章 引 言1.1 輕量級(jí)工作流引擎的概念 輕量級(jí)的工作流引擎指的是從夠用、靈活和低成本的設(shè)計(jì)原則出發(fā),不追求工作流引擎的功能的完備和復(fù)雜,只是實(shí)現(xiàn)其中必不可少的功能和特征。在設(shè)計(jì)工作流引擎時(shí)主要考慮對(duì)其數(shù)據(jù)模型的定義和解釋、活動(dòng)之間的協(xié)調(diào)以及任務(wù)的分配和控制等功能提供支持,而不支持諸如提供內(nèi)建(built-in)的應(yīng)用開(kāi)發(fā)工具、對(duì)應(yīng)用資料的定義和完整性維護(hù)、完善的異常處理以及長(zhǎng)事務(wù)控制等功能。輕量級(jí)工作流引擎的概念的提出,給開(kāi)發(fā)工作流管理系統(tǒng)的開(kāi)發(fā)人員開(kāi)辟了一條新的道路。工作流管理技術(shù)本身就是一項(xiàng)抽象復(fù)雜的技術(shù),它致力追求從企事業(yè)各種各樣的業(yè)務(wù)中抽取出一個(gè)通用的模型,由這個(gè)模型去描述所有業(yè)務(wù)的一致性,以達(dá)到“放之四海皆可用”的程度。不過(guò),要把眾多的而又錯(cuò)綜復(fù)雜的業(yè)務(wù)都集中在這個(gè)模型中,這是一件非常困難的工作,要經(jīng)過(guò)一段漫長(zhǎng)的摸索歷程。而輕量級(jí)的概念讓我們認(rèn)識(shí)到可以從一般性的而又簡(jiǎn)單的業(yè)務(wù)入手,為企事業(yè)快速的開(kāi)發(fā)出一個(gè)適應(yīng)他們本身業(yè)務(wù)需求的而又帶有可擴(kuò)展性可移植性的信息管理系統(tǒng),為他們提高工作效率,并保證在一段很長(zhǎng)的時(shí)間內(nèi)滿足不斷增加的業(yè)務(wù)需求。 1.2 工作流管理系統(tǒng)的分類及本文的側(cè)重點(diǎn) 根據(jù)工作流過(guò)程本身的特點(diǎn)、系統(tǒng)建模的方式、所使用的底層支撐技術(shù)、以及工作流過(guò)程的執(zhí)行方式等的不同而對(duì)工作流管理系統(tǒng)進(jìn)行相應(yīng)的分類。 1.2.1 面向文檔的與面向過(guò)程的 前者的側(cè)著點(diǎn)在于將電子形式的文件、圖像等在有關(guān)的人員之間進(jìn)行分發(fā),以便能夠得到不同人的處理與審閱?,F(xiàn)有的文件管理與映像管理系統(tǒng)均屬此類。在面向過(guò)程的WFMS中,工作流被描述成一序列執(zhí)行環(huán)節(jié)。與各環(huán)節(jié)相應(yīng)都有待處理的資料對(duì)象。各環(huán)節(jié)的資料對(duì)象可以按不同的方式分發(fā)到其它環(huán)節(jié)中去,如可以將資料對(duì)象的值作為控制條件、或者依此資料對(duì)象組裝成其它的資料對(duì)象等。高端的WFMS一般都屬此類系統(tǒng)。 1.2.2 結(jié)構(gòu)化的與即席的結(jié)構(gòu)化工作流指的是在實(shí)際工作過(guò)程中會(huì)反復(fù)重復(fù)、嚴(yán)格按照某個(gè)固定的步驟進(jìn)行的業(yè)務(wù)過(guò)程。定義此種工作流所需要的各種類型的信息可以通過(guò)對(duì)業(yè)務(wù)過(guò)程進(jìn)行詳細(xì)的分析而得到,從而得到完整的過(guò)程定義并在以后的應(yīng)用過(guò)程中反復(fù)使用。大量的辦公程序,如公文處理、審批等都屬此類。即席工作流則是針對(duì)那些重復(fù)性不是很強(qiáng)或沒(méi)有重復(fù)性的工作流程的,關(guān)于這類流程執(zhí)行所需的有關(guān)參數(shù)(如參加者等)事先無(wú)法確定,而必須推遲到過(guò)程實(shí)例運(yùn)行時(shí)才能確定,同時(shí)在執(zhí)行過(guò)程中間還可能會(huì)發(fā)生一些意外的情況。這種動(dòng)態(tài)多變的特點(diǎn)在提供更高靈活性的同時(shí),也為過(guò)程的建模與執(zhí)行帶來(lái)更多的復(fù)雜性。1.2.3 基于郵件和基于數(shù)據(jù)庫(kù) 前者使用電子郵件來(lái)完成過(guò)程實(shí)例執(zhí)行過(guò)程中消息的傳遞、資料的分發(fā)與事件的通知。低端的系統(tǒng)所使用的經(jīng)常就是此種方法,它可以充分發(fā)揮電子郵件系統(tǒng)在廣域環(huán)境下的資料分發(fā)功能,但整個(gè)系統(tǒng)將運(yùn)行于一種松散耦合的模式下。在基于數(shù)據(jù)庫(kù)的WFMS中,所有的資料都保存在某種類型的DBMS中,過(guò)程的執(zhí)行實(shí)際上就是對(duì)這些資料的查詢與處理。高端的大規(guī)模系統(tǒng)所使用的一般都是此種方法。 1.2.4 任務(wù)推動(dòng)的與目標(biāo)拉動(dòng)的前者指的是從過(guò)程的開(kāi)始逐步地一個(gè)環(huán)節(jié)一個(gè)環(huán)節(jié)的執(zhí)行,當(dāng)某個(gè)活動(dòng)實(shí)例被處理完之后,后續(xù)的有關(guān)活動(dòng)將被創(chuàng)建并被激活,由此直至整個(gè)工作流程的完成。這是目前大多數(shù)面向過(guò)程的WFMS所使用的執(zhí)行方式。而在目標(biāo)拉動(dòng)的WFMS中,一個(gè)業(yè)務(wù)流程被看成是一個(gè)目標(biāo)。過(guò)程實(shí)例執(zhí)行時(shí),該目標(biāo)將被分解得到多個(gè)相互之間按一定約束條件的關(guān)聯(lián)起來(lái)的可執(zhí)行的多個(gè)環(huán)節(jié),其中各環(huán)節(jié)還可以當(dāng)成是子目標(biāo)而進(jìn)一步進(jìn)行分解。在各環(huán)節(jié)均執(zhí)行完畢之后,整個(gè)過(guò)程也就完成了。目標(biāo)拉動(dòng)是一種全新的執(zhí)行方式,下一代的WFMS將具有此種特征。應(yīng)該說(shuō)明的是:上述分類只是從不同的角度入手的。一般來(lái)說(shuō),后面那些特點(diǎn)將給WFMS帶來(lái)更好的靈活性,同時(shí)也將成為那些能夠支持跨機(jī)構(gòu)的大規(guī)模復(fù)雜工作流管理、面向關(guān)鍵任務(wù)的WFMS不可缺少的特征。1.2.5 本文的側(cè)重點(diǎn) 本文的側(cè)重點(diǎn)不在于完全實(shí)現(xiàn)其中一種工作流管理系統(tǒng)的所有功能,更不在于實(shí)現(xiàn)所有種類的工作流管理系統(tǒng)的全部功能,前文已經(jīng)說(shuō)過(guò),這是一件非常困難的事情。那么我們的側(cè)重點(diǎn)在哪里呢?就在于綜合以上四種工作流管理系統(tǒng)的主要特點(diǎn),是一個(gè)面向文件的,基于數(shù)據(jù)庫(kù)的,由目標(biāo)拉動(dòng)的結(jié)構(gòu)化的工作流管理系統(tǒng),并且由此去設(shè)計(jì)和實(shí)現(xiàn)工作流管理系統(tǒng)的核心――工作流引擎。從一般性來(lái)說(shuō),目前大多數(shù)的企事業(yè)的業(yè)務(wù)都是事務(wù)申請(qǐng),公文流轉(zhuǎn),各項(xiàng)通知等等,這些業(yè)務(wù)或者需要查看,或者需要審批,而這些業(yè)務(wù)的資料基本上是以文件的形式保存在計(jì)算機(jī)上,而其中一些格式化的資料是保存在數(shù)據(jù)庫(kù)中,所以面向文件和面向數(shù)據(jù)庫(kù)是輕量級(jí)工作流引擎的一個(gè)重要特征。業(yè)務(wù)的發(fā)起和結(jié)束是一項(xiàng)過(guò)程化的任務(wù),任務(wù)又可以分解成一個(gè)一個(gè)環(huán)節(jié)任務(wù),而任務(wù)是帶有目的性的,由這個(gè)目的去拉動(dòng)這個(gè)過(guò)程中的一個(gè)一個(gè)的環(huán)節(jié)任務(wù),促使環(huán)節(jié)任務(wù)的推進(jìn),最終達(dá)到任務(wù)完成的目的。這些業(yè)務(wù)的過(guò)程化不是隨機(jī)的,而是已經(jīng)嚴(yán)格規(guī)定好的,只有遵循這些過(guò)程化的規(guī)則和流程環(huán)節(jié)才能完成整個(gè)業(yè)務(wù)。輕量級(jí)的工作流引擎就組合了以上這些,不追求工作流引擎的功能的完備和復(fù)雜,以滿足一般性業(yè)務(wù)為目的,為企事業(yè)快速開(kāi)發(fā)出適合他們業(yè)務(wù)的工作流管理系統(tǒng)。 第二章 工作流管理系統(tǒng)參考模型簡(jiǎn)介在闡述工作流引擎之前,我們來(lái)了解一下工作流技術(shù)的基本知識(shí)。早在幾年前,為了建立工作流管理系統(tǒng)的相關(guān)標(biāo)準(zhǔn),國(guó)際上成立了一個(gè)稱為“工作流管理聯(lián)盟”(簡(jiǎn)稱WFMC)的國(guó)際組織。她提出了有關(guān)工作流管理系統(tǒng)的一些規(guī)范,定義了工作流管理系統(tǒng)的結(jié)構(gòu)及其與應(yīng)用、管理工具和其它工作流管理系統(tǒng)之間的應(yīng)用編程接口,也就是工作流系統(tǒng)參考模型。 WFMC給出的工作流參考模型如下圖: 接口2 接口3 接口4 接口1 接口5 過(guò)程定義工具 工作流API與交換格式 工作流執(zhí)行服務(wù) 工作流機(jī) (工作流引擎) 工作流 管理工具 其它工作流 執(zhí)行服務(wù) 工作流機(jī) 工作流客戶應(yīng)用 工作流機(jī)直接調(diào)用 的應(yīng)用 圖2.1 工作流參考模型 從圖中可以看出,參考模型包含了五類接口,分別是: ⑴ 接口1:過(guò)程定義輸入輸出接口,這是工作流服務(wù)與工作流建模之間的接口,該接口提供的功能包括通信建立,工作流模型操作和工作流模型對(duì)象操作。 ⑵ 接口2:客戶端函數(shù)接口,這是工作流服務(wù)與客戶應(yīng)用之間的接口,這是最主要的接口規(guī)范,它約定所有客戶方應(yīng)用與工作流服務(wù)之間的功能操作方式。包括通信建立,工作流定義操作(對(duì)過(guò)程模型定義操作),過(guò)程實(shí)例管理功能,過(guò)程狀態(tài)管理功能,任務(wù)項(xiàng)列表/任務(wù)項(xiàng)處理功能,數(shù)據(jù)處理過(guò)程,過(guò)程監(jiān)控功能,其它的管理功能,應(yīng)用程序激活。 ⑶ 接口3:激活應(yīng)用程序接口,這是工作流引擎和直接調(diào)用的應(yīng)用程序之間的接口,包括通信建立,活動(dòng)管理功能,數(shù)據(jù)處理功能。 ⑷ 接口4:工作流執(zhí)行服務(wù)之間的互操作接口,這是工作流管理系統(tǒng)之間的互操作接口,包括連接的建立,對(duì)工作流模型和其中對(duì)象的操作,對(duì)過(guò)程實(shí)例的控制和狀態(tài)描述,對(duì)活動(dòng)的管理,對(duì)資料進(jìn)行處理。 ⑸ 接口5:系統(tǒng)管理與監(jiān)控接口,這是工作流服務(wù)和工作流管理工具之間的接口,包括資源控制,角色管理,用戶管理,過(guò)程實(shí)例的管理,狀態(tài)管理,審核管理。 五個(gè)接口以及對(duì)應(yīng)的API函數(shù)囊括了工作流管理系統(tǒng)的全部功能。一個(gè)完整的工作流管理系統(tǒng)就是以工作流引擎為中心,向外部部件(應(yīng)用程序或其它工作流引擎)提供這五個(gè)接口,提供其實(shí)現(xiàn)的所有功能。 第三章 系統(tǒng)分析與設(shè)計(jì)在所有準(zhǔn)備工作完成后,我們就開(kāi)始進(jìn)行系統(tǒng)設(shè)計(jì)和設(shè)計(jì),構(gòu)造一個(gè)輕量級(jí)的工作流引擎。輕量級(jí)的工作流引擎并不完全實(shí)現(xiàn)WFMC所提出的工作流模型包含的五個(gè)接口,特別是接口4,在分布式工作流管理系統(tǒng)才具有該接口。既然我們從輕量級(jí)的概念出發(fā),我們就不再明顯區(qū)分各個(gè)接口的界限以及其所具有的特定的功能,以夠用、靈活和低成本的設(shè)計(jì)原則去設(shè)計(jì)出我們所理解的工作流引擎。我們運(yùn)用了面向?qū)ο蟮姆椒?,首先從眾多的業(yè)務(wù)需求中抽取出工作流模型所包含的對(duì)象,再分析各個(gè)對(duì)象之間的邏輯關(guān)系,然后提出一個(gè)系統(tǒng)結(jié)構(gòu),再進(jìn)行模塊劃分,數(shù)據(jù)庫(kù)設(shè)計(jì),最終完成類的設(shè)計(jì)。我們當(dāng)中所用到的建模工具就是ROSE UML。 3.1 工作流模型的設(shè)計(jì) 對(duì)工作流模型的設(shè)計(jì)是工作流引擎設(shè)計(jì)的重要組成部分。 3.1.1 工作流模型的對(duì)象 企事業(yè)經(jīng)營(yíng)過(guò)程就是一項(xiàng)項(xiàng)業(yè)務(wù)的實(shí)現(xiàn)過(guò)程,我們從一般業(yè)務(wù)入手,并對(duì)這些業(yè)務(wù)進(jìn)行詳細(xì)的分析,研究,其結(jié)果就是得到一般性的業(yè)務(wù)對(duì)象,從而抽象成工作流模型對(duì)象。 3.1.1.1 從一個(gè)簡(jiǎn)單的業(yè)務(wù)實(shí)例看業(yè)務(wù)的需求 目前企事業(yè)的一項(xiàng)基本事務(wù)就是出差管理。它主要是對(duì)企事業(yè)的人員因?yàn)槟撤N工作上的原因需要到別的地方出差進(jìn)行的管理。我們可以列出出差的相關(guān)步驟: ⑴ 申請(qǐng)人需要出差,并且他(她)具有出差的權(quán)利; ⑵ 申請(qǐng)人填寫出差表格,說(shuō)明因何事出差,出差何處,申請(qǐng)出差金額,何時(shí)回來(lái)等等和出差相關(guān)的情況; ⑶ 申請(qǐng)人需要其它說(shuō)明的話,可以將更具體的說(shuō)明以文檔的形式保存下來(lái); ⑷ 申請(qǐng)人確認(rèn)申請(qǐng)無(wú)誤后提交申請(qǐng),等待申請(qǐng)的結(jié)果; ⑸ 根據(jù)規(guī)定,該申請(qǐng)必須先讓申請(qǐng)人的上一級(jí)審批,那么該申請(qǐng)就會(huì)以一項(xiàng)工作項(xiàng)的形式交給該級(jí)領(lǐng)導(dǎo)處理; ⑹ 處理該申請(qǐng)的領(lǐng)導(dǎo)對(duì)該申請(qǐng)進(jìn)行處理,他(她)會(huì)先查看該申請(qǐng)所有的資料,包括出差申請(qǐng)表和與之相關(guān)的其它文檔,然后對(duì)其進(jìn)行審批,審批的結(jié)果是同意那么該次申請(qǐng)會(huì)交給再下一級(jí)領(lǐng)導(dǎo)處理;審批的結(jié)果不同意,該申請(qǐng)被打回,通知申請(qǐng)人申請(qǐng)不通過(guò)的結(jié)果。等所有需要審批的領(lǐng)導(dǎo)都審批通過(guò)了,該申請(qǐng)就成功完成,通知申請(qǐng)人申請(qǐng)通過(guò)的結(jié)果; ⑺ 申請(qǐng)人得到申請(qǐng)的結(jié)果,如果審批通過(guò)則準(zhǔn)備出差,如果審批不通過(guò)則根據(jù)審批結(jié)果對(duì)該申請(qǐng)進(jìn)行修改,重新提交申請(qǐng); ⑻ 申請(qǐng)事務(wù)結(jié)束。 這是一個(gè)簡(jiǎn)單的業(yè)務(wù)實(shí)例,對(duì)該實(shí)例進(jìn)行分析我們可以得到該業(yè)務(wù)的一些對(duì)象: ⑴ 申請(qǐng)人:他(她)屬于該企事業(yè)的某個(gè)部門的成員,并且具有啟動(dòng)該業(yè)務(wù)的權(quán)利; ⑵ 審批領(lǐng)導(dǎo):他(她)也屬于該企事業(yè)的某個(gè)部門的成員,并且具有對(duì)該業(yè)務(wù)進(jìn)行處理的權(quán)利; ⑶ 出差表格:它是該業(yè)務(wù)規(guī)定的格式化資料,并且是必須的 ⑷ 出差具體說(shuō)明:它是該業(yè)務(wù)附加的資料,可以不要的 ⑸ 申請(qǐng)人已經(jīng)填寫好的出差表格:它是出差表格的實(shí)例化,代表一個(gè)具體的應(yīng)用 ⑹ 審批同意和不同意:它們是對(duì)該業(yè)務(wù)的處理,遵循一定的業(yè)務(wù)規(guī)則 ⑺ 申請(qǐng):這是一個(gè)過(guò)程,不是一個(gè)動(dòng)作,需要時(shí)間和人的活動(dòng)才能完成 ⑻ 審批:這是一個(gè)活動(dòng),是過(guò)程的一部分,并且可以向另外一個(gè)活動(dòng)轉(zhuǎn)化 ⑼ 其它應(yīng)用程序:申請(qǐng)人要填寫出差具體說(shuō)明時(shí)要調(diào)用相應(yīng)的外部應(yīng)用程序編輯該說(shuō)明并以一定的格式保存下來(lái),審批領(lǐng)導(dǎo)要查看出差具體說(shuō)明時(shí)也要調(diào)用相應(yīng)的外部應(yīng)用程序打開(kāi)該說(shuō)明并以一定的格式顯示出來(lái)。 從這些業(yè)務(wù)對(duì)象,再利用工作流技術(shù),我們可以得到工作流模型的一些基本對(duì)象: ⑴ 用戶:正如申請(qǐng)人,審批領(lǐng)導(dǎo),他們就是工作流管理系統(tǒng)的用戶,由他們?nèi)ナ褂迷撓到y(tǒng)的各種功能,并且直接參與業(yè)務(wù)活動(dòng),促使業(yè)務(wù)的完成。 ⑵ 角色:有些人可以申請(qǐng)出差,有些人對(duì)出差申請(qǐng)可以審批,這兩種不同的人可以作為兩個(gè)不同的角色。角色是具有某種使用系統(tǒng)特定功能的權(quán)利的一個(gè)人員或多個(gè)人員的組合。⑶ 工作流應(yīng)用資料:出差申請(qǐng)表格,出差具體說(shuō)明,這些就是對(duì)應(yīng)某個(gè)具體業(yè)務(wù)(這里是出差管理)的相關(guān)資料,根據(jù)這些業(yè)務(wù)資料我們可以對(duì)該業(yè)務(wù)進(jìn)行處理。 ⑷ 需激活的應(yīng)用程序:在需要其它應(yīng)用程序提供支持的時(shí)候,會(huì)去激活這些應(yīng)用程序。⑸ 流程:整個(gè)出差申請(qǐng)的過(guò)程就是一個(gè)流程,它從整體去描述一個(gè)業(yè)務(wù)。 ⑹ 環(huán)節(jié):又稱活動(dòng),它反映了業(yè)務(wù)流程的局部情況,通常業(yè)務(wù)流程是由一個(gè)一個(gè)的環(huán)節(jié)組成。 ⑺ 流程實(shí)例:將該出差申請(qǐng)這個(gè)業(yè)務(wù)流程實(shí)例化,就得到一個(gè)流程實(shí)例。⑻ 環(huán)節(jié)實(shí)例:將流程的其中一個(gè)環(huán)節(jié)實(shí)例化,就得到一個(gè)環(huán)節(jié)實(shí)例。 ⑼ 業(yè)務(wù)規(guī)則:業(yè)務(wù)的開(kāi)始和結(jié)束需要一定的條件,在處理業(yè)務(wù)的過(guò)程中必須按照一定的規(guī)則,這些都是業(yè)務(wù)規(guī)則,只有嚴(yán)格遵循業(yè)務(wù)規(guī)則,業(yè)務(wù)才能完成。 3.1.1.2 工作流對(duì)象的具體分析和說(shuō)明 通過(guò)一個(gè)具體的業(yè)務(wù)我們可以得到工作流模型的一些對(duì)象,那么我們?cè)賹?duì)其他一般性業(yè)務(wù)進(jìn)行分析,研究,我們就會(huì)找到它們的共同點(diǎn),并歸納出基于這些業(yè)務(wù)的公共的對(duì)象,這些公共的對(duì)象的組合,就是一個(gè)通用的模型,也就是工作流模型,這個(gè)模型能去描述每個(gè)業(yè)務(wù),是我們追求輕量級(jí)工作流引擎的最終成果。 ⑴ 用戶:業(yè)務(wù)的執(zhí)行者和參與者,對(duì)應(yīng)于企事業(yè)的每一個(gè)雇員,是一個(gè)獨(dú)立的、具有一定行為能力和一定技術(shù)能力的人的實(shí)體; ⑵ 角色:以技能為前提,能夠完成某項(xiàng)功能的人員的總稱; ⑶ 部門:對(duì)應(yīng)于企事業(yè)的靜態(tài)結(jié)構(gòu)劃分,由企事業(yè)的實(shí)際部門設(shè)置情況來(lái)決定,可以是傳統(tǒng)的面向職能的,也可以是現(xiàn)在流行的面向過(guò)程與客戶的; ⑷ 職位:以行政責(zé)任為前提,代表了管理上的等級(jí)關(guān)系; ⑸ 工作組:以執(zhí)行某一任務(wù)為目標(biāo)而動(dòng)態(tài)組建的、跨部門劃分的一種組織結(jié)構(gòu); ⑹ 流程:對(duì)應(yīng)于一個(gè)業(yè)務(wù)過(guò)程,表示一個(gè)業(yè)務(wù)由發(fā)起、處理、結(jié)束的一個(gè)過(guò)程; ⑺ 流程實(shí)例:對(duì)應(yīng)于一個(gè)業(yè)務(wù)流程具體應(yīng)用,是業(yè)務(wù)流程實(shí)例化的表現(xiàn)形式; ⑻ 環(huán)節(jié):對(duì)應(yīng)于業(yè)務(wù)流程中一個(gè)單一的業(yè)務(wù)操作,是流程按照業(yè)務(wù)要求的細(xì)化; ⑼ 環(huán)節(jié)實(shí)例:對(duì)應(yīng)于一個(gè)環(huán)節(jié)的具體應(yīng)用,是環(huán)節(jié)實(shí)例化的表現(xiàn)形式; ⑽ 工作流定義主信息:描述一個(gè)工作流模型的主要信息,從整體來(lái)描述工作流模型; ⑾ 工作流附件信息:描述一個(gè)工作流模型所用到的附件信息,也就是工作流應(yīng)用資料,或者叫業(yè)務(wù)資料。按照WFMC提出的工作流模型,這不是工作流模型所包含的對(duì)象,可是我們對(duì)其進(jìn)行格式化,把它抽取成一個(gè)模型對(duì)象,用來(lái)規(guī)定了工作流模型在具體應(yīng)用時(shí)所需業(yè)務(wù)資料的格式,我們把它分為兩類: ● 表格類型:這是以表格的形式保存附件信息,可以用關(guān)系結(jié)構(gòu)來(lái)定義附件信息,并保存在數(shù)據(jù)庫(kù)中,每一條記錄就是一個(gè)該附件的實(shí)例; ● 文檔類型:只是以文件形式保存附件信息,可以是work文檔,也可以是文本文件,它的實(shí)例化是就是一個(gè)一個(gè)帶有對(duì)應(yīng)某個(gè)業(yè)務(wù)應(yīng)用標(biāo)志的文件,保存在硬盤上 ⑿ 工作流實(shí)例信息:描述一個(gè)工作流模型實(shí)例化的信息,也作為啟動(dòng)一個(gè)工作流的信息,它記錄該業(yè)務(wù)流程隨著時(shí)間和人員的參與處理的不斷變化,直到整個(gè)業(yè)務(wù)的結(jié)束; ⒀ 工作項(xiàng)信息:描述參與某個(gè)業(yè)務(wù)應(yīng)用時(shí)被分配到的一項(xiàng)任務(wù),這就體現(xiàn)了參與人員和系統(tǒng)交互的典型特征; ⒁ 業(yè)務(wù)規(guī)則:描述業(yè)務(wù)在運(yùn)行的過(guò)程中必須要遵守的規(guī)定和原則,也是業(yè)務(wù)活動(dòng)得以向另一個(gè)活動(dòng)推進(jìn)的規(guī)則。我們把它分為四類規(guī)則,分別是: ● 自動(dòng)型:它主要描述一些只給參與人員查看業(yè)務(wù)信息的業(yè)務(wù)規(guī)則,例如通知、公文流轉(zhuǎn)等等業(yè)務(wù)。該類業(yè)務(wù)不需要參與人員去審批或其它人為上的處理,只需要參與人員去查看其中的內(nèi)容就足夠,整個(gè)業(yè)務(wù)流程的完成是全自動(dòng)的。● 與聚合:業(yè)務(wù)活動(dòng)的完成是需要參與該活動(dòng)的所有人員都進(jìn)行人為處理,其中有一個(gè)人員沒(méi)對(duì)其進(jìn)行處理,整個(gè)活動(dòng)只能停在原地,等待所有人員的處理,當(dāng)最后一個(gè)參與人員執(zhí)行了處理工作,它才能完成?!?/p> 或聚合:在參與某一業(yè)務(wù)活動(dòng)的人員當(dāng)中只要有一個(gè)對(duì)其進(jìn)行處理,整個(gè)活動(dòng)就可以完成。 ● 投票聚合:統(tǒng)計(jì)參與該活動(dòng)的參與人員的處理結(jié)果,當(dāng)滿足一定條件該活動(dòng)才能完成。 ⒂ 轉(zhuǎn)換條件:描述流程、活動(dòng)狀態(tài)改變時(shí)需要的條件,用于業(yè)務(wù)運(yùn)行過(guò)程中的約束。例如流程的完成必須等待所有活動(dòng)的完成才能完成,活動(dòng)的完成必須按照業(yè)務(wù)規(guī)則去完成等等; ⒃ 需激活的應(yīng)用程序:工作流管理系統(tǒng)需要其它應(yīng)用程序的支持,例如編輯和查看文本文件信息等等; ⒄ 日志信息:描述工作流中所有的狀態(tài)改變、事件和控制流相關(guān)資料的變化,工作流實(shí)例和環(huán)節(jié)實(shí)例的啟動(dòng)、結(jié)束、掛起和激活等等信息都會(huì)記錄下來(lái),以便對(duì)其進(jìn)行管理。3.1.2 對(duì)象之間的邏輯關(guān)系在找出工作流模型的對(duì)象后,我們就開(kāi)始分析它們之間的業(yè)務(wù)邏輯關(guān)系。 3.1.2.1 對(duì)對(duì)象進(jìn)行分類以及各個(gè)分類中對(duì)象之間的關(guān)系到此為止,我們有必要對(duì)工作流模型對(duì)象進(jìn)行一下分類,根據(jù)工作流對(duì)象對(duì)工作流管理系統(tǒng)所起的作用我們可以分成以下幾類: ⑴ 組織模型 組織模型描述了企事業(yè)的組織機(jī)構(gòu)關(guān)系,包括的對(duì)象有用戶,部門,職位,角色,工作組,它們的關(guān)系可以用下圖表示: 設(shè)置 負(fù)責(zé) 組成 組成 資格 組成 部門 職位 用戶 工作組 角色 圖3.1 組織模型結(jié)構(gòu) 從圖中可以看到它們之間的關(guān)系,用戶是基本的單位,部門是由用戶組成,每個(gè)用戶對(duì)應(yīng)一個(gè)職位,負(fù)責(zé)該職位所要求的職能,用戶憑著某種資格賦予一種角色,工作組也由用戶組成,也可以由角色組成。這幾個(gè)基本的對(duì)象以及其關(guān)系所構(gòu)成的組織模型,已經(jīng)可以滿足輕量級(jí)工作流引擎對(duì)組織模型的需要了。⑵ 工作流定義模型 工作流定義模型描述了工作流模型的定義信息,包括工作流定義主信息,流程定義信息,環(huán)節(jié)定義信息,工作流附件信息,業(yè)務(wù)規(guī)則。它們之間的關(guān)系如下圖: 圖3.2 工作流定義模型結(jié)構(gòu) 包含 包含 包含 包含 遵循 包含 工作流定義 附件信息 主信息 業(yè)務(wù)規(guī)則 環(huán)節(jié) 流程 包含 流程是包含若干環(huán)節(jié)的,而環(huán)節(jié)遵循一定的業(yè)務(wù)規(guī)則,再加上工作流主信息和附件信息,共同構(gòu)成工作流定義模型。⑶ 工作流實(shí)例模型 工作流實(shí)例模型描述了工作流模型實(shí)例化時(shí)的信息,通過(guò)這些信息我們可以知道實(shí)例過(guò)程中的各種狀態(tài)變化和最終的結(jié)果,因而得到一個(gè)業(yè)務(wù)具體應(yīng)用的情況。它包括流程實(shí)例,環(huán)節(jié)實(shí)例,工作流實(shí)例信息,工作項(xiàng)信息和轉(zhuǎn)換條件,它們之間的關(guān)系如下圖: 記錄 記錄 細(xì)化 細(xì)化 影響 影響 影響 影響 記錄 記錄 轉(zhuǎn)換條件 環(huán)節(jié)實(shí)例信息 流程實(shí)例信息 工作項(xiàng)信息 工作流實(shí)例信息 日志信息 日志信息 細(xì)化 圖3.3 工作流實(shí)例模型結(jié)構(gòu) 轉(zhuǎn)換條件影響工作流實(shí)例,流程實(shí)例,環(huán)節(jié)實(shí)例和工作項(xiàng)的狀態(tài),并由轉(zhuǎn)換條件去決定它們的狀態(tài)轉(zhuǎn)變,工作流實(shí)例信息à流程實(shí)例信息à環(huán)節(jié)實(shí)例信息à工作項(xiàng)信息,自上而下逐層細(xì)化,不但從全局了解業(yè)務(wù)運(yùn)行情況,而且從局部了解業(yè)務(wù)運(yùn)行的細(xì)節(jié)情況。而它們的狀態(tài)改變都會(huì)記錄在日志中,用以追蹤工作流實(shí)例的運(yùn)行情況。⑷ 外部支持模型 外部支持模型在本文只包括一個(gè)對(duì)象,就是需激活的外部應(yīng)用程序,嚴(yán)格來(lái)說(shuō)這不是工作流模型的一部分,可是提供接口去激活所需的外部應(yīng)用程序?yàn)楣ぷ髁鞴芾硐到y(tǒng)提供支持是工作流模型的功能之一。有了這些外部應(yīng)用程序的支持,我們的工作流管理系統(tǒng)的功能才變得更完善。 3.1.2.2 各個(gè)模型之間的邏輯關(guān)系 不但模型中各個(gè)對(duì)象有一定的邏輯關(guān)系,而且各個(gè)模型之間也有一定的邏輯關(guān)系,如下圖所示: 調(diào)用 依賴 使用 使用角色和工作組 用戶定義 工作流實(shí)例模型 外部支持模型 工作流定義模型 組織模型 圖3.4 模型之間的關(guān)系 組織模型的用戶定義工作流定義模型;工作流定義模型使用組織模型的角色和工作組,用來(lái)規(guī)定工作流模型的啟動(dòng)條件和任務(wù)分配條件,因?yàn)楣ぷ髁髂P偷膯?dòng)和任務(wù)的分配必須由一定的角色或工作組完成;工作流實(shí)例模型依賴工作流定義模型,同時(shí)使用組織模型的所有對(duì)象,并且調(diào)用外部支持模型為其提供支持。3.1.3 工作流實(shí)例,流程實(shí)例,環(huán)節(jié)實(shí)例和工作項(xiàng)的狀態(tài)轉(zhuǎn)換 工作流實(shí)例,流程實(shí)例,環(huán)節(jié)實(shí)例和工作項(xiàng)從不同的層次去描述業(yè)務(wù)運(yùn)行過(guò)程的具體情況,不同級(jí)別的用戶可以看到業(yè)務(wù)運(yùn)行的不同方面,創(chuàng)建工作流實(shí)例的用戶可以看到工作流實(shí)例信息以及其狀態(tài)轉(zhuǎn)換,參與該工作流實(shí)例的用戶可以看到工作項(xiàng)信息以及其狀態(tài)的改變,系統(tǒng)管理員可以看到所有信息以及其狀態(tài)的轉(zhuǎn)換。 ⑴ 工作流實(shí)例狀態(tài)圖 創(chuàng)建 管理員 管理員 管理員 Running(運(yùn)行) Completed(結(jié)束) 正常情況 Suspended(掛起) terminated(終止) Initial(初始化) 圖3.5 工作流實(shí)例狀態(tài)圖 提交 ⑵ 流程實(shí)例狀態(tài)圖 管理員 管理員 管理員 Running(運(yùn)行) Completed(結(jié)束) 正常情況 Suspended(掛起) terminated(終止) 圖3.6 流程實(shí)例狀態(tài)圖 ⑶ 環(huán)節(jié)實(shí)例狀態(tài)圖 處理中 接受 完成正常處理 沒(méi)有完成異常處理 回退處理 提交給下一環(huán)節(jié) 圖3.5 環(huán)節(jié)實(shí)例狀態(tài)圖 ⑷ 工作項(xiàng)狀態(tài)轉(zhuǎn)換圖 等待操作 完成 通過(guò) 沒(méi)有完成 不通過(guò) 無(wú)操作,超時(shí) 操作下一工作項(xiàng) 回退處理 已查看 初始化 未審批 未查看 圖3.5 工作項(xiàng)狀態(tài)圖 接受 3.1.4 任務(wù)分派任務(wù)分派是工作流引擎的一個(gè)重要功能。當(dāng)環(huán)節(jié)實(shí)例產(chǎn)生時(shí),就會(huì)以一定的準(zhǔn)則把需要處理的工作當(dāng)作一項(xiàng)任務(wù)項(xiàng)(工作項(xiàng))分派給參與該環(huán)節(jié)實(shí)例的所有用戶,而這些用戶是同屬一個(gè)角色或者工作組的。我們又把角色和工作組進(jìn)行細(xì)化,可以得到以下準(zhǔn)則: ⑴ 基于部門的:這就是說(shuō)把任務(wù)分派到某個(gè)部門的所有人員,該部門的所有人員都參與了該項(xiàng)任務(wù),因而會(huì)為該部門的所有人員都產(chǎn)生一個(gè)工作項(xiàng); ⑵ 基于職位的:這就是說(shuō)把任務(wù)分派到某個(gè)職位的所有人員,同屬該職位的所有人員都被分配到一項(xiàng)工作項(xiàng); ⑶ 基于部門職位的:這就是說(shuō)把任務(wù)分派到某個(gè)部門的某個(gè)職位的所有人員,同屬該部門的該職位的人員都被分配到一項(xiàng)工作項(xiàng); ⑷ 基于所有人的:這就是說(shuō)把任務(wù)分派到該企事業(yè)的所有人,該企事業(yè)的所有人都被分配到一項(xiàng)工作項(xiàng); ⑸ 基于工作組的:這就是說(shuō)把任務(wù)分派到該企事業(yè)的某個(gè)特定的工作組上,同屬該組的所有人員都被分配到一項(xiàng)工作項(xiàng)。 基于部門的,基于職位的,基于部門職位的和基于所有人的這四種類型,其實(shí)是基于角色的細(xì)化,通過(guò)這些準(zhǔn)則的分類,我們盡量做到系統(tǒng)與企事業(yè)有較強(qiáng)的適應(yīng)性,以及使系統(tǒng)在任務(wù)分派時(shí)有較大的靈活性。3.1.5 轉(zhuǎn)換條件的滿足 工作流實(shí)例,流程實(shí)例,環(huán)節(jié)實(shí)例和工作項(xiàng)的狀態(tài)轉(zhuǎn)換有各自特定的條件,分別如下: ⑴ 工作流實(shí)例的轉(zhuǎn)換條件 工作流實(shí)例從整體看業(yè)務(wù)運(yùn)行過(guò)程,工作流實(shí)例被用戶創(chuàng)建后就進(jìn)行初始化并提交給工作流引擎,由工作流引擎去處理,此時(shí)實(shí)例處于運(yùn)行狀態(tài);在運(yùn)行過(guò)程中,它會(huì)根據(jù)流程實(shí)例的狀態(tài)而不斷進(jìn)行本身的狀態(tài)改變;當(dāng)管理員由于某種原因要掛起它時(shí),它就處于掛起狀態(tài),直到管理員重新激活它使它處于運(yùn)行狀態(tài)或者終止它使它非正常結(jié)束;當(dāng)它被正常處理完畢后,就正常結(jié)束。 ⑵ 流程實(shí)例的轉(zhuǎn)換條件 流程實(shí)例也從整體看業(yè)務(wù)的運(yùn)行過(guò)程,流程實(shí)例在工作流實(shí)例初始化時(shí)就開(kāi)始它的工作。在運(yùn)行過(guò)程中,它會(huì)根據(jù)各個(gè)環(huán)節(jié)的完成程度來(lái)改變自己的狀態(tài),當(dāng)所有環(huán)節(jié)實(shí)例都正常完成它就正常結(jié)束;管理員可能要掛起它使它處于掛起狀態(tài),直到管理員重新激活它使它處于運(yùn)行狀態(tài)或者終止它使它非正常結(jié)束。 ⑶ 環(huán)節(jié)實(shí)例的轉(zhuǎn)換條件 環(huán)節(jié)實(shí)例從某個(gè)方面看業(yè)務(wù)的運(yùn)行過(guò)程,環(huán)節(jié)實(shí)例在流程實(shí)例運(yùn)行時(shí)就開(kāi)始它的工作處于處理中狀態(tài)。之后環(huán)節(jié)實(shí)例的狀態(tài)由兩方面決定,一是工作項(xiàng)的處理結(jié)果,一是業(yè)務(wù)規(guī)則的規(guī)定。 ● 如果業(yè)務(wù)規(guī)則是自動(dòng)型的,不管工作項(xiàng)的處理結(jié)果怎樣,當(dāng)系統(tǒng)把任務(wù)項(xiàng)分派(給特定用戶)完畢后,該環(huán)節(jié)實(shí)例就正常完成處于正常結(jié)束狀態(tài); ● 如果業(yè)務(wù)規(guī)則是與聚合的,系統(tǒng)分派完任務(wù)項(xiàng)后,當(dāng)所有參與人員都正常處理完該環(huán)節(jié)各自的工作項(xiàng)后,該環(huán)節(jié)才正常完成處于正常結(jié)束狀態(tài);在處理過(guò)程中,只要有一個(gè)工作項(xiàng)是非正常處理的,該環(huán)節(jié)就非正常完成處于非正常結(jié)束狀態(tài);在處理過(guò)程中,有工作項(xiàng)還未被處理并且沒(méi)有一個(gè)工作項(xiàng)被非正常處理,那么環(huán)節(jié)實(shí)例仍然處于處理中狀態(tài); ● 如果業(yè)務(wù)規(guī)則是或聚合的,系統(tǒng)分派任務(wù)后,只要有一個(gè)工作項(xiàng)是正常處理的,該環(huán)節(jié)實(shí)例就正常完成處于正常結(jié)束狀態(tài);如果所有同屬該環(huán)節(jié)實(shí)例的工作項(xiàng)都被非正常完成,那么該環(huán)節(jié)實(shí)例就處于非正常結(jié)束狀態(tài); ● 如果業(yè)務(wù)規(guī)則是投票聚合的,系統(tǒng)分派任務(wù)后,統(tǒng)計(jì)工作項(xiàng)的完成程度,當(dāng)正常完成的工作項(xiàng)數(shù)量達(dá)到一定數(shù)量時(shí),該環(huán)節(jié)實(shí)例就正常完成處于正常結(jié)束狀態(tài);當(dāng)正常完成的工作項(xiàng)數(shù)量不達(dá)到規(guī)定的數(shù)量時(shí),該環(huán)節(jié)就非正常完成處于非正常結(jié)束狀態(tài);當(dāng)所有工作項(xiàng)還沒(méi)處理并且正常完成的工作項(xiàng)還沒(méi)達(dá)到規(guī)定數(shù)量時(shí),該環(huán)節(jié)實(shí)例仍然處于處理中狀態(tài)。 ⑷ 工作項(xiàng)的轉(zhuǎn)換條件 工作項(xiàng)從更細(xì)節(jié)的方面看業(yè)務(wù)運(yùn)行過(guò)程,工作項(xiàng)的狀態(tài)轉(zhuǎn)換要看參與人員對(duì)各自的工作項(xiàng)的處理情況和業(yè)務(wù)規(guī)則的規(guī)定。我們把與聚合,或聚合和投票聚合這些要人工干預(yù)的規(guī)則統(tǒng)稱為人工型規(guī)則。 ● 如果業(yè)務(wù)規(guī)則是自動(dòng)型,同屬該規(guī)則的工作項(xiàng)的狀態(tài)就只有正常處理后的正常結(jié)束狀態(tài),當(dāng)然如果對(duì)該工作項(xiàng)還沒(méi)被處理則處于處理中狀態(tài),可這不對(duì)環(huán)節(jié)實(shí)例等產(chǎn)生影響; ● 如果業(yè)務(wù)規(guī)則是人工型,就會(huì)有正常處理和非正常處理兩種情況,正常處理該工作項(xiàng)則使到該工作項(xiàng)處于正常結(jié)束狀態(tài),非正常處理該工作項(xiàng)則使到該工作項(xiàng)處于非正常結(jié)束狀態(tài)。 3.2 系統(tǒng)結(jié)構(gòu) 本著基于輕量級(jí)工作流引擎的原則,我們已經(jīng)對(duì)工作流模型進(jìn)行了詳細(xì)的分析和詳細(xì)的設(shè)計(jì),在這里我們就提出一個(gè)系統(tǒng)結(jié)構(gòu),如下圖所示: 工作流定義器 工作流 解析器 實(shí)例調(diào)度中心 任務(wù)管理器 任務(wù)分派器 啟動(dòng)控制器 工作流定義數(shù)據(jù) 工作流實(shí)例 數(shù)據(jù) 日志 數(shù)據(jù) 工作流定義接口 工作流實(shí)例接口 組織定義 數(shù)據(jù) 組織定義接口 組織定義器 狀態(tài)轉(zhuǎn)換器 組織 管理器 圖3.6 工作流引擎系統(tǒng)結(jié)構(gòu)圖 從圖中可以知道,系統(tǒng)提供了三類接口:組織定義接口、工作流定義接口和工作流實(shí)例接口。這三類接口實(shí)現(xiàn)了工作流模型的接口一,接口二,接口三和接口五規(guī)定的主要功能;系統(tǒng)有一個(gè)實(shí)例調(diào)度中心,這是一個(gè)很重要的部件,它控制工作流實(shí)例的運(yùn)行,通過(guò)工作流解析器對(duì)該工作流模型進(jìn)行解析其含義,通過(guò)任務(wù)分派器按照一定的分派準(zhǔn)則把任務(wù)項(xiàng)分派給參與該工作流實(shí)例的用戶,通過(guò)任務(wù)管理器管理各個(gè)任務(wù)項(xiàng)的信息,通過(guò)啟動(dòng)控制器控制工作流的啟動(dòng)權(quán)利和啟動(dòng)信息,通過(guò)狀態(tài)轉(zhuǎn)換器控制工作流實(shí)例、流程實(shí)例、環(huán)節(jié)實(shí)例和工作項(xiàng)的狀態(tài)轉(zhuǎn)換;組織定義器定義企事業(yè)的組織結(jié)構(gòu);工作流定義器定義工作流模型信息,并通過(guò)組織管理器得到組織定義信息,為工作流模型提供組織支持。各個(gè)部件處理的相關(guān)信息都保存在數(shù)據(jù)庫(kù)中。 3.3 系統(tǒng)模塊的劃分 根據(jù)功能實(shí)現(xiàn)的不同我們進(jìn)行模塊的劃分如下: ⑴ 用戶管理模塊:對(duì)用戶信息的管理,包括注冊(cè)用戶信息,注銷用戶信息,查詢用戶信息等功能; ⑵ 部門管理模塊:對(duì)企事業(yè)部門結(jié)構(gòu)信息的管理,包括增加部門信息,刪除部門信息,查詢部門信息等等功能; ⑶ 職位管理模塊:對(duì)企事業(yè)職能信息的管理,包括增加職位信息,刪除職位信息,查詢職位信息等等功能; ⑷ 角色管理模塊:對(duì)企事業(yè)某種技能信息的管理,包括新增角色信息,刪除角色信息,查詢角色信息等等功能;- ⑸ 工作流模型管理模塊:對(duì)工作流定義模型信息的管理,包括定義新的工作流模型信息,刪除舊的工作流模型信息,查詢工作流模型信息; ⑹ 工作流實(shí)例管理模塊:對(duì)工作流實(shí)例信息的管理,包括啟動(dòng)一個(gè)新的工作流實(shí)例,查詢工作流實(shí)例信息,按照一定的業(yè)務(wù)規(guī)則生成新的環(huán)節(jié)實(shí)例信息,為用戶分派工作項(xiàng),管理工作項(xiàng)信息,按照一定的轉(zhuǎn)換條件為工作流實(shí)例、環(huán)節(jié)實(shí)例轉(zhuǎn)換狀態(tài)等等功能; ⑺ 系統(tǒng)監(jiān)控模塊:為工作流實(shí)例,環(huán)節(jié)實(shí)例等的狀態(tài)轉(zhuǎn)換信息加入日志,掛起、激活工作流實(shí)例,強(qiáng)制結(jié)束工作流實(shí)例,為遲遲不對(duì)自己的工作項(xiàng)進(jìn)行處理的用戶發(fā)出提醒或警告信息,查看各個(gè)工作流實(shí)例的完成程度等等功能。 功能模塊的劃分,為系統(tǒng)的實(shí)現(xiàn)做好充分的準(zhǔn)備。 3.4 數(shù)據(jù)庫(kù)設(shè)計(jì) 基于輕量級(jí)的工作流引擎的特點(diǎn)之一就是把系統(tǒng)相關(guān)的資料,如工作流模型定義信息,工作流實(shí)例信息,組織模型定義信息等等,都以特定的實(shí)體形式保存在關(guān)系型數(shù)據(jù)庫(kù)中。 ⑴ 工作流定義主信息表(workflowTable) 靜態(tài)定義工作流主要信息,包括該工作流的標(biāo)識(shí)ID(可以定義為以”WORKFLOW_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),工作流名稱,工作流描述,工作流類型(工作流的類型有自動(dòng)型,人工型和混合型,自動(dòng)型不需要人工參與,由工組流引擎自動(dòng)執(zhí)行,人工型需要人工參與,混合型包含了自動(dòng)型和人工型),工作流創(chuàng)建日期,工作流創(chuàng)建者ID(即用戶ID),工作流創(chuàng)建人名稱(即用戶名),工作流生命周期(每個(gè)工作流實(shí)例都有它的生命周期期限,在該期限內(nèi)還沒(méi)完成它的工作就直接死亡),目前該工作流實(shí)例數(shù)目(記錄當(dāng)前工作流實(shí)例數(shù)目),工作流啟動(dòng)者角色(指明該工作流可以由哪個(gè)角色發(fā)起,屬于該角色的用戶都可以啟動(dòng)該工作流模型對(duì)應(yīng)的實(shí)例)。工作流重要信息還包括兩方面,一是工作流附件,因?yàn)樵诠ぷ髁鬟M(jìn)行過(guò)程中,肯定會(huì)帶有一些信息,這些信息對(duì)于出差申請(qǐng)來(lái)說(shuō)就是出差申請(qǐng)表,對(duì)于公文流轉(zhuǎn)來(lái)說(shuō)就是以word文檔形式的公文,對(duì)于通知來(lái)說(shuō)可能就是以文本文檔形式的通知書(shū),等等;一是工作流流程描述,包括若干個(gè)環(huán)節(jié)(activity),這些環(huán)節(jié)有一定的順序,表現(xiàn)工作流順序執(zhí)行的特征。把工作流附件和工作流流程描述從工作流定義分離出來(lái),是基于工作流附件和工作流流程描述對(duì)于不同工作流有不同形式和數(shù)量的原因,有利于工作流附件和工作流流程描述的擴(kuò)展。⑵ 工作流附件信息表(workflowAttachmentTable) 靜態(tài)定義工作流所需要的附件,包括附件ID(可以定義為以”Attachment_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),工作流ID(標(biāo)識(shí)屬于哪個(gè)工作流),附件類型(表或文件),附件名稱(如果類型是表,則為該表的名稱,如果是word文檔,則為該文檔名稱,如果是文本文檔,則為該文件名稱),其它信息(如果類型為表格,該字段以一定的格式保存該附件表格的所有字段的各種信息,包括字段名稱,字段數(shù)據(jù)類型,數(shù)據(jù)類型長(zhǎng)度,字段描述)。⑶ 工作流流程描述表(workflowProcessTable) 靜態(tài)定義工作流的流程,由若干環(huán)節(jié)(activity)組成,一個(gè)環(huán)節(jié)為一條記錄,包括工作流ID(環(huán)節(jié)所屬工作流ID),環(huán)節(jié)ID(可以定義為以”ACTIVITY_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),環(huán)節(jié)名稱(即該環(huán)節(jié)名稱),環(huán)節(jié)描述(對(duì)該環(huán)節(jié)的具體描述),參與者角色I(xiàn)D(將相同權(quán)限的用戶作為一個(gè)集合,在數(shù)據(jù)庫(kù)以同一個(gè)角色操作數(shù)據(jù)庫(kù)特定操作,該項(xiàng)標(biāo)識(shí)角色I(xiàn)D),環(huán)節(jié)任務(wù)分派規(guī)則,上一個(gè)環(huán)節(jié)ID(保存上一個(gè)環(huán)節(jié)的ID,由這項(xiàng)可以判斷該環(huán)節(jié)是否整個(gè)流程的開(kāi)始環(huán)節(jié),或者該環(huán)節(jié)的任務(wù)沒(méi)有完成(審批不通過(guò),或沒(méi)在其生命周期期限內(nèi)完成)時(shí)作回滾處理的重要數(shù)據(jù)項(xiàng),根據(jù)這個(gè)數(shù)據(jù)項(xiàng)可以回滾到上一個(gè)環(huán)節(jié)),下一個(gè)環(huán)節(jié)ID(保存下一環(huán)節(jié)的ID,由這項(xiàng)可以判斷該環(huán)節(jié)是否整個(gè)流程的結(jié)束環(huán)節(jié),或者該環(huán)節(jié)的任務(wù)完成了,根據(jù)這個(gè)數(shù)據(jù)項(xiàng)可以啟動(dòng)下一環(huán)節(jié),繼續(xù)向前推進(jìn))。 ⑷ 工作流實(shí)例啟動(dòng)描述(workflowInstanceStartUpTable)動(dòng)態(tài)定義工作流實(shí)例啟動(dòng)信息(其實(shí)這也是工作流實(shí)例信息表)啟動(dòng)者在產(chǎn)生一個(gè)工作流實(shí)例之前必須根據(jù)工作流的定義做好準(zhǔn)備工作,這些準(zhǔn)備工作的信息就填入該表中,然后交付給工作流引擎。該描述包括工作流ID(所屬工作流ID),工組流實(shí)例ID(標(biāo)識(shí)該工作流實(shí)例,可以定義為以”WORKFLOWINSTANCE_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),工作流實(shí)例描述,工作流實(shí)例創(chuàng)建時(shí)間,工作流實(shí)例創(chuàng)建者ID(啟動(dòng)者ID),工作流實(shí)例創(chuàng)建者名稱,當(dāng)前工作流狀態(tài)(標(biāo)識(shí)當(dāng)前工作流實(shí)例的狀態(tài),啟動(dòng)者在創(chuàng)建后卻沒(méi)提交給工作流引擎前的狀態(tài)為“initialized”初始化狀態(tài),之后的狀態(tài)要視工作流類型而定),當(dāng)前狀態(tài)具體描述,當(dāng)前操作者ID(當(dāng)前工作流要被誰(shuí)操作),當(dāng)前操作者名稱。工作流實(shí)例完成標(biāo)志(標(biāo)識(shí)該工作流實(shí)例的完成),工作流實(shí)例完成時(shí)間,當(dāng)前工作流狀態(tài)和當(dāng)前操作者ID和當(dāng)前工作流狀態(tài)具體描述三項(xiàng)在工作流實(shí)例的運(yùn)行過(guò)程中,可以動(dòng)態(tài)追蹤該工作流實(shí)例的運(yùn)行,而這三項(xiàng)再加上工作流完成標(biāo)志和工作流完成時(shí)間,可以知道該工作流實(shí)例的完成情況。 ⑸ 工作流實(shí)例過(guò)程描述(workflowInstanceProcessingTable)以環(huán)節(jié)為單位動(dòng)態(tài)描述工作流實(shí)例的處理過(guò)程,啟動(dòng)者創(chuàng)建工作流實(shí)例后,提交給工作流引擎后,工作流實(shí)例就根據(jù)工作流定義的流程進(jìn)行運(yùn)轉(zhuǎn)了。包括工作流實(shí)例ID,工作流實(shí)例所對(duì)應(yīng)環(huán)節(jié)(工作流流程就是由一系列的環(huán)節(jié)組成,按照預(yù)定義的流程一個(gè)環(huán)節(jié)過(guò)渡到另一個(gè)環(huán)節(jié)),當(dāng)前該環(huán)節(jié)所處狀態(tài)(這標(biāo)識(shí)著該環(huán)節(jié)在處理過(guò)程中的狀態(tài),最終狀態(tài)表示該環(huán)節(jié)的完成狀態(tài)),當(dāng)前操作者(對(duì)應(yīng)的是角色),當(dāng)前狀態(tài)具體描述。⑹ 工作項(xiàng)描述(workItemTable) 動(dòng)態(tài)描述已經(jīng)參與該工作流實(shí)例處理的參與者(對(duì)應(yīng)已處理環(huán)節(jié)的角色的每個(gè)用戶)的工作情況。包括工作項(xiàng)ID(可以定義為以”WorkItem-_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),工作項(xiàng)名字,工作項(xiàng)描述,工作流實(shí)例ID(該工作項(xiàng)所屬的工作流實(shí)例),該環(huán)節(jié)任務(wù)分派規(guī)則(繼承環(huán)節(jié)的任務(wù)分派規(guī)則,用于判斷該環(huán)節(jié)任務(wù)完成方式),當(dāng)前該工作項(xiàng)所處狀態(tài)(根據(jù)不同的工作流類型有不同的狀態(tài),根據(jù)這些狀態(tài)可以在參與者接口上顯示不同的工作項(xiàng)列表),執(zhí)行動(dòng)作(記錄執(zhí)行者會(huì)對(duì)該工作項(xiàng)執(zhí)行怎么樣的動(dòng)作,如果是申請(qǐng)事務(wù)則是審批通過(guò)或?qū)徟煌ㄟ^(guò)),執(zhí)行時(shí)間(記錄該執(zhí)行動(dòng)作的時(shí)間),用戶ID(標(biāo)志該工作項(xiàng)是屬于誰(shuí)的。⑺ 用戶描述(UserTable) 該表描述所有用戶的資料,包括用戶ID(可以定義為以”User-_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),用戶名稱,用戶密碼,用戶所屬部門,職位等等信息,級(jí)別是該用戶的系統(tǒng)權(quán)限,包括普通職員,高級(jí)職員和系統(tǒng)管理員。⑻ 日志信息描述(LogTable) 描述用戶的工作日志,便于對(duì)各種操作進(jìn)行追蹤。包括日志ID(可以定義為以”Log-_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào))等等,其中有一項(xiàng)是相關(guān)工作項(xiàng)ID,這是當(dāng)參與者對(duì)原始工作項(xiàng)進(jìn)行執(zhí)行操作動(dòng)作時(shí)的工作項(xiàng)。⑼ 角色信息(RoleTable) 描述角色的信息,包括角色I(xiàn)D(可以定義為以”Role__xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),角色名稱,部門名稱,職位名稱,角色描述。角色由部門和職位組成。 ⑽ 部門信息(DepartmentTable) 描述部門的信息,包括部門ID(可以定義為以” Depatment_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),部門名稱,部門其它信息。 ⑾ 職位信息(PositionTable) 描述職位的信息,包括職位ID(可以定義為以” Position_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動(dòng)生成的序號(hào)),職位名稱,職位其它信息。 除了以上這些主要表以外,還有一些我們是在定義工作流模型的時(shí)候才加入數(shù)據(jù)庫(kù)的,如對(duì)應(yīng)工作流附件類型為表的表格。為了減少網(wǎng)絡(luò)流量和提高系統(tǒng)的運(yùn)行速度,我們把一些有關(guān)聯(lián)的數(shù)據(jù)庫(kù)操作寫成存儲(chǔ)過(guò)程: ⑴ 刪除工作流模型存儲(chǔ)過(guò)程:刪除一個(gè)工作流模型,必須刪除它的工作流定義主信息,同時(shí)刪除對(duì)應(yīng)的附件信息,附件為表的表格,環(huán)節(jié)信息; ⑵ 創(chuàng)建附件類型為表的表格:定義附件信息時(shí)已經(jīng)把該表格的字段信息保存在該附件信息的其它信息字段中,并且有一定的格式,那么我們從該字段中按照一定的格式還原表格的字段信息,并根據(jù)這些信息在數(shù)據(jù)庫(kù)中創(chuàng)建該表格。 3.5 類的設(shè)計(jì) 用面向?qū)ο蟮姆椒ê蚒ML建模工具,再根據(jù)系統(tǒng)結(jié)構(gòu)圖,模塊的劃分和數(shù)據(jù)庫(kù)的設(shè)計(jì),我們把對(duì)象轉(zhuǎn)化成類,進(jìn)行類的設(shè)計(jì)。我們把整個(gè)系統(tǒng)的類分成三部分,一是實(shí)體類,二是業(yè)務(wù)類,三是接口類。 3.5.1 實(shí)體類的設(shè)計(jì) 工作流模型的對(duì)象就是一個(gè)一個(gè)的實(shí)體,實(shí)體類又分為數(shù)據(jù)庫(kù)訪問(wèn)類和值對(duì)象類。數(shù)據(jù)庫(kù)訪問(wèn)類是對(duì)存儲(chǔ)在數(shù)據(jù)庫(kù)的實(shí)體信息進(jìn)行訪問(wèn)(插入,刪除,更新,查詢)的類,值對(duì)象類是在客戶端和服務(wù)器端之間交換資料的實(shí)體信息類。 3.5.1.1 數(shù)據(jù)庫(kù)訪問(wèn)類 ⑴ 數(shù)據(jù)庫(kù)連接類:該類是其它數(shù)據(jù)庫(kù)訪問(wèn)類的父類,管理數(shù)據(jù)庫(kù)的連接,負(fù)責(zé)從數(shù)據(jù)庫(kù)連接池找可用的數(shù)據(jù)庫(kù)連接給其它數(shù)據(jù)庫(kù)訪問(wèn)類使用,使用完畢后負(fù)責(zé)放回連接池,類圖如下圖: 說(shuō)明:屬性只有一個(gè)connection,它代表數(shù)據(jù)庫(kù)的一條連接,類型為Connection,方法有一個(gè)構(gòu)造函數(shù)workflowDAO()和一個(gè)關(guān)閉連接的函數(shù)closeConnection()。WorkflowDAO()實(shí)現(xiàn)從數(shù)據(jù)庫(kù)連接池找一個(gè)可用連接并賦值給屬性connection,closeConnection()負(fù)責(zé)把連接放回?cái)?shù)據(jù)庫(kù)連接池。 ⑵ 工作流定義主信息訪問(wèn)類:對(duì)應(yīng)數(shù)據(jù)庫(kù)的工作流定義主信息表,該類封裝了對(duì)該表格記錄的各種操作,就是插入或刪除一條工作流定義主信息,查詢特定工作流定義信息或者所有工作流定義信息,類圖如下圖: 說(shuō)明:構(gòu)造函數(shù)WFDefineMainInfoDAO()調(diào)用父類構(gòu)造函數(shù),從數(shù)據(jù)庫(kù)連接池中找一個(gè)可用的數(shù)據(jù)庫(kù)連接(其它數(shù)據(jù)庫(kù)訪問(wèn)類也一樣)。 ⑶ 工作流流程信息訪問(wèn)類:對(duì)應(yīng)工作流流程描述表,該類封裝了對(duì)該表格記錄的各種操作,流程是由若干環(huán)節(jié)組成,就是插入或刪除一條環(huán)節(jié)信息,查詢同屬于一個(gè)流程的環(huán)節(jié)信息等等,類圖如下圖: 說(shuō)明:findWorkflowFirlstActivityInfo()函數(shù)負(fù)責(zé)找該工作流模型的第一個(gè)環(huán)節(jié)的信息,findWorkflowNextActivityID()負(fù)責(zé)根據(jù)當(dāng)前環(huán)節(jié)ID找下一環(huán)節(jié)的信息。 ⑷ 工作流附件信息訪問(wèn)類:對(duì)應(yīng)工作流附件信息表,該類封裝了對(duì)該表格記錄的各種操作,就是插入或刪除一條工作流附件信息,查詢同屬于一個(gè)工作流模型的附件信息。類圖如下: ⑸ 工作流附件類型為表的信息訪問(wèn)類:對(duì)應(yīng)工作流附件類型為表格的信息表,該類封裝了該表記錄的各種操作,就是插入或查詢一條工作流附件類型為表格的具體信息,類圖如下: ⑹ 工作流實(shí)例啟動(dòng)信息訪問(wèn)類:對(duì)應(yīng)工作流實(shí)例啟動(dòng)信息表,該類封裝了該表記錄的各種操作,就是插入或查詢一條工作流啟動(dòng)信息,查詢同屬于一個(gè)用戶的工作流實(shí)例啟動(dòng)信息,更新部分字段信息,類圖如下: 說(shuō)明:selectFinishedWorkflowInstanceStartUpInfoVO()負(fù)責(zé)查詢特定用戶啟動(dòng)的并且已經(jīng)完成的工作流信息,selectNotFinishedWorkflowInstanceStartUpInfoVO()負(fù)責(zé)查詢特定用戶啟動(dòng)的并且還沒(méi)有完成的工作流信息,updateWFInstFinishedFields()負(fù)責(zé)在工作流實(shí)例結(jié)束時(shí)更新特定的字段信息,updateWFInstProcessingFields()負(fù)責(zé)在工作流實(shí)例運(yùn)行工程中更新特定的字段信息。 ⑺ 工作流實(shí)例過(guò)程信息訪問(wèn)類:對(duì)應(yīng)工作流實(shí)例過(guò)程信息表,該類封裝了該表格記錄的各種操作,每一條記錄實(shí)際上是一個(gè)環(huán)節(jié)實(shí)例,就是插入、刪除或查詢一條環(huán)節(jié)實(shí)例信息,查詢指定工作流實(shí)例的所有環(huán)節(jié)信息,更新部分信息字段,類圖如下: 說(shuō)明:SetWFInstProcessingCurrentPerformerNumField()負(fù)責(zé)更新已經(jīng)處理該環(huán)節(jié)實(shí)例對(duì)應(yīng)的工作項(xiàng)的參與該環(huán)節(jié)實(shí)例的用戶數(shù)目,updateWFInstProcessingFields()負(fù)責(zé)在環(huán)節(jié)實(shí)例處理過(guò)程中更新特定的字段信息。 ⑻ 工作項(xiàng)信息訪問(wèn)表:對(duì)應(yīng)工作項(xiàng)表,該類封裝了該表格記錄的各種操作,就是插入或刪除一條工作項(xiàng)信息,查詢工作項(xiàng)信息,更新工作項(xiàng)信息,類圖如下: 說(shuō)明:selectFinishedWorkItemVO()負(fù)責(zé)查詢特定用戶已經(jīng)處理完畢的工作項(xiàng)信息,selectNotYetFinishedWorkItemVO()負(fù)責(zé)查詢還沒(méi)有處理的工作項(xiàng)信息,updateWorkItemFields()負(fù)責(zé)更新工作項(xiàng)在處理過(guò)程中的特定字段信息,isPerformedInWorkItemByUser()負(fù)責(zé)判斷該工作項(xiàng)是否已經(jīng)處理完畢。 ⑼ 用戶信息訪問(wèn)表:對(duì)應(yīng)用戶信息表,該類封裝了該表格記錄的各種操作,就是插入、刪除或查詢一條用戶信息,查詢特定角色對(duì)應(yīng)的用戶信息,類圖如下: 說(shuō)明:selectCountRS()負(fù)責(zé)統(tǒng)計(jì)同屬于一個(gè)角色的用戶數(shù)目。 ⑽ 角色信息訪問(wèn)類:對(duì)應(yīng)角色信息表,該類封裝了該表記錄的各種操作,就是插入、刪除或查詢一條角色信息,查詢所有角色信息,類圖如下: ⑾ 部門信息訪問(wèn)類:對(duì)應(yīng)部門信息表,該類封裝了該表記錄的各種操作,就是插入、刪除或查詢一條部門信息,查詢所有部門信息,類圖如下: ⑿ 職位信息訪問(wèn)類:對(duì)應(yīng)職位信息表,該類封裝了該表記錄的各種操作,就是插入、刪除或查詢一條職位信息,查詢所有職位信息,類圖如下: ⒀ 日志信息訪問(wèn)類:對(duì)應(yīng)日志信息表,該類封裝了該表記錄的各種操作,就是插入、刪除一條日志信息,查詢特定的日志信息,類圖如下: 3.5.1.2 值對(duì)象類 值對(duì)象類其實(shí)是一種數(shù)據(jù)結(jié)構(gòu),用于客戶機(jī)和服務(wù)器之間的數(shù)據(jù)交換,也用于對(duì)象實(shí)例的數(shù)據(jù)傳遞,它有若干屬性,可是很少方法,實(shí)例化后就對(duì)應(yīng)數(shù)據(jù)庫(kù)表的一條記錄。 ⑴ 工作流定義主信息值對(duì)象類:可以保存工作流主信息表的一條記錄信息,類圖如下: ⑵ 工作流流程信息值對(duì)象類:可以保存工作流流程信息表的一條記錄信息,類圖如下: ⑶ 工作流附件信息值對(duì)象類:可以保存工作流附件信息表的一條記錄信息,類圖如下: 說(shuō)明:SetOtherInfo()負(fù)責(zé)以一定格式把工作流附件類型為表的表格字段信息保存在OtherInfo中,GetOtherInfo()負(fù)責(zé)從OtherInfo中以一定的格式還原工作流附件為表的表格字段信息。 ⑷ 工作流附件類型為表的信息值對(duì)象類:可以保存工作流附件類型為表的信息表的一條記錄信息,類圖如下: 說(shuō)明:tableName就是工作流附件類型為表的表格名稱,fieldValue就是對(duì)應(yīng)該表的一條記錄的各個(gè)字段值,用可變長(zhǎng)數(shù)組Vector保存下來(lái)。 ⑸ 工作流實(shí)例啟動(dòng)信息值對(duì)象類:可以保存工作流實(shí)例啟動(dòng)信息表的一條記錄信息,類圖如下: ⑹ 工作流實(shí)例過(guò)程信息值對(duì)象類:可以保存工作流實(shí)例過(guò)程信息表的一條記錄信息,類圖如下: ⑺ 工作項(xiàng)信息值對(duì)象類:可以保存工作項(xiàng)信息表的一條記錄信息,類圖如下: ⑻ 用戶信息值對(duì)象類:可以保存用戶信息表的一條記錄信息,類圖如下: ⑼ 角色信息值對(duì)象類:可以保存角色信息表的一條記錄信息,類圖如下: ⑽ 部門信息值對(duì)象類:可以保存部門信息表的一條記錄信息,類圖如下: ⑾ 職位信息值對(duì)象類:可以保存職位信息表的一條記錄信息,類圖如下: ⑿ 日志信息值對(duì)象類:可以保存日志信息表的一條記錄信息,類圖如下: ⒀ 信息集合值對(duì)象類:可以保存各種信息的一個(gè)集合,當(dāng)需要返回多條記錄信息的時(shí)候可以使用該類,類圖如下: 說(shuō)明:只有一個(gè)屬性,是一個(gè)可變長(zhǎng)數(shù)組,可以存放不定數(shù)量的記錄信息。3.5.2 業(yè)務(wù)類的設(shè)計(jì) 業(yè)務(wù)類,其實(shí)就是邊界類,它根據(jù)系統(tǒng)的需求按照一定的方式把各個(gè)實(shí)體類聯(lián)系起來(lái),以實(shí)現(xiàn)系統(tǒng)的各種功能。按照實(shí)現(xiàn)功能的不同我們可以分為用戶管理類,角色管理類,部門管理類,職位管理類,工作流模型管理類,工作流實(shí)例管理類,系統(tǒng)監(jiān)控管理類。 ⑴ 用戶管理類:負(fù)責(zé)用戶的注冊(cè),注銷,檢測(cè)合法性,查找用戶信息,類圖如下: ⑵ 角色管理類:負(fù)責(zé)新增加角色,刪除角色,查找角色信息,類圖如下: ⑶ 部門管理類:負(fù)責(zé)新增加部門,刪除部門,查找部門信息,類圖如下: ⑷ 職位管理類:負(fù)責(zé)新增加職位,刪除職位,查找部門信息,類圖如下: ⑸ 工作流模型管理類:負(fù)責(zé)工作流模型的定義,解析,類圖如下: ⑹ 工作流實(shí)例管理類:負(fù)責(zé)工作流實(shí)例的創(chuàng)建,維護(hù)各種實(shí)例的狀態(tài)信息,分派任務(wù)給用戶,用戶處理工作項(xiàng)等等的工作,類圖如下: 說(shuō)明:uploadAttachmentToServer()負(fù)責(zé)把工作流附件類型為文檔的文檔上傳到服務(wù)器特定目錄下。 ⑺系統(tǒng)監(jiān)控管理類:是一個(gè)綜合類,主要通過(guò)調(diào)用其它管理類的功能來(lái)實(shí)現(xiàn)本身的功能,就是查看工作流實(shí)例的過(guò)程狀態(tài),完成程度,根據(jù)一定的條件有必要控制實(shí)例的掛起,激活,結(jié)束,查看各個(gè)參與用戶的工作情況,在出現(xiàn)工作誤時(shí)、意外、異常等等情況時(shí)采取一定的措施保證整個(gè)實(shí)例的完成。而所有這些都保存在日志中。 3.5.3 接口類的設(shè)計(jì) 接口類是工作流引擎提供給外部應(yīng)用的類,應(yīng)用系統(tǒng)通過(guò)調(diào)用這些類,來(lái)實(shí)現(xiàn)一定的應(yīng)用功能。我們?cè)诮涌陬惖脑O(shè)計(jì)上,采取格式統(tǒng)一、隱藏系統(tǒng)復(fù)雜性、功能調(diào)用方便的原則,盡量為外部應(yīng)用系統(tǒng)提供簡(jiǎn)潔、易懂的功能調(diào)用接口。因而我們把這些類都設(shè)計(jì)成只有一個(gè)業(yè)務(wù)類實(shí)例,一個(gè)ToDoWhat()方法的類,并且每一個(gè)業(yè)務(wù)類對(duì)應(yīng)一個(gè)接口類。在這些接口類中,業(yè)務(wù)類實(shí)例作為它的一個(gè)數(shù)據(jù)成員,ToDoWhat()方法有兩個(gè)參數(shù),toDoCode(工作代碼)和object(數(shù)據(jù)交換對(duì)象),工作代碼表示要調(diào)用的功能的標(biāo)識(shí),數(shù)據(jù)交換對(duì)象表示功能調(diào)用要處理的數(shù)據(jù)(應(yīng)用數(shù)據(jù))。從本質(zhì)上來(lái)說(shuō),就是根據(jù)不同的工作代碼調(diào)用業(yè)務(wù)類實(shí)例的不同方法,對(duì)各種應(yīng)用數(shù)據(jù)進(jìn)行處理。 第四章 系統(tǒng)實(shí)現(xiàn)系統(tǒng)的實(shí)現(xiàn)主要包括關(guān)鍵問(wèn)題的解決方案和一個(gè)工作流管理應(yīng)用系統(tǒng)的實(shí)踐。首先提出關(guān)鍵問(wèn)題,然后給出解決方案,最后提出一個(gè)應(yīng)用架構(gòu),利用J2EE技術(shù)和數(shù)據(jù)庫(kù)技術(shù)實(shí)現(xiàn)一個(gè)基于輕量級(jí)工作流引擎的簡(jiǎn)單工作流管理應(yīng)用系統(tǒng)。 4.1 關(guān)鍵問(wèn)題的解決方案 在實(shí)現(xiàn)工作流引擎的時(shí)候,有一些關(guān)鍵問(wèn)題,例如啟動(dòng)工作流實(shí)例,推動(dòng)工作流實(shí)例的進(jìn)程,類型為文檔的附件的處理等等,都是要重點(diǎn)解決的。4.1.1 啟動(dòng)工作流實(shí)例 當(dāng)根據(jù)各種業(yè)務(wù)需求創(chuàng)建了對(duì)應(yīng)的工作流模型,根據(jù)結(jié)構(gòu)組織情況創(chuàng)建了組織模型后,用戶就可以創(chuàng)建工作流實(shí)例并啟動(dòng)它。用戶把工作流實(shí)例的信息提交給工作流引擎,那么工作流引擎如何工作呢?工作流引擎其實(shí)做了一系列的工作,其處理過(guò)程如下: ⑴ 工作流引擎得到用戶創(chuàng)建的工作流實(shí)例數(shù)據(jù),記錄在工作流實(shí)例啟動(dòng)信息表中; ⑵ 工作流引擎解析對(duì)應(yīng)該工作流實(shí)例的工作流模型的含義,獲得必要信息提供給工作流實(shí)例使用; ⑶ 工作流引擎根據(jù)這些必要信息找到工作流模型對(duì)應(yīng)流程的第一個(gè)環(huán)節(jié)信息,并生成該工作流實(shí)例的第一個(gè)環(huán)節(jié)實(shí)例,記錄在工作流實(shí)例過(guò)程描述表中; ⑷ 工作流引擎根據(jù)任務(wù)分派原則開(kāi)始把任務(wù)項(xiàng)分派給參與該環(huán)節(jié)實(shí)例的所有用戶; ⑸ 工作流引擎根據(jù)該環(huán)節(jié)定義的參與者角色,找出所有同屬于該角色的所有用戶,為各個(gè)用戶都生成一個(gè)工作項(xiàng),記錄在工作項(xiàng)信息表中,工作項(xiàng)要繼承該環(huán)節(jié)定義的業(yè)務(wù)規(guī)則,完成任務(wù)的分派; ⑹ 工作流引擎根據(jù)該環(huán)節(jié)定義的業(yè)務(wù)規(guī)則,如果該環(huán)節(jié)是自動(dòng)型的,則為該環(huán)節(jié)的參與用戶分派完任務(wù)后立刻就根據(jù)該環(huán)節(jié)信息去找下一個(gè)環(huán)節(jié)的信息,進(jìn)行下一環(huán)節(jié)實(shí)例的處理;如果該環(huán)節(jié)不是自動(dòng)型的,是需要人工參與處理的,則工作流引擎暫停該工作流實(shí)例的處理工作,等待參與用戶處理的結(jié)果; ⑺ 啟動(dòng)工作流實(shí)例的工作結(jié)束。 4.1.2 推進(jìn)工作流實(shí)例的進(jìn)程 ⑴ 如果上一環(huán)節(jié)定義的業(yè)務(wù)規(guī)則是自動(dòng)型的,則立刻根據(jù)當(dāng)前環(huán)節(jié)信息查找下一環(huán)節(jié); ⑵ 如果上一環(huán)節(jié)定義的業(yè)務(wù)規(guī)則是不是自動(dòng)型的,則等待參與用戶對(duì)各自的工作項(xiàng)進(jìn)行處理,當(dāng)每一個(gè)用戶處理完后,工作流引擎都要判斷該環(huán)節(jié)實(shí)例是否結(jié)束,結(jié)束的條件是業(yè)務(wù)規(guī)則的規(guī)定和用戶的處理結(jié)果。 ① 如果業(yè)務(wù)規(guī)則是與聚合,當(dāng)當(dāng)前用戶的處理結(jié)果是非正常處理的話,該環(huán)節(jié)實(shí)例就結(jié)束,并且該工作流實(shí)例也結(jié)束,通知其他還沒(méi)處理的用戶該環(huán)節(jié)已經(jīng)結(jié)束,并記錄在相應(yīng)的數(shù)據(jù)庫(kù)表中;當(dāng)當(dāng)前用戶的處理結(jié)果是正常處理的話,則再判斷是否所有參與的用戶都處理完畢,如果是則結(jié)束該環(huán)節(jié),通知其他用戶該環(huán)節(jié)已經(jīng)結(jié)束,并記錄在相應(yīng)的數(shù)據(jù)庫(kù)表中,然后查找下一環(huán)節(jié),如果不是則等待其他還沒(méi)處理的用戶的處理結(jié)果。 ② 如果業(yè)務(wù)規(guī)則是或聚合,當(dāng)當(dāng)前用戶的處理結(jié)果是正常處理的話,該環(huán)節(jié)的實(shí)例就結(jié)束,并且該工作流實(shí)例也結(jié)束,通知其他參與還沒(méi)處理的用戶該環(huán)節(jié)實(shí)例已經(jīng)結(jié)束,記錄在相應(yīng)的數(shù)據(jù)庫(kù)表中,然后查找下一環(huán)節(jié);當(dāng)當(dāng)前用戶的處理結(jié)果是非正常的話,則等待其他還沒(méi)處理的用戶的處理結(jié)果。 ③ 如果業(yè)務(wù)規(guī)則是投票聚合,當(dāng)當(dāng)前用的處理結(jié)果是正常處理的話,則使統(tǒng)計(jì)正常處理結(jié)果的計(jì)數(shù)器加一,然后判斷該統(tǒng)計(jì)數(shù)量是否已經(jīng)達(dá)到規(guī)定的數(shù)量,如果是則結(jié)束該環(huán)節(jié)實(shí)例,并通知其他還沒(méi)處理的用戶該環(huán)節(jié)實(shí)例已經(jīng)結(jié)束,記錄在數(shù)據(jù)庫(kù)表中,然后查找下一環(huán)節(jié);當(dāng)當(dāng)前用的處理結(jié)果是非正常處理的話,則不統(tǒng)計(jì),等待其他還沒(méi)處理的用戶的處理結(jié)果。 ⑶ 當(dāng)前環(huán)節(jié)實(shí)例結(jié)束后,工作流引擎就找下一環(huán)節(jié)處理,如果沒(méi)有下一環(huán)節(jié),則結(jié)束該工作流實(shí)例,記錄在數(shù)據(jù)庫(kù)表中,如果還有環(huán)節(jié),則同樣生成環(huán)節(jié)實(shí)例,進(jìn)行任務(wù)分派,等待環(huán)節(jié)實(shí)例的結(jié)束。工作流引擎就是這樣推進(jìn)工作流實(shí)例進(jìn)程,從一個(gè)實(shí)例環(huán)節(jié)到下一個(gè)實(shí)例環(huán)節(jié),直到工作流實(shí)例結(jié)束為止。 4.1.3 類型為文檔的附件的處理 對(duì)于文檔形式的附件,我們采用上傳文件到服務(wù)器的方法,用戶編輯好文檔后,以規(guī)定的文件名上傳到服務(wù)器中特定的目錄中,當(dāng)用戶要查看該文檔時(shí),工作流引擎會(huì)根據(jù)該附件文檔對(duì)應(yīng)的信息得到其文件名,用戶根據(jù)該文件名下載到本地中,同時(shí)調(diào)用外部應(yīng)用程序如work2000、記事本打開(kāi)給用戶瀏覽其內(nèi)容。 4.2 一個(gè)簡(jiǎn)單工作流管理系統(tǒng)的實(shí)現(xiàn) 現(xiàn)在,我們利用J2EE技術(shù)把工作流引擎開(kāi)發(fā)出來(lái),并基于該引擎做一個(gè)簡(jiǎn)單的應(yīng)用系統(tǒng),以證明系統(tǒng)設(shè)計(jì)的可行性。我們用Jbuilder9.0做開(kāi)發(fā)工具,用MS SQLSERVER2000做數(shù)據(jù)庫(kù)管理系統(tǒng)。4.2.1 系統(tǒng)應(yīng)用框架 工作流實(shí)例管理器 工作流模型管理器 組織管理器 系統(tǒng)監(jiān)控器 工作流引擎 應(yīng)用服務(wù)器 數(shù)據(jù)庫(kù) Web界面 文檔管理系統(tǒng) 圖4.1 系統(tǒng)應(yīng)用框架 4.2.2 J2EE相關(guān)技術(shù)的應(yīng)用 J2EE為多層Web應(yīng)用系統(tǒng)提供了容器平臺(tái),用J2EE技術(shù)把工作流管理系統(tǒng)開(kāi)發(fā)成一個(gè)多層Web應(yīng)用系統(tǒng),是最合適不過(guò)了。 4.2.2.1 J2EE核心模式和類的實(shí)現(xiàn) 模式是特定問(wèn)題的可重現(xiàn)的解決方案,使用模式有莫大的好處。模式可以權(quán)衡已經(jīng)被證實(shí)的解決方案,為交流提供一個(gè)共同的詞匯,約束解決方案的范圍。J2EE核心模式是在J2EE平臺(tái)上應(yīng)用的模式,它在表示層,業(yè)務(wù)層,集成層都有特定的模式,為基于J2EE平臺(tái)的開(kāi)發(fā)提供很好的解決方案。對(duì)類的實(shí)現(xiàn)我們采用了J2EE核心模式,主要運(yùn)用的核心模式是業(yè)務(wù)層的ValueObject(值對(duì)象)和集成層的DAO(DataAccessObject,數(shù)據(jù)訪問(wèn)對(duì)象)。 ⑴ 值對(duì)象:基于多層應(yīng)用架構(gòu)的系統(tǒng),客戶端和服務(wù)器端往往有大量的數(shù)據(jù)交換,而且客戶端調(diào)用的方法都是遠(yuǎn)程的,不是本地的,為了減輕網(wǎng)絡(luò)負(fù)載,提高應(yīng)用程序的性能,用值對(duì)象封裝業(yè)務(wù)數(shù)據(jù),在客戶端和服務(wù)器端進(jìn)行數(shù)據(jù)交換。因而我們把所有工作流對(duì)象都用值對(duì)象表示,像工作流定義主信息值對(duì)象類(WFDefineMainInfo)。在這些值對(duì)象中,所有屬性和方法都是聲明為公共的,并且很少方法,很多屬性,這些屬性就是對(duì)應(yīng)的工作流對(duì)象的屬性,也對(duì)應(yīng)了數(shù)據(jù)庫(kù)中表的某個(gè)字段。 ⑵ 數(shù)據(jù)訪問(wèn)對(duì)象:基于關(guān)系數(shù)據(jù)庫(kù)技術(shù)的系統(tǒng),會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行頻繁的訪問(wèn),數(shù)據(jù)庫(kù)表的眾多,對(duì)某個(gè)表操作的方式的眾多,如果不對(duì)這些表和表的操作方式進(jìn)行必要的歸類,只會(huì)造成模塊聚合度的降低,代碼混亂的后果。我們使用數(shù)據(jù)訪問(wèn)對(duì)象,來(lái)抽象和封裝對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),所有涉及到數(shù)據(jù)庫(kù)訪問(wèn)的情況都使用數(shù)據(jù)訪問(wèn)對(duì)象去實(shí)現(xiàn)。工作流對(duì)象的所有數(shù)據(jù)都保存在數(shù)據(jù)庫(kù)中,我們?yōu)槊總€(gè)對(duì)象數(shù)據(jù)的數(shù)據(jù)庫(kù)操作都封裝在數(shù)據(jù)訪問(wèn)對(duì)象中,像工作流定義主信息訪問(wèn)類(WFDefineMainInfoDAO)。4.2.2.2 JavaBean技術(shù)與類的實(shí)現(xiàn) JavaBean是基于Java技術(shù)的軟件構(gòu)件模型,它是Java語(yǔ)言編寫的可移植的不依賴于平臺(tái)的軟件構(gòu)件模塊。我們把系統(tǒng)所有的類都實(shí)現(xiàn)為一個(gè)一個(gè)的JavaBean,提高類的可重用性,有利于日后的功能擴(kuò)展。另外,JavaBean應(yīng)用到JSP中,可以為JSP應(yīng)用帶來(lái)更好的可伸縮性。 4.2.2.3 JBOSS應(yīng)用服務(wù)器和工作流引擎的實(shí)現(xiàn) 應(yīng)用服務(wù)器我們采用JBOSS,這是一個(gè)免費(fèi)的產(chǎn)品,它提供數(shù)據(jù)庫(kù)訪問(wèn)(JDBC)、命名機(jī)制(JNDI)服務(wù)等服務(wù),支持?jǐn)?shù)據(jù)庫(kù)連接池、實(shí)例連接池,這些為我們的工作流引擎的實(shí)現(xiàn)提供了支持,給系統(tǒng)開(kāi)發(fā)帶來(lái)很大的方便。 ⑴ 對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的支持:JBOSS通過(guò)對(duì)特定數(shù)據(jù)庫(kù)管理系統(tǒng)的配置(XML文件),并實(shí)例化對(duì)數(shù)據(jù)庫(kù)的若干連接,放進(jìn)數(shù)據(jù)庫(kù)連接池中,提供給系統(tǒng)使用。在JBOSS運(yùn)行過(guò)程中,對(duì)這些數(shù)據(jù)庫(kù)進(jìn)行有效的管理,減輕了工作流引擎的工作負(fù)擔(dān)。① 配置方法 mssql-ds.xml文件: MSSQLDS/* 數(shù)據(jù)源名字 */ jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WorkflowDB /* 連接URL,包括服務(wù)器 地址,數(shù)據(jù)庫(kù)名稱 */ com.microsoft.jdbc.sqlserver.SQLServerDriver /* sqlserver驅(qū)動(dòng) */ workflowUser /* 用戶名稱 */ 123456 /* 用戶密碼 */ ② 調(diào)用方法(使用JNDI機(jī)制)部分代碼: InitialContext ctx = new InitialContext();//初始化上下文 DataSource ds =(DataSource)ctx.lookup(“java:/MSSQLDS”); //根據(jù)數(shù)據(jù)源名字查找已經(jīng)配置好的數(shù)據(jù)源 Connection conn = ds.getConnection(); //調(diào)用該方法可以得到對(duì)數(shù)據(jù)庫(kù)的一條連接,而這條連接已經(jīng)被JBOSS初始化,實(shí)際上是從數(shù)據(jù)庫(kù)連接池中找到一條可用的連接而已,然后通過(guò)該連接就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作,操作完畢后不用顯式關(guān)閉,JBOSS會(huì)自動(dòng)回收該連接,把該連接重新放入連接池中。 ⑵ 對(duì)對(duì)象實(shí)例化的支持 當(dāng)系統(tǒng)第一次生成某個(gè)對(duì)象實(shí)例時(shí),JBOSS就對(duì)該實(shí)例進(jìn)行管理,把該實(shí)例放入實(shí)例池中,并不釋放它,當(dāng)系統(tǒng)再次要生成該實(shí)例時(shí),不再進(jìn)行該對(duì)象的實(shí)例化,而是JBOSS從實(shí)例池中找到該實(shí)例并提供給系統(tǒng)使用,這明顯提高系統(tǒng)運(yùn)行速度。 ⑶ 對(duì)線程的支持 當(dāng)不同的用戶登陸系統(tǒng),并且對(duì)系統(tǒng)所有功能的使用,JBOSS會(huì)為每個(gè)用戶分配一個(gè)線程去為他們工作,這些線程放入線程池中,JBOSS在運(yùn)行過(guò)程中始終對(duì)這個(gè)線程池進(jìn)行管理,提高系統(tǒng)的并發(fā)性能。 4.2.2.4 Jsp/Servlet技術(shù)和系統(tǒng)界面的實(shí)現(xiàn) JSP技術(shù)可以方便的建立動(dòng)態(tài)Web頁(yè)面,提供一個(gè)友好的用戶界面,并且很方便的調(diào)用JavaBean,完成復(fù)雜的業(yè)務(wù)功能;Servlet提供在Web進(jìn)行請(qǐng)求和響應(yīng)服務(wù)的功能,客戶端對(duì)服務(wù)器提供的服務(wù)的所有請(qǐng)求和響應(yīng)都通過(guò)Servlet實(shí)現(xiàn)。JSP最終解析為Servlet。 ⑴ JSP調(diào)用JavaBean 下面是創(chuàng)建工作流定義主信息的JSP頁(yè)面部分代碼: class=“wfsystem.interfacepack.client.workflowManager” /> ? <% WFDefineMainInfo wfDefinemaininfo =new WFDefineMainInfo(); ? // 填充工作流定義主信息值對(duì)象WFDefineMainInfo 實(shí)例 wfManager.ToDoWhat(0,(Object)wfDefinemaininfo);//調(diào)用接口類的方法,0對(duì)應(yīng)創(chuàng)建工作流主信息的方法代碼 %> ⑵ Servlet請(qǐng)求和響應(yīng)服務(wù) 下面是請(qǐng)求得到表單信息(這些信息就是工作流定義主信息值對(duì)象的內(nèi)容)部分代碼: <% String workflowname = request.getParameter(“workflowname”); String workflowDesc = request.getParameter(“workflowDesc”); //request就是請(qǐng)求對(duì)象,調(diào)用其方法getParameter()可以得到表單的信息 ? //一個(gè)一個(gè)的得到信息 %> 下面是響應(yīng)用戶的部分代碼: <% response.sendRedirect(“defineWorkflowModel-mainInfo.jsp”);// response就是響應(yīng)對(duì)象,調(diào)用其方法sendRedirect()向用戶發(fā)送一個(gè)頁(yè)面重定向的應(yīng)答。 %> 4.2.3 具體編碼實(shí)現(xiàn) 接下來(lái)的工作就是編碼工作,以Jbulider9.0作為開(kāi)發(fā)工具,以VSS(Microsoft Visual SourceSafe6.0)作為版本控制工具,進(jìn)行代碼編寫,進(jìn)行單元測(cè)試,綜合測(cè)試,最后得到一個(gè)基于輕量級(jí)工作流引擎的簡(jiǎn)單的工作流管理系統(tǒng)。 第五章 系統(tǒng)的不足 本文探討的輕量級(jí)工作流引擎,盡管有很多的優(yōu)點(diǎn),可是它從夠用、靈活和低成本的設(shè)計(jì)原則出發(fā),不追求工作流引擎的功能的完備和復(fù)雜,所以存在著一些不足: ⑴ 不支持復(fù)雜業(yè)務(wù):本文探討的輕量級(jí)工作流引擎是從一般業(yè)務(wù)的需求設(shè)計(jì)工作流模型,我們只實(shí)現(xiàn)了活動(dòng)的單分支,就是組成工作流流程的活動(dòng)是一個(gè)活動(dòng)只有一個(gè)后續(xù)活動(dòng),而復(fù)雜業(yè)務(wù)可能一個(gè)活動(dòng)后面出現(xiàn)多分支,有多個(gè)后續(xù)活動(dòng),形成一個(gè)樹(shù)型的結(jié)構(gòu)。所以對(duì)復(fù)雜業(yè)務(wù)的不支持是本文探討的工作流引擎的最大的不足。 ⑵ 不支持復(fù)雜的組織結(jié)構(gòu):本文探討的工作流引擎只是以職能型的機(jī)構(gòu)模型去描述組織結(jié)構(gòu),主要以部門和職位組成一個(gè)角色,任務(wù)分配也只是按照部門和職位的不同組合去分配,可是復(fù)雜的組織結(jié)構(gòu)模型可以定義多重角色,臨時(shí)工作組等等。 ⑶ 不支持提供內(nèi)建(built-in)的應(yīng)用開(kāi)發(fā)工具,例如是可視化工作流建模工具,F(xiàn)ORM設(shè)計(jì)工具,這些在本文探討的工作流引擎都沒(méi)有實(shí)現(xiàn)一定的接口。 ⑷ 在定義應(yīng)用數(shù)據(jù)方面不支持所有數(shù)據(jù)類型和完整性維護(hù),只支持字符型類型和進(jìn)行一些簡(jiǎn)單的數(shù)據(jù)保存工作。 ⑸ 沒(méi)有完善的異常處理功能。對(duì)異常的捕捉和處理并不完善,沒(méi)能及時(shí)把錯(cuò)誤信息顯示給用戶。 ⑹ 沒(méi)有完善的事務(wù)控制功能。只實(shí)現(xiàn)了一些簡(jiǎn)單的事務(wù)控制,沒(méi)有對(duì)復(fù)雜事務(wù)的控制。 第六章 總 結(jié)本文主要探討了輕量級(jí)工作流引擎的設(shè)計(jì)與實(shí)現(xiàn),首先我們要了解有關(guān)工作流技術(shù)的相關(guān)知識(shí),然后說(shuō)明開(kāi)發(fā)輕量級(jí)工作流引擎的原因,再?gòu)钠笫聵I(yè)一般業(yè)務(wù)需求入手,抽象出工作流對(duì)象,分析其之間的邏輯關(guān)系,組成工作流模型,跟著提出一個(gè)系統(tǒng)結(jié)構(gòu),進(jìn)行模塊劃分,數(shù)據(jù)庫(kù)設(shè)計(jì),類的設(shè)計(jì),最后利用J2EE技術(shù),用MS SQLSERVER2000作后臺(tái)數(shù)據(jù)庫(kù),Jbuilder9.0作開(kāi)發(fā)工具,VSS作版本控制,實(shí)現(xiàn)工作流引擎的開(kāi)發(fā),并基于該工作流引擎作一個(gè)簡(jiǎn)單的應(yīng)用系統(tǒng),最終實(shí)現(xiàn)為一個(gè)工作流管理系統(tǒng)。該管理系統(tǒng)的正常運(yùn)行,充分體現(xiàn)了輕量級(jí)工作流引擎在企事業(yè)業(yè)務(wù)的開(kāi)發(fā)過(guò)程中的價(jià)值。參考文獻(xiàn)[1] 范玉順著,《工作流管理技術(shù)基礎(chǔ)》,清華大學(xué)出版社 [2] Deepak Alus等著,《J2EE核心模式》,機(jī)械工業(yè)出版社 [3] 王克紅等著,《Java技術(shù)教程(中級(jí)篇)》,清華大學(xué)出版社 [4] Wendy Boggs等著,《UML With Rational Rose從入門到精通》,電子工業(yè)出版社 [5] Borland公司著,《Borland Jbuilder實(shí)用技術(shù)手冊(cè)》,電子工業(yè)出版社 [6] 何清法等著,《基于關(guān)系結(jié)構(gòu)的輕量級(jí)工作流引擎》,中國(guó)科學(xué)院計(jì)算技術(shù)研究所 [7] Joseph L.Weber著,《Java 2 編程詳解》,電子工業(yè)出版社 本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng) 標(biāo) 明 出 處http://blog.csdn.net/hjt79/archive/2004/08/15/75484.aspx :第五篇:輕量級(jí)工作流引擎的設(shè)計(jì)與實(shí)現(xiàn)