久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

JAVA工作流引擎原理學習

時間:2019-05-12 16:04:04下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《JAVA工作流引擎原理學習》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《JAVA工作流引擎原理學習》。

第一篇:JAVA工作流引擎原理學習

JAVA工作流引擎原理學習

工作流是業務流程的全部或部分自動化,在此過程中,文檔、信息或任務按照一定的過程規則流轉,實現組織成員間的協同工作,以達到業務的整體目標。工作流管理系統是支持企業經營過程高效執行并監控其執行過程的計算機軟件系統。典型的WFMS至少由如下幾個模塊組成:業務流程建模定義工具、過程定義、工作流執行環境(引擎)、任務管理。當然還會包括應用和IT工具。常用的工作流引擎有osworkflow,jbpm,shark。剛學習了一點osworkflow,現在轉向jbpm,公司要求,沒辦法。osworkflow,最大特點就是靈活,這個網上都說遍了。也就是說它提供了一個引摯,在此基礎上你可以進行擴展,可以自已寫一些條件、動作類,只是繼承它的接口就行,不需要修改它的源代碼。他只提供一個工作流控制框架給你,他也只專注于管理工作流自身的東西,對其他的東西不管,其他的功能對他來說都只是一個插件組件。所以你可以自己擴展里面的功能,例如用戶管理模式,工作流本身不帶用戶模式,他公司的另外一個項目osuser,可以結合使用來管理用戶權限,當然你可以不用osuer,自己建立自己的用戶模式,其實就是建立自己的運行判斷條件;支持多種插件式的持久化機制;他的數據表也很少,就三個……

Shark的流程定義語言是XPDL,我們知道,XPDL的兩個最重要的概念是Process和Activity。XPDL中的Activity是基于UML1.x中的活動圖的概念。活動圖天生的適于工作流程建模,它相對于狀態圖的一個最大的優點是容易做并發線程的分叉控制,這些并發線程可以同時執行也可以順序執行;它還有一個優點是有泳道的概念,可以控制工作流引擎中的任務的產生。Shark的如來神掌是活動圖。Osworkflow的如來神掌又是什么呢?我們知道,它有個重要概念是State……呵呵,我們知道了,它的如來神掌是FSM。不知道FSM是什么東西??那你讀大學時肯定不是好學生;當然了,不知道也不打緊,你把他類似理解為狀態圖就可以了。Osworkflow中的State是由step和status聯合表達的,一個State就是一個step中的某個status;而state的轉換由action來驅動,類似狀態圖中的event,因為一個event對應一個action嘛。Jbpm的如來神掌就沒有上面的簡單了,它結合應用了狀態圖+活動圖+PetriNet的知識,而且,這里的活動圖還是UML2.0版的。UML2.0的活動圖中,節點不叫活動(Activity)而叫動作(action),活動成了一個高層次的概念,它包含一個動作序列。一個活動圖展現一系列的動作,這些動作組成了活動。Jbpm把action也改名了,稱為state。Jbpm使用的狀態圖的概念有transition/event等,這個自己去看吧。Jbpm來內部實現中還采用了PetriNet的概念,如token,signal等。什么?又不知道PetriNet什么東東?那你大學是學計算機的嗎?不是?那你可能是學文科的,學機械/電氣/土木工程/交通運輸等專業都有接觸PetriNet的課程,如果沒有學過,還是看看jbpm吧,反正我們也不搞理論,知道大致概念就行。

軟件學習到迅騰國際,老師都會給你提供這些資料的,只要你問就可以了,至于地址嗎?自己查吧!我也只知道哪里是學習軟件的。我是在北京學的。

第二篇:java 工作流

Willow 由Huihoo Power開發詳細可到其中文主頁查看。

更多Willow信息

OpenWFE OpenWFE是一個開放源碼的Java工作流引擎。它是一個完整的業務處理管理套件:一個引擎,一個工作列表,一個Web界面和一個反應器(存放自動代理)。它可以可以跟你的程序很好的給合。

更多OpenWFE信息

jBpm jBpm是一個靈活可擴展的工作流管理系統。作為 jBpm運行時server輸入的業務流程使用簡單強大的語言表達并打包在流程檔案中。jBmp將工作流應用開發的便利性和杰出的企業應用集成(EAI)能力結合了起來。jBmp包括一個Web應用程序和一個日程安排程序。jBmp是一組J2SE組件,可以作為J2EE應用集群部署。

更多jBpm信息

OpenEbXML OpenebXML項目致力于提供一個ebXML框架,主要支持不久將由 UN/CEFACT和OASIS發布的ebXML規范2.0版。

更多OpenEbXML信息

Werkflow Werkflow是一個靈活可擴展的基于流程和狀態的工作流引擎。它的目標是滿足可以想象的所有工作流程,從企業級的業務流程到小范圍的用戶交互流程。通過使用可插拔和分層結構,可以方便地容納各種工作流語義。

更多Werkflow信息

OSWorkflow OSWorkflow是一個靈活的工作流引擎,設計成可嵌入到企業應用程序中。它提供了許多的持久化API支持包括:EJB,Hibernate,JDBC和其它。OSWorkflow還可以與Spring集成。

更多OSWorkflow信息

wfmOpen WfMOpen是WfMC和OMG中所謂工作流設施(workflow facility)(工作流引擎)的J2EE實現。工作流通過擴展的XPDL描述。

更多wfmOpen信息

OFBiz OFBiz是一個非常著名的開源項目,提供了創建基于最新J2EE/XML規范和技術標準,構建大中型企業級、跨平臺、跨數據庫、跨應用服務器的多層、分布式電子商務類WEB應用系統的框架。OFBiz最主要的特點是OFBiz提供了一整套的開發基于Java的web應用程序的組件和工具。包括實體引擎, 服務引擎, 消息引擎, 工作流引擎, 規則引擎等。更多OFBiz信息

ObjectWeb Bonita Bonita 是一個符合WfMC規范、靈活的協同工作流系統。對于各種動作如流程概念建模、定義、實例化、流程控制和用戶交互等提供了全面的集成圖形工具。100% 基于瀏覽器、使用SOAP和XML數據綁定技術的Web Services封裝了已有的工作流業務方法并將它們以基于J2EE的Web Service形式發布。基于活動預測模型的第三代工作流引擎。更多ObjectWeb Bonita信息

Bigbross Bossa 速度非常快、輕量級的引擎,使用富有表達能力的Petri網定義工作流,不要求關系數據庫,使用簡單,能和Java應用集成。事實上,它是按嵌入式設計的。更多Bigbross Bossa信息

XFlow XFlow運行于EJB和servlet容器中。

更多XFlow信息

Taverna Taverna項目的目標是提供一種語言和軟件工具,方便在eScience中使用工作流和分布計算技術。

更多Taverna信息

Enhydra Shark Shark完全基于WfMC和OMG標準,使用 XPDL作為工作流定義語言。流程和活動的存儲使用Enhydra DODS(一個開源OR映射工具)。

更多Enhydra Shark信息

PowerFolder PowerFolder是一個容易使用,容易安裝基于J2EE的工作流服務器,包括開發人員使用的基于web的studio。

更多PowerFolder信息

Open Business Engine Open Business Engine是一個開放源碼的Java工作流引擎,支持WfMC規范,包括接口1(XPDL)、接口2/3(WAPI)和接口5。OBE為活動的運行提供了一個可控的集中環境。OBE主要基于J2EE實現。

更多Open Business Engine信息

OpenWFE OpenWFE是一個開放源碼的Java工作流引擎。它包括可升級的三個組件:引擎、工作列表和Web界面。它的流程定義語言雖然使用XML格式,其靈感來源于 Scheme,一種Lisp方言。

更多OpenWFE信息

Freefluo Freefluo 是一個使用Web Service的工作流協同工具,可以處理WSDL的Web Service調用。支持兩種XML格式的工作流語言:IBM的WSFL和XScufl。Freefluo非常靈活,它的核心是不與任何工作流語言或執行架構關聯的可重用協同框架。Freefluo包括可執行使用WSFL一個子集描述的工作流的運行庫。

更多Freefluo信息

Twiste Twister的目標是提供新一代、易集成、應用Java領域中最新成果、面向B2B的工作流解決方案。流程引擎基于BPEL業務流程規范和Web Service標準。

更多Twiste信息

Con:cern con:cern工作流引擎基于擴展的案例(case)處理方法,流程由一組具有前后條件的活動組成。

更多Con:cern信息

JFlower JFlower是一個用Java開發的工作流引擎,可以通過Java插件來擴展。服務器可以

解析XML文檔來執行任務,檢查條件。會話數據保存在一個數據庫中,所以服務器是完全可伸縮的。

更多JFlower信息

JFolder JFolder(formerly PowerFolder)是一個工作流服務器和開發環境,它可以配置在任何J2EE服務器與數據庫。

更多JFolder信息

JAWE 基于Java的圖形化工作流編輯器。圖形化工作流編輯器。使用JAVA語言開發,開放源碼。嚴格遵循WFMC規范。XPDL(XML Process Definition Language)WFMC的 XML 過程描述語言。工作流定義文件保存在本地的XML文件中

更多JAWE信息

Zebra Zebra是一個工作流引擎。原先的設計是為了填補商業開源工作流引擎的空白。它有一些不同于其它工作流系統的特點:

*所有工作流模型都可以在workflow patterns中描述

*一個易于使用的GUI designer

*一個持久層中間件

*OO設計

*一個基于Turbine的Web應用程序

更多Zebra信息

ActiveBPEL ActiveBPEL引擎是一個健壯的運行時環境,它能執行依據BPEL4WS或just BPEL1.1與WS-BPEL2.0規范編寫的業務流程。

更多ActiveBPEL信息

YAWL YAWL(Yet Another Workflow Language)一個開源工作流語言/處理系統.它基于現有的工作流處理系統與工作流語言的一個精確分析.不像傳統的系統,它提供對大部分工作流模式的直接支持.YAWL支持控制流透視圖,數據透視圖并且能與WSDL標準的web服務相結合.更多YAWL信息

MOBE MidOffice BPEL Editor(MOBE)是一個開源平臺能夠讓執行,監控,調整,結束每個定義的過程和諧地結合起來.這個平臺的實現使用到J2EE技術與公共的標準如:BPEL,XML與SOAP.更多MOBE信息

RUNA WFE RUNA WFE是一個基于JBOSS-JBPM引擎的開源工作流工作平臺它是一個跨平臺適用于商業流程處理的最終用戶解決方案,很容易與所有SQL數據庫管理系統相結合.更多RUNA WFE信息

micro-workflow micro-workflow框架適用于那些要在他們程序中分離控制與邏輯方面的開發者,所以這個框架可以使他們的流程相互獨立。這樣有利于代碼重復使用與代碼的完整性。更多micro-workflow信息

bexee bexee是一個BPEL執行引擎并且是BPEL標準的一個開源實現.更多bexee信息

PXE PXE-Process eXecution Engine是一個模塊化的商業流程執行引擎.支持用WS-BPEL2.0或用BPEL4WS1.1規范描述的商業流程.

第三篇:工作流引擎五大接口

工作流引擎的五大接口

工作流參考模型確定了工作流管理系統的基本架構。該架構是開發工作流軟件時應當采納的系統模型,當然,一個工作流管理系統也可以不遵循這個模型標準,或只實現這個模型的一部分,但事實證明,這個模型結構是目前最為合理的。

系統的核心部分是工作流引擎,引擎是驅動流程流動的主要部件,它負責解釋工作流流程定義,創建并初始化流程實例,控制流程流動的路徑,記錄流程運行狀態,掛 起或喚醒流程,終止正在運行的流程,與其他引擎之間通訊等等工作。WfMC沒有針對引擎的實現提供具體的標準,因為對引擎做過多的約束并沒有多大的現實意 義。

一個工作流管理系統可以包含一個或多個引擎,并通過API向外部提供五個方面的功能服務,這些功能分別為:

· 接口1-流程定義的導入導出

· 接口2-同客戶端應用程序和工作列表處理程序之間的交互

· 接口3-軟件工具和應用程序的調用

· 接口4-不同工作流管理系統之間的協同工作

· 接口5-管理和監視功能

接口1-流程定義的導入導出

許多不同廠商提供的工具可以進行工作流流程的分析、建模、描述和歸檔等工作。這些工具需要識別公共的流程交換格式,以支持在這些不同的產品之間傳送工作流程流程定義。接口1便定義了這樣的交換格式。此外,接口1還定義了設計環境與運行環境之間交換的規范,以使不同的建模工具產生的流程定義可以輸入到不同的工作流產品的運行環境中。

為了提供一個訪問和描述工作流定義的公共方法,需要引入一個工作流元數據模型(meta-data Model),這個模型確定了流程定義中用到的一般的實體,這些實體都有不同的屬性,不同廠商開發的工具可以根據公共的交換形式向工作流運行環境傳送這些模型,傳送可以通過API實現,也可以通過批量(Batch)傳送實現。

元模型提供了流程定義交換中用到的基本的實體及其屬性,這些都是工作流流程的組成部分,這些實體包括:

工作流流程定義 工作流流程活動 過渡信息(Transition Information)工作流參與者 組織模型 工作流應用程序 工作流相關類型 工作流相關數據 系統和環境數據 數據類型和表達式

流程定義的交換

在不同的系統之間傳遞流程定義數據可能需要不同的機制,但在所有的情況下,流程定義數據的表達必須是一致的,這些表達包括一些公共的對象、關系及其屬性。接口2與接口3:

工作流管理系統必須提供同用戶之間交互的通道,以便用戶參與到系統的運行中。接口2主要完成這方面的功能。

WfMC在關于接口2 的規范中定義了工作流管理系統必須提供的類型、數據結構、API和錯誤代碼,并以C語言頭文件的形式提供。接口2所提供的功能大致可以分為一下五個方面:

1、會話的建立和與撤銷;

2、獲取工作流流程定義及狀態;

3、工作流流程實例的操作,如創建、掛起、終止流程,獲取和設置流程屬性等;

4、工作流活動實例的操作,如獲取和設置活動的屬性,改變活動的狀態等;

5、工作列表(worklist)及工作項(workitem)的操作,如獲取工作列表,處理工作項等。

通過這些功能,用戶可以完成與工作流管理系統之間交互的所有任務:登錄系統、打開自己的工作列表、處理自己的工作任務、將完成的任務提交給系統、將自己的任務轉交給其他用戶等等。

工作流系統在運行過程中有時需要調用外部應用程序,以完成系統不能完成的工作(比如,發送Email或傳真,掃描文件等),或者與其他系統集成到一起。此時可以通過接口3來完成。

接口3的功能同接口2的功能大部分是相同的,因此,這兩個接口有融合的趨勢。接口3主要規定了調用外部應用程序的函數規范,以及外部應用程序返回數據的格式。

接口4-不同工作流管理系統之間的協同工作

在企業級的工作流系統中,流程往往需要跨越多個服務器或系統,比如應用于跨國公司或大型集團公司的工作流系統經常會有這種的需求,此時就需要服務器或系統之間進行通訊,交換流程控制信息和流程定義等數據,以實現流程跨地域運行。WfMC在規范中以C函數的形式提供了這些控制的定義,其中包括以下幾個方面的功能:

1、創建流程實例;

2、獲取流程實例狀態;

3、獲取和設置流程實例屬性;

4、啟動或終止流程實例;

5、改變流程實例的狀態;

6、改變流程實例的屬性;

7、更新流程實例 服務器或系統之間信息交換的格式有多種,例如:文件、數據庫表、E-mail或直接通過網絡傳送的數據流等等。

接口5-管理和監視功能

此接口提供給用戶管理和監控系統的運行狀態、查看系統運行的歷史記錄的功能。WfMC在此接口的規范中定義了各種審計信息的數據格式,這些格式包括:

1.流程實例(Process Instance)審計信息:包括創建、啟動流程實例和子流程實例的審計數據;流程實例狀態變化的審計數據;流程實例屬性變化的審計數據;

2.活動實例(Activity Instance)審計信息:包括活動實例狀態變化的審計數據;活動實例屬性變化的審計數據;

3.工作項(Workitem)審計信息:包括工作項狀態變化的審計數據;工作項分配合重新分配的審計數據;工作項屬性變化的審計數據;

4.遠程操作審計信息:包括開始和停止會話(Session)的審計數據;遠程創建流程實例和遠程改變流程實例狀態的審計數據;遠程獲取和設置流程實例屬性的審計數據;會話管理的審計數據; 5.流程定義審計信息;

6.擴展的審計信息及專用的審計信息這些審計數據在系統運行時刻由系統自動記錄在數據庫或文件中,可通過系統提供的API進行統計和查詢,或者通過系統工具導出到系統外部。

另外,此接口還要提供系統管理與流程控制的功能,如:系統流程數據的備份和恢復,用戶管理,流程管理等等。

通過這五個接口,工作流管理系統可以同外部的軟件工具進行交互,這些工具可以由同一廠商提供,也可以由不同的廠商提供,但前提是這些工具都必須遵循WfMC的規范。用戶也可以有充分的選擇空間來決定哪一廠商的產品,或者自己開發屬于哪一個接口的工具。

這五個接口一般通過API的形式提供給用戶或軟件開發商,這些API稱為WAPI(Workflow API),也有廠商將API封裝成組件形式提供,以簡化開發難度、降低成本并提高效率。

可以用下面的圖來表示這五個接口的作用:

第四篇:基于WEB的工作流引擎設計和實現

基于WEB的工作流引擎設計和實現

一、引言

隨著社會生產的流程化,工作流(Workflow)起著越來越重要的作業,工作流的核心是流程管理。對于企業來說,其生產經營活動就是由各種各樣業務流程交織在一起組成的。然而,在企業管理中,許多流程在日常操作過程中已被習慣,而不被人們所重視,更不能被有效的管理起來。另外,客戶的需求瞬息萬變,而產品的生命周期也是在不斷縮短,技術在不斷創新。企業要在這樣一個競爭和變換的外部環境中求得生存,就必須要有隨需而變的能力,不斷地調整和優化自身的各種業務流程,對流程進行重構和再造。為此,本文詳細描述了工作流引擎的系統結構、接口設計、功能建模,以及工作流引擎在ERP系統中的應用。

二、工作流技術概述

(一)相關概念

工作流(Workflow)就是工作流程的計算模型,即將工作流程中的工作如何前后組織在一起的邏輯和規則,在計算機中以恰當的模型進行表示并對其實施計算。工作流引擎(Workflow Engine,WfE)的主要功能是通過計算機技術的支持去定義、執行和管理工作流,協調工作流執行過程中工作之間以及群體成員之間的信息交互。工作流需要依靠工作流引擎來調度、實現。

(二)工作流引擎的主要功能

工作流引擎是定義、創建、執行工作流的軟件組元。作為工作流的核心應能提供以下幾個方面的功能支持:解釋過程定義;創建過程實例并控制其執行;調度各項活動;為用戶工作表添加工作項;通過應用程序接口(API)調用應用程序;提供監督和管理功能等。

三、工作流引擎的分析及設計

(一)工作流引擎的功能結構

工作流引擎需要支持兩種業務流程,即確定型工作流和非確定工作流。確定型工作流是指人們可以事先給出運行路線的一類業務流程;非確定型工作流是指人們事先不能給出運行路線的一類業務流程。業務流程的流向應根據實際情況而定。工作流引擎的功能結構圖應該如圖一所示:

圖1 工作流引擎的功能結構圖

(二)工作流引擎控制器分析

引擎控制器是工作流引擎在運行時的控制中心,引擎控制器的控制結構圖如圖二所示:

圖二 引擎控制器的控制結構圖

1.調度中心。調度中心接受從外部接口發送過來有關流程控制的請求,然后根據不同的請求類型調用相應的處理模塊完成與本次請求相關的操作并將結果返回。由于是在DBMS內部實現工作流引擎的控制模型,因此有關請求的并發處理等問題完全可以交給數據庫管理系統來完成,也不需要諸如請求隊列等形式的數據結構。

2.任務管理。任務管理主要根據調度中心的指示完成諸如任務創建、任務狀態的轉換以及相關數據的維護等工作。每次“結束任務”的外部請求將觸發調度中心調用“任務管理”為后繼活動(如果存在的話)創建新的實例,其狀態為“待定”;同時,其他不同的外部請求也將觸發“任務管理”實施任務狀態的切換。

3.任務指派。任務指派處理只是針對常規交互活動,通常情況下,在任務狀態由“待定”切換到“等待”過程中完成任務的指派工作,即處于就緒狀態的任務在通常情況下都確定了其執行者。任務指派過程首先根據任務指派基準確定可以執行此任務的群體人員,通常情況下這是一個包含多個人員的集合;然后根據任務指派方法確定由這個群體中的哪些個體來執行任務,執行任務的個體標識記錄在相應任務記錄的字段中。

4.依賴檢查。在工作流引擎中,業務規則可以分解成活動的前依賴規則和活動的后轉發規則。依賴檢查指的是活動的前依賴規則的檢查,調度中心在將任務切換到就緒狀態之前將進行相關的前依賴規則檢查,只有滿足檢查條件的任務才可以進行狀態的切換。

前依賴規則包含順序、與匯聚、或匯聚和投票匯聚四種規則:

第一,對于順序前依賴規則,從前趨活動流轉到當前活動跟其他前趨活動沒有關系,當前活動的啟動沒有其他約束條件,相應任務可以立即由“待定”狀態轉換到“等待”狀態。

第二,對于與匯聚前依賴規則,相應記錄要指明所有參與與匯聚的其他前趨活動,只有所有相關的前趨活動均到達各自指定的結束狀態,當前活動方可啟動。第三,對于或匯聚前依賴規則,前依賴活動集為空集,此規則的檢查將涉及到業務活動表中的或匯集標志,其取值可以是所有相關的前趨活動的結束標記之一或者是一個特殊的標記。如果或匯集標志不是一個特殊標記,則將檢查相應前趨活動的結束標記是否和或匯集標志相同,若相同,則啟動當前活動,若不相同,則不作任何處理。如果或匯集標志是一個特殊標記,則首先結束的前趨活動將啟動當前活動,后結束的活動將被丟棄。

第四,對于投票匯聚活動,前依賴活動集同樣為空集,當前活動要等到屬于同一批次任務數目達到設置的要求方可啟動。

5.轉發控制。當應用發出“結束任務”的外部請求時,該請求將觸發調度中心啟動“轉發控制”。轉發控制的主要依據在工作流數據模型中定義的后轉發規則,后轉發規則定義了當前活動與其后繼活動之間的關系。

6.啟動控制。啟動控制負責常規自動活動的所對應的自動執行體的啟動并對其活動進行監控。

三、工作流引擎實現

(一)任務表結構

確定型任務表負責保存系統中所有確定型流程的任務實例待處理記錄及任務實例處理的歷史記錄,工作流引擎定期掃描該任務表,將任務表中所有待處理的任務實例分發給相應流程中的相應節點。

確定型任務表的結構為:TaskList(TasklnstanceID,TasklD,TaskStep,TaskHandleTime,ProceeID,DstNodelD,lsHandled,CommmitMan),分別為:TasklnstaneeID:同一個任務可以有多個不同的運行實例。該字段用于區別多個不同的運行實例;TasklD:用于區別不同的任務;TaskStep:記錄任務運行實例在流程中的處理步驟;TaskHand]eTime:任務運行實例在相應處理步驟中的處理時間;Processed:記錄任務實例所在流程的ID;DstNodelD:處理任務運行實例的后續節點;IsHandled:任務實例在后續節點是否已經處理;CommitMan:任務的處理人。

(二)工作流的流向控制

工作流引擎的一個核心功能就是要決定確定型任務表中各個任務運行實例的后續處理節點,使任務運行實例按照事先定義好的路線流動,也就是流程的流向控制。

流向控制算法描述如下:

/*控制流程流向*/

function HowControl(string processid,string nodeid){

string[] followIds= GetSueNodeld(processed,nodeid);

for(int i=0;i

/*后續節點同步控制*/

if(查詢后續節點i所對應的條件中有無isprecondition為true的條件)對后續節點進行同步控制;

/*子流程的處理情況*/

if(后續節點i是子流程)

將子流程的第一個節點作為后續節點;

向任務表中加入一條待處理記錄;

}

}

四、結語

本文介紹了一個基于Web的工作流引擎的具體實現,該工作流引擎已經在藥業管理系統中得到了實際應用,基本上可以達到預期效果,說明基于Web的工作流引擎設計和實現都具有相對可行性,可以應用在具體的管理系統中。

第五篇:輕量級工作流引擎的設計與實現

第一章

言1.1 輕量級工作流引擎的概念 輕量級的工作流引擎指的是從夠用、靈活和低成本的設計原則出發,不追求工作流引擎的功能的完備和復雜,只是實現其中必不可少的功能和特征。在設計工作流引擎時主要考慮對其數據模型的定義和解釋、活動之間的協調以及任務的分配和控制等功能提供支持,而不支持諸如提供內建(built-in)的應用開發工具、對應用資料的定義和完整性維護、完善的異常處理以及長事務控制等功能。輕量級工作流引擎的概念的提出,給開發工作流管理系統的開發人員開辟了一條新的道路。工作流管理技術本身就是一項抽象復雜的技術,它致力追求從企事業各種各樣的業務中抽取出一個通用的模型,由這個模型去描述所有業務的一致性,以達到“放之四海皆可用”的程度。不過,要把眾多的而又錯綜復雜的業務都集中在這個模型中,這是一件非常困難的工作,要經過一段漫長的摸索歷程。而輕量級的概念讓我們認識到可以從一般性的而又簡單的業務入手,為企事業快速的開發出一個適應他們本身業務需求的而又帶有可擴展性可移植性的信息管理系統,為他們提高工作效率,并保證在一段很長的時間內滿足不斷增加的業務需求。

1.2 工作流管理系統的分類及本文的側重點

根據工作流過程本身的特點、系統建模的方式、所使用的底層支撐技術、以及工作流過程的執行方式等的不同而對工作流管理系統進行相應的分類。

1.2.1 面向文檔的與面向過程的 前者的側著點在于將電子形式的文件、圖像等在有關的人員之間進行分發,以便能夠得到不同人的處理與審閱。現有的文件管理與映像管理系統均屬此類。在面向過程的WFMS中,工作流被描述成一序列執行環節。與各環節相應都有待處理的資料對象。各環節的資料對象可以按不同的方式分發到其它環節中去,如可以將資料對象的值作為控制條件、或者依此資料對象組裝成其它的資料對象等。高端的WFMS一般都屬此類系統。

1.2.2 結構化的與即席的結構化工作流指的是在實際工作過程中會反復重復、嚴格按照某個固定的步驟進行的業務過程。定義此種工作流所需要的各種類型的信息可以通過對業務過程進行詳細的分析而得到,從而得到完整的過程定義并在以后的應用過程中反復使用。大量的辦公程序,如公文處理、審批等都屬此類。即席工作流則是針對那些重復性不是很強或沒有重復性的工作流程的,關于這類流程執行所需的有關參數(如參加者等)事先無法確定,而必須推遲到過程實例運行時才能確定,同時在執行過程中間還可能會發生一些意外的情況。這種動態多變的特點在提供更高靈活性的同時,也為過程的建模與執行帶來更多的復雜性。1.2.3 基于郵件和基于數據庫

前者使用電子郵件來完成過程實例執行過程中消息的傳遞、資料的分發與事件的通知。低端的系統所使用的經常就是此種方法,它可以充分發揮電子郵件系統在廣域環境下的資料分發功能,但整個系統將運行于一種松散耦合的模式下。在基于數據庫的WFMS中,所有的資料都保存在某種類型的DBMS中,過程的執行實際上就是對這些資料的查詢與處理。高端的大規模系統所使用的一般都是此種方法。

1.2.4 任務推動的與目標拉動的前者指的是從過程的開始逐步地一個環節一個環節的執行,當某個活動實例被處理完之后,后續的有關活動將被創建并被激活,由此直至整個工作流程的完成。這是目前大多數面向過程的WFMS所使用的執行方式。而在目標拉動的WFMS中,一個業務流程被看成是一個目標。過程實例執行時,該目標將被分解得到多個相互之間按一定約束條件的關聯起來的可執行的多個環節,其中各環節還可以當成是子目標而進一步進行分解。在各環節均執行完畢之后,整個過程也就完成了。目標拉動是一種全新的執行方式,下一代的WFMS將具有此種特征。應該說明的是:上述分類只是從不同的角度入手的。一般來說,后面那些特點將給WFMS帶來更好的靈活性,同時也將成為那些能夠支持跨機構的大規模復雜工作流管理、面向關鍵任務的WFMS不可缺少的特征。1.2.5 本文的側重點

本文的側重點不在于完全實現其中一種工作流管理系統的所有功能,更不在于實現所有種類的工作流管理系統的全部功能,前文已經說過,這是一件非常困難的事情。那么我們的側重點在哪里呢?就在于綜合以上四種工作流管理系統的主要特點,是一個面向文件的,基于數據庫的,由目標拉動的結構化的工作流管理系統,并且由此去設計和實現工作流管理系統的核心――工作流引擎。從一般性來說,目前大多數的企事業的業務都是事務申請,公文流轉,各項通知等等,這些業務或者需要查看,或者需要審批,而這些業務的資料基本上是以文件的形式保存在計算機上,而其中一些格式化的資料是保存在數據庫中,所以面向文件和面向數據庫是輕量級工作流引擎的一個重要特征。業務的發起和結束是一項過程化的任務,任務又可以分解成一個一個環節任務,而任務是帶有目的性的,由這個目的去拉動這個過程中的一個一個的環節任務,促使環節任務的推進,最終達到任務完成的目的。這些業務的過程化不是隨機的,而是已經嚴格規定好的,只有遵循這些過程化的規則和流程環節才能完成整個業務。輕量級的工作流引擎就組合了以上這些,不追求工作流引擎的功能的完備和復雜,以滿足一般性業務為目的,為企事業快速開發出適合他們業務的工作流管理系統。

第二章

工作流管理系統參考模型簡介在闡述工作流引擎之前,我們來了解一下工作流技術的基本知識。早在幾年前,為了建立工作流管理系統的相關標準,國際上成立了一個稱為“工作流管理聯盟”(簡稱WFMC)的國際組織。她提出了有關工作流管理系統的一些規范,定義了工作流管理系統的結構及其與應用、管理工具和其它工作流管理系統之間的應用編程接口,也就是工作流系統參考模型。

WFMC給出的工作流參考模型如下圖:

接口2

接口3

接口4

接口1

接口5

過程定義工具

工作流API與交換格式

工作流執行服務

工作流機

(工作流引擎)

工作流 管理工具

其它工作流 執行服務

工作流機

工作流客戶應用

工作流機直接調用 的應用

圖2.1 工作流參考模型

從圖中可以看出,參考模型包含了五類接口,分別是:

⑴ 接口1:過程定義輸入輸出接口,這是工作流服務與工作流建模之間的接口,該接口提供的功能包括通信建立,工作流模型操作和工作流模型對象操作。

⑵ 接口2:客戶端函數接口,這是工作流服務與客戶應用之間的接口,這是最主要的接口規范,它約定所有客戶方應用與工作流服務之間的功能操作方式。包括通信建立,工作流定義操作(對過程模型定義操作),過程實例管理功能,過程狀態管理功能,任務項列表/任務項處理功能,數據處理過程,過程監控功能,其它的管理功能,應用程序激活。

⑶ 接口3:激活應用程序接口,這是工作流引擎和直接調用的應用程序之間的接口,包括通信建立,活動管理功能,數據處理功能。

⑷ 接口4:工作流執行服務之間的互操作接口,這是工作流管理系統之間的互操作接口,包括連接的建立,對工作流模型和其中對象的操作,對過程實例的控制和狀態描述,對活動的管理,對資料進行處理。

⑸ 接口5:系統管理與監控接口,這是工作流服務和工作流管理工具之間的接口,包括資源控制,角色管理,用戶管理,過程實例的管理,狀態管理,審核管理。

五個接口以及對應的API函數囊括了工作流管理系統的全部功能。一個完整的工作流管理系統就是以工作流引擎為中心,向外部部件(應用程序或其它工作流引擎)提供這五個接口,提供其實現的所有功能。

第三章

系統分析與設計在所有準備工作完成后,我們就開始進行系統設計和設計,構造一個輕量級的工作流引擎。輕量級的工作流引擎并不完全實現WFMC所提出的工作流模型包含的五個接口,特別是接口4,在分布式工作流管理系統才具有該接口。既然我們從輕量級的概念出發,我們就不再明顯區分各個接口的界限以及其所具有的特定的功能,以夠用、靈活和低成本的設計原則去設計出我們所理解的工作流引擎。我們運用了面向對象的方法,首先從眾多的業務需求中抽取出工作流模型所包含的對象,再分析各個對象之間的邏輯關系,然后提出一個系統結構,再進行模塊劃分,數據庫設計,最終完成類的設計。我們當中所用到的建模工具就是ROSE UML。

3.1 工作流模型的設計

對工作流模型的設計是工作流引擎設計的重要組成部分。

3.1.1 工作流模型的對象

企事業經營過程就是一項項業務的實現過程,我們從一般業務入手,并對這些業務進行詳細的分析,研究,其結果就是得到一般性的業務對象,從而抽象成工作流模型對象。

3.1.1.1 從一個簡單的業務實例看業務的需求

目前企事業的一項基本事務就是出差管理。它主要是對企事業的人員因為某種工作上的原因需要到別的地方出差進行的管理。我們可以列出出差的相關步驟:

⑴ 申請人需要出差,并且他(她)具有出差的權利;

⑵ 申請人填寫出差表格,說明因何事出差,出差何處,申請出差金額,何時回來等等和出差相關的情況;

⑶ 申請人需要其它說明的話,可以將更具體的說明以文檔的形式保存下來;

⑷ 申請人確認申請無誤后提交申請,等待申請的結果;

⑸ 根據規定,該申請必須先讓申請人的上一級審批,那么該申請就會以一項工作項的形式交給該級領導處理;

⑹ 處理該申請的領導對該申請進行處理,他(她)會先查看該申請所有的資料,包括出差申請表和與之相關的其它文檔,然后對其進行審批,審批的結果是同意那么該次申請會交給再下一級領導處理;審批的結果不同意,該申請被打回,通知申請人申請不通過的結果。等所有需要審批的領導都審批通過了,該申請就成功完成,通知申請人申請通過的結果;

申請人得到申請的結果,如果審批通過則準備出差,如果審批不通過則根據審批結果對該申請進行修改,重新提交申請; ⑻ 申請事務結束。

這是一個簡單的業務實例,對該實例進行分析我們可以得到該業務的一些對象:

⑴ 申請人:他(她)屬于該企事業的某個部門的成員,并且具有啟動該業務的權利; ⑵ 審批領導:他(她)也屬于該企事業的某個部門的成員,并且具有對該業務進行處理的權利;

⑶ 出差表格:它是該業務規定的格式化資料,并且是必須的 ⑷ 出差具體說明:它是該業務附加的資料,可以不要的

⑸ 申請人已經填寫好的出差表格:它是出差表格的實例化,代表一個具體的應用 ⑹ 審批同意和不同意:它們是對該業務的處理,遵循一定的業務規則 ⑺ 申請:這是一個過程,不是一個動作,需要時間和人的活動才能完成 ⑻ 審批:這是一個活動,是過程的一部分,并且可以向另外一個活動轉化

⑼ 其它應用程序:申請人要填寫出差具體說明時要調用相應的外部應用程序編輯該說明并以一定的格式保存下來,審批領導要查看出差具體說明時也要調用相應的外部應用程序打開該說明并以一定的格式顯示出來。

從這些業務對象,再利用工作流技術,我們可以得到工作流模型的一些基本對象:

⑴ 用戶:正如申請人,審批領導,他們就是工作流管理系統的用戶,由他們去使用該系統的各種功能,并且直接參與業務活動,促使業務的完成。

⑵ 角色:有些人可以申請出差,有些人對出差申請可以審批,這兩種不同的人可以作為兩個不同的角色。角色是具有某種使用系統特定功能的權利的一個人員或多個人員的組合。⑶ 工作流應用資料:出差申請表格,出差具體說明,這些就是對應某個具體業務(這里是出差管理)的相關資料,根據這些業務資料我們可以對該業務進行處理。

⑷ 需激活的應用程序:在需要其它應用程序提供支持的時候,會去激活這些應用程序。⑸ 流程:整個出差申請的過程就是一個流程,它從整體去描述一個業務。

⑹ 環節:又稱活動,它反映了業務流程的局部情況,通常業務流程是由一個一個的環節組成。

⑺ 流程實例:將該出差申請這個業務流程實例化,就得到一個流程實例。⑻ 環節實例:將流程的其中一個環節實例化,就得到一個環節實例。

⑼ 業務規則:業務的開始和結束需要一定的條件,在處理業務的過程中必須按照一定的規則,這些都是業務規則,只有嚴格遵循業務規則,業務才能完成。

3.1.1.2 工作流對象的具體分析和說明

通過一個具體的業務我們可以得到工作流模型的一些對象,那么我們再對其他一般性業務進行分析,研究,我們就會找到它們的共同點,并歸納出基于這些業務的公共的對象,這些公共的對象的組合,就是一個通用的模型,也就是工作流模型,這個模型能去描述每個業務,是我們追求輕量級工作流引擎的最終成果。

⑴ 用戶:業務的執行者和參與者,對應于企事業的每一個雇員,是一個獨立的、具有一定行為能力和一定技術能力的人的實體;

⑵ 角色:以技能為前提,能夠完成某項功能的人員的總稱;

⑶ 部門:對應于企事業的靜態結構劃分,由企事業的實際部門設置情況來決定,可以是傳統的面向職能的,也可以是現在流行的面向過程與客戶的;

⑷ 職位:以行政責任為前提,代表了管理上的等級關系;

⑸ 工作組:以執行某一任務為目標而動態組建的、跨部門劃分的一種組織結構;

⑹ 流程:對應于一個業務過程,表示一個業務由發起、處理、結束的一個過程;

⑺ 流程實例:對應于一個業務流程具體應用,是業務流程實例化的表現形式;

⑻ 環節:對應于業務流程中一個單一的業務操作,是流程按照業務要求的細化;

⑼ 環節實例:對應于一個環節的具體應用,是環節實例化的表現形式;

⑽ 工作流定義主信息:描述一個工作流模型的主要信息,從整體來描述工作流模型;

⑾ 工作流附件信息:描述一個工作流模型所用到的附件信息,也就是工作流應用資料,或者叫業務資料。按照WFMC提出的工作流模型,這不是工作流模型所包含的對象,可是我們對其進行格式化,把它抽取成一個模型對象,用來規定了工作流模型在具體應用時所需業務資料的格式,我們把它分為兩類:

表格類型:這是以表格的形式保存附件信息,可以用關系結構來定義附件信息,并保存在數據庫中,每一條記錄就是一個該附件的實例;

文檔類型:只是以文件形式保存附件信息,可以是work文檔,也可以是文本文件,它的實例化是就是一個一個帶有對應某個業務應用標志的文件,保存在硬盤上 ⑿ 工作流實例信息:描述一個工作流模型實例化的信息,也作為啟動一個工作流的信息,它記錄該業務流程隨著時間和人員的參與處理的不斷變化,直到整個業務的結束;

⒀ 工作項信息:描述參與某個業務應用時被分配到的一項任務,這就體現了參與人員和系統交互的典型特征;

⒁ 業務規則:描述業務在運行的過程中必須要遵守的規定和原則,也是業務活動得以向另一個活動推進的規則。我們把它分為四類規則,分別是: ●

自動型:它主要描述一些只給參與人員查看業務信息的業務規則,例如通知、公文流轉等等業務。該類業務不需要參與人員去審批或其它人為上的處理,只需要參與人員去查看其中的內容就足夠,整個業務流程的完成是全自動的。●

與聚合:業務活動的完成是需要參與該活動的所有人員都進行人為處理,其中有一個人員沒對其進行處理,整個活動只能停在原地,等待所有人員的處理,當最后一個參與人員執行了處理工作,它才能完成。●

或聚合:在參與某一業務活動的人員當中只要有一個對其進行處理,整個活動就可以完成。

投票聚合:統計參與該活動的參與人員的處理結果,當滿足一定條件該活動才能完成。

⒂ 轉換條件:描述流程、活動狀態改變時需要的條件,用于業務運行過程中的約束。例如流程的完成必須等待所有活動的完成才能完成,活動的完成必須按照業務規則去完成等等; ⒃ 需激活的應用程序:工作流管理系統需要其它應用程序的支持,例如編輯和查看文本文件信息等等;

⒄ 日志信息:描述工作流中所有的狀態改變、事件和控制流相關資料的變化,工作流實例和環節實例的啟動、結束、掛起和激活等等信息都會記錄下來,以便對其進行管理。3.1.2 對象之間的邏輯關系在找出工作流模型的對象后,我們就開始分析它們之間的業務邏輯關系。

3.1.2.1 對對象進行分類以及各個分類中對象之間的關系到此為止,我們有必要對工作流模型對象進行一下分類,根據工作流對象對工作流管理系統所起的作用我們可以分成以下幾類: ⑴ 組織模型

組織模型描述了企事業的組織機構關系,包括的對象有用戶,部門,職位,角色,工作組,它們的關系可以用下圖表示:

設置

負責

組成 組成 資格

組成 部門

職位

用戶

工作組

角色

圖3.1 組織模型結構

從圖中可以看到它們之間的關系,用戶是基本的單位,部門是由用戶組成,每個用戶對應一個職位,負責該職位所要求的職能,用戶憑著某種資格賦予一種角色,工作組也由用戶組成,也可以由角色組成。這幾個基本的對象以及其關系所構成的組織模型,已經可以滿足輕量級工作流引擎對組織模型的需要了。⑵ 工作流定義模型

工作流定義模型描述了工作流模型的定義信息,包括工作流定義主信息,流程定義信息,環節定義信息,工作流附件信息,業務規則。它們之間的關系如下圖:

圖3.2 工作流定義模型結構

包含

包含

包含

包含

遵循

包含

工作流定義

附件信息

主信息

業務規則

環節

流程

包含

流程是包含若干環節的,而環節遵循一定的業務規則,再加上工作流主信息和附件信息,共同構成工作流定義模型。⑶ 工作流實例模型

工作流實例模型描述了工作流模型實例化時的信息,通過這些信息我們可以知道實例過程中的各種狀態變化和最終的結果,因而得到一個業務具體應用的情況。它包括流程實例,環節實例,工作流實例信息,工作項信息和轉換條件,它們之間的關系如下圖:

記錄

記錄

細化

細化

影響

影響

影響

影響

記錄

記錄

轉換條件

環節實例信息

流程實例信息

工作項信息

工作流實例信息

日志信息

日志信息

細化

圖3.3 工作流實例模型結構

轉換條件影響工作流實例,流程實例,環節實例和工作項的狀態,并由轉換條件去決定它們的狀態轉變,工作流實例信息à流程實例信息à環節實例信息à工作項信息,自上而下逐層細化,不但從全局了解業務運行情況,而且從局部了解業務運行的細節情況。而它們的狀態改變都會記錄在日志中,用以追蹤工作流實例的運行情況。⑷ 外部支持模型

外部支持模型在本文只包括一個對象,就是需激活的外部應用程序,嚴格來說這不是工作流模型的一部分,可是提供接口去激活所需的外部應用程序為工作流管理系統提供支持是工作流模型的功能之一。有了這些外部應用程序的支持,我們的工作流管理系統的功能才變得更完善。

3.1.2.2 各個模型之間的邏輯關系

不但模型中各個對象有一定的邏輯關系,而且各個模型之間也有一定的邏輯關系,如下圖所示:

調用

依賴

使用

使用角色和工作組

用戶定義

工作流實例模型

外部支持模型

工作流定義模型

組織模型

圖3.4 模型之間的關系

組織模型的用戶定義工作流定義模型;工作流定義模型使用組織模型的角色和工作組,用來規定工作流模型的啟動條件和任務分配條件,因為工作流模型的啟動和任務的分配必須由一定的角色或工作組完成;工作流實例模型依賴工作流定義模型,同時使用組織模型的所有對象,并且調用外部支持模型為其提供支持。3.1.3 工作流實例,流程實例,環節實例和工作項的狀態轉換

工作流實例,流程實例,環節實例和工作項從不同的層次去描述業務運行過程的具體情況,不同級別的用戶可以看到業務運行的不同方面,創建工作流實例的用戶可以看到工作流實例信息以及其狀態轉換,參與該工作流實例的用戶可以看到工作項信息以及其狀態的改變,系統管理員可以看到所有信息以及其狀態的轉換。

⑴ 工作流實例狀態圖

創建

管理員

管理員

管理員

Running(運行)

Completed(結束)

正常情況

Suspended(掛起)

terminated(終止)

Initial(初始化)

圖3.5 工作流實例狀態圖

提交

⑵ 流程實例狀態圖

管理員

管理員

管理員

Running(運行)

Completed(結束)

正常情況

Suspended(掛起)

terminated(終止)

圖3.6 流程實例狀態圖

⑶ 環節實例狀態圖

處理中

接受

完成正常處理

沒有完成異常處理

回退處理

提交給下一環節

圖3.5 環節實例狀態圖

⑷ 工作項狀態轉換圖

等待操作

完成 通過

沒有完成 不通過

無操作,超時

操作下一工作項

回退處理

已查看

初始化

未審批

未查看

圖3.5 工作項狀態圖

接受

3.1.4 任務分派任務分派是工作流引擎的一個重要功能。當環節實例產生時,就會以一定的準則把需要處理的工作當作一項任務項(工作項)分派給參與該環節實例的所有用戶,而這些用戶是同屬一個角色或者工作組的。我們又把角色和工作組進行細化,可以得到以下準則: ⑴ 基于部門的:這就是說把任務分派到某個部門的所有人員,該部門的所有人員都參與了該項任務,因而會為該部門的所有人員都產生一個工作項;

⑵ 基于職位的:這就是說把任務分派到某個職位的所有人員,同屬該職位的所有人員都被分配到一項工作項;

⑶ 基于部門職位的:這就是說把任務分派到某個部門的某個職位的所有人員,同屬該部門的該職位的人員都被分配到一項工作項;

⑷ 基于所有人的:這就是說把任務分派到該企事業的所有人,該企事業的所有人都被分配到一項工作項;

⑸ 基于工作組的:這就是說把任務分派到該企事業的某個特定的工作組上,同屬該組的所有人員都被分配到一項工作項。

基于部門的,基于職位的,基于部門職位的和基于所有人的這四種類型,其實是基于角色的細化,通過這些準則的分類,我們盡量做到系統與企事業有較強的適應性,以及使系統在任務分派時有較大的靈活性。3.1.5 轉換條件的滿足

工作流實例,流程實例,環節實例和工作項的狀態轉換有各自特定的條件,分別如下:

⑴ 工作流實例的轉換條件

工作流實例從整體看業務運行過程,工作流實例被用戶創建后就進行初始化并提交給工作流引擎,由工作流引擎去處理,此時實例處于運行狀態;在運行過程中,它會根據流程實例的狀態而不斷進行本身的狀態改變;當管理員由于某種原因要掛起它時,它就處于掛起狀態,直到管理員重新激活它使它處于運行狀態或者終止它使它非正常結束;當它被正常處理完畢后,就正常結束。

⑵ 流程實例的轉換條件

流程實例也從整體看業務的運行過程,流程實例在工作流實例初始化時就開始它的工作。在運行過程中,它會根據各個環節的完成程度來改變自己的狀態,當所有環節實例都正常完成它就正常結束;管理員可能要掛起它使它處于掛起狀態,直到管理員重新激活它使它處于運行狀態或者終止它使它非正常結束。

⑶ 環節實例的轉換條件

環節實例從某個方面看業務的運行過程,環節實例在流程實例運行時就開始它的工作處于處理中狀態。之后環節實例的狀態由兩方面決定,一是工作項的處理結果,一是業務規則的規定。

如果業務規則是自動型的,不管工作項的處理結果怎樣,當系統把任務項分派(給特定用戶)完畢后,該環節實例就正常完成處于正常結束狀態;

如果業務規則是與聚合的,系統分派完任務項后,當所有參與人員都正常處理完該環節各自的工作項后,該環節才正常完成處于正常結束狀態;在處理過程中,只要有一個工作項是非正常處理的,該環節就非正常完成處于非正常結束狀態;在處理過程中,有工作項還未被處理并且沒有一個工作項被非正常處理,那么環節實例仍然處于處理中狀態;

如果業務規則是或聚合的,系統分派任務后,只要有一個工作項是正常處理的,該環節實例就正常完成處于正常結束狀態;如果所有同屬該環節實例的工作項都被非正常完成,那么該環節實例就處于非正常結束狀態;

如果業務規則是投票聚合的,系統分派任務后,統計工作項的完成程度,當正常完成的工作項數量達到一定數量時,該環節實例就正常完成處于正常結束狀態;當正常完成的工作項數量不達到規定的數量時,該環節就非正常完成處于非正常結束狀態;當所有工作項還沒處理并且正常完成的工作項還沒達到規定數量時,該環節實例仍然處于處理中狀態。

⑷ 工作項的轉換條件

工作項從更細節的方面看業務運行過程,工作項的狀態轉換要看參與人員對各自的工作項的處理情況和業務規則的規定。我們把與聚合,或聚合和投票聚合這些要人工干預的規則統稱為人工型規則。

如果業務規則是自動型,同屬該規則的工作項的狀態就只有正常處理后的正常結束狀態,當然如果對該工作項還沒被處理則處于處理中狀態,可這不對環節實例等產生影響;

如果業務規則是人工型,就會有正常處理和非正常處理兩種情況,正常處理該工作項則使到該工作項處于正常結束狀態,非正常處理該工作項則使到該工作項處于非正常結束狀態。

3.2 系統結構

本著基于輕量級工作流引擎的原則,我們已經對工作流模型進行了詳細的分析和詳細的設計,在這里我們就提出一個系統結構,如下圖所示:

工作流定義器

工作流

解析器

實例調度中心

任務管理器

任務分派器

啟動控制器

工作流定義數據

工作流實例 數據

日志 數據

工作流定義接口

工作流實例接口

組織定義

數據

組織定義接口

組織定義器

狀態轉換器

組織

管理器

圖3.6 工作流引擎系統結構圖

從圖中可以知道,系統提供了三類接口:組織定義接口、工作流定義接口和工作流實例接口。這三類接口實現了工作流模型的接口一,接口二,接口三和接口五規定的主要功能;系統有一個實例調度中心,這是一個很重要的部件,它控制工作流實例的運行,通過工作流解析器對該工作流模型進行解析其含義,通過任務分派器按照一定的分派準則把任務項分派給參與該工作流實例的用戶,通過任務管理器管理各個任務項的信息,通過啟動控制器控制工作流的啟動權利和啟動信息,通過狀態轉換器控制工作流實例、流程實例、環節實例和工作項的狀態轉換;組織定義器定義企事業的組織結構;工作流定義器定義工作流模型信息,并通過組織管理器得到組織定義信息,為工作流模型提供組織支持。各個部件處理的相關信息都保存在數據庫中。

3.3 系統模塊的劃分

根據功能實現的不同我們進行模塊的劃分如下:

⑴ 用戶管理模塊:對用戶信息的管理,包括注冊用戶信息,注銷用戶信息,查詢用戶信息等功能;

⑵ 部門管理模塊:對企事業部門結構信息的管理,包括增加部門信息,刪除部門信息,查詢部門信息等等功能;

⑶ 職位管理模塊:對企事業職能信息的管理,包括增加職位信息,刪除職位信息,查詢職位信息等等功能;

⑷ 角色管理模塊:對企事業某種技能信息的管理,包括新增角色信息,刪除角色信息,查詢角色信息等等功能;-

⑸ 工作流模型管理模塊:對工作流定義模型信息的管理,包括定義新的工作流模型信息,刪除舊的工作流模型信息,查詢工作流模型信息;

⑹ 工作流實例管理模塊:對工作流實例信息的管理,包括啟動一個新的工作流實例,查詢工作流實例信息,按照一定的業務規則生成新的環節實例信息,為用戶分派工作項,管理工作項信息,按照一定的轉換條件為工作流實例、環節實例轉換狀態等等功能;

⑺ 系統監控模塊:為工作流實例,環節實例等的狀態轉換信息加入日志,掛起、激活工作流實例,強制結束工作流實例,為遲遲不對自己的工作項進行處理的用戶發出提醒或警告信息,查看各個工作流實例的完成程度等等功能。

功能模塊的劃分,為系統的實現做好充分的準備。

3.4 數據庫設計

基于輕量級的工作流引擎的特點之一就是把系統相關的資料,如工作流模型定義信息,工作流實例信息,組織模型定義信息等等,都以特定的實體形式保存在關系型數據庫中。

⑴ 工作流定義主信息表(workflowTable)

靜態定義工作流主要信息,包括該工作流的標識ID(可以定義為以”WORKFLOW_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),工作流名稱,工作流描述,工作流類型(工作流的類型有自動型,人工型和混合型,自動型不需要人工參與,由工組流引擎自動執行,人工型需要人工參與,混合型包含了自動型和人工型),工作流創建日期,工作流創建者ID(即用戶ID),工作流創建人名稱(即用戶名),工作流生命周期(每個工作流實例都有它的生命周期期限,在該期限內還沒完成它的工作就直接死亡),目前該工作流實例數目(記錄當前工作流實例數目),工作流啟動者角色(指明該工作流可以由哪個角色發起,屬于該角色的用戶都可以啟動該工作流模型對應的實例)。工作流重要信息還包括兩方面,一是工作流附件,因為在工作流進行過程中,肯定會帶有一些信息,這些信息對于出差申請來說就是出差申請表,對于公文流轉來說就是以word文檔形式的公文,對于通知來說可能就是以文本文檔形式的通知書,等等;一是工作流流程描述,包括若干個環節(activity),這些環節有一定的順序,表現工作流順序執行的特征。把工作流附件和工作流流程描述從工作流定義分離出來,是基于工作流附件和工作流流程描述對于不同工作流有不同形式和數量的原因,有利于工作流附件和工作流流程描述的擴展。⑵ 工作流附件信息表(workflowAttachmentTable)

靜態定義工作流所需要的附件,包括附件ID(可以定義為以”Attachment_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),工作流ID(標識屬于哪個工作流),附件類型(表或文件),附件名稱(如果類型是表,則為該表的名稱,如果是word文檔,則為該文檔名稱,如果是文本文檔,則為該文件名稱),其它信息(如果類型為表格,該字段以一定的格式保存該附件表格的所有字段的各種信息,包括字段名稱,字段數據類型,數據類型長度,字段描述)。⑶ 工作流流程描述表(workflowProcessTable)

靜態定義工作流的流程,由若干環節(activity)組成,一個環節為一條記錄,包括工作流ID(環節所屬工作流ID),環節ID(可以定義為以”ACTIVITY_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),環節名稱(即該環節名稱),環節描述(對該環節的具體描述),參與者角色ID(將相同權限的用戶作為一個集合,在數據庫以同一個角色操作數據庫特定操作,該項標識角色ID),環節任務分派規則,上一個環節ID(保存上一個環節的ID,由這項可以判斷該環節是否整個流程的開始環節,或者該環節的任務沒有完成(審批不通過,或沒在其生命周期期限內完成)時作回滾處理的重要數據項,根據這個數據項可以回滾到上一個環節),下一個環節ID(保存下一環節的ID,由這項可以判斷該環節是否整個流程的結束環節,或者該環節的任務完成了,根據這個數據項可以啟動下一環節,繼續向前推進)。

⑷ 工作流實例啟動描述(workflowInstanceStartUpTable)動態定義工作流實例啟動信息(其實這也是工作流實例信息表)啟動者在產生一個工作流實例之前必須根據工作流的定義做好準備工作,這些準備工作的信息就填入該表中,然后交付給工作流引擎。該描述包括工作流ID(所屬工作流ID),工組流實例ID(標識該工作流實例,可以定義為以”WORKFLOWINSTANCE_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),工作流實例描述,工作流實例創建時間,工作流實例創建者ID(啟動者ID),工作流實例創建者名稱,當前工作流狀態(標識當前工作流實例的狀態,啟動者在創建后卻沒提交給工作流引擎前的狀態為“initialized”初始化狀態,之后的狀態要視工作流類型而定),當前狀態具體描述,當前操作者ID(當前工作流要被誰操作),當前操作者名稱。工作流實例完成標志(標識該工作流實例的完成),工作流實例完成時間,當前工作流狀態和當前操作者ID和當前工作流狀態具體描述三項在工作流實例的運行過程中,可以動態追蹤該工作流實例的運行,而這三項再加上工作流完成標志和工作流完成時間,可以知道該工作流實例的完成情況。

⑸ 工作流實例過程描述(workflowInstanceProcessingTable)以環節為單位動態描述工作流實例的處理過程,啟動者創建工作流實例后,提交給工作流引擎后,工作流實例就根據工作流定義的流程進行運轉了。包括工作流實例ID,工作流實例所對應環節(工作流流程就是由一系列的環節組成,按照預定義的流程一個環節過渡到另一個環節),當前該環節所處狀態(這標識著該環節在處理過程中的狀態,最終狀態表示該環節的完成狀態),當前操作者(對應的是角色),當前狀態具體描述。⑹ 工作項描述(workItemTable)

動態描述已經參與該工作流實例處理的參與者(對應已處理環節的角色的每個用戶)的工作情況。包括工作項ID(可以定義為以”WorkItem-_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),工作項名字,工作項描述,工作流實例ID(該工作項所屬的工作流實例),該環節任務分派規則(繼承環節的任務分派規則,用于判斷該環節任務完成方式),當前該工作項所處狀態(根據不同的工作流類型有不同的狀態,根據這些狀態可以在參與者接口上顯示不同的工作項列表),執行動作(記錄執行者會對該工作項執行怎么樣的動作,如果是申請事務則是審批通過或審批不通過),執行時間(記錄該執行動作的時間),用戶ID(標志該工作項是屬于誰的。⑺

用戶描述(UserTable)

該表描述所有用戶的資料,包括用戶ID(可以定義為以”User-_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),用戶名稱,用戶密碼,用戶所屬部門,職位等等信息,級別是該用戶的系統權限,包括普通職員,高級職員和系統管理員。⑻ 日志信息描述(LogTable)

描述用戶的工作日志,便于對各種操作進行追蹤。包括日志ID(可以定義為以”Log-_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號)等等,其中有一項是相關工作項ID,這是當參與者對原始工作項進行執行操作動作時的工作項。⑼ 角色信息(RoleTable)

描述角色的信息,包括角色ID(可以定義為以”Role__xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),角色名稱,部門名稱,職位名稱,角色描述。角色由部門和職位組成。

⑽ 部門信息(DepartmentTable)

描述部門的信息,包括部門ID(可以定義為以” Depatment_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),部門名稱,部門其它信息。

⑾ 職位信息(PositionTable)

描述職位的信息,包括職位ID(可以定義為以” Position_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”形式,x是自動生成的序號),職位名稱,職位其它信息。

除了以上這些主要表以外,還有一些我們是在定義工作流模型的時候才加入數據庫的,如對應工作流附件類型為表的表格。為了減少網絡流量和提高系統的運行速度,我們把一些有關聯的數據庫操作寫成存儲過程:

⑴ 刪除工作流模型存儲過程:刪除一個工作流模型,必須刪除它的工作流定義主信息,同時刪除對應的附件信息,附件為表的表格,環節信息;

⑵ 創建附件類型為表的表格:定義附件信息時已經把該表格的字段信息保存在該附件信息的其它信息字段中,并且有一定的格式,那么我們從該字段中按照一定的格式還原表格的字段信息,并根據這些信息在數據庫中創建該表格。

3.5 類的設計

用面向對象的方法和UML建模工具,再根據系統結構圖,模塊的劃分和數據庫的設計,我們把對象轉化成類,進行類的設計。我們把整個系統的類分成三部分,一是實體類,二是業務類,三是接口類。

3.5.1 實體類的設計

工作流模型的對象就是一個一個的實體,實體類又分為數據庫訪問類和值對象類。數據庫訪問類是對存儲在數據庫的實體信息進行訪問(插入,刪除,更新,查詢)的類,值對象類是在客戶端和服務器端之間交換資料的實體信息類。

3.5.1.1 數據庫訪問類

⑴ 數據庫連接類:該類是其它數據庫訪問類的父類,管理數據庫的連接,負責從數據庫連接池找可用的數據庫連接給其它數據庫訪問類使用,使用完畢后負責放回連接池,類圖如下圖:

說明:屬性只有一個connection,它代表數據庫的一條連接,類型為Connection,方法有一個構造函數workflowDAO()和一個關閉連接的函數closeConnection()。WorkflowDAO()實現從數據庫連接池找一個可用連接并賦值給屬性connection,closeConnection()負責把連接放回數據庫連接池。

⑵ 工作流定義主信息訪問類:對應數據庫的工作流定義主信息表,該類封裝了對該表格記錄的各種操作,就是插入或刪除一條工作流定義主信息,查詢特定工作流定義信息或者所有工作流定義信息,類圖如下圖:

說明:構造函數WFDefineMainInfoDAO()調用父類構造函數,從數據庫連接池中找一個可用的數據庫連接(其它數據庫訪問類也一樣)。

⑶ 工作流流程信息訪問類:對應工作流流程描述表,該類封裝了對該表格記錄的各種操作,流程是由若干環節組成,就是插入或刪除一條環節信息,查詢同屬于一個流程的環節信息等等,類圖如下圖:

說明:findWorkflowFirlstActivityInfo()函數負責找該工作流模型的第一個環節的信息,findWorkflowNextActivityID()負責根據當前環節ID找下一環節的信息。

⑷ 工作流附件信息訪問類:對應工作流附件信息表,該類封裝了對該表格記錄的各種操作,就是插入或刪除一條工作流附件信息,查詢同屬于一個工作流模型的附件信息。類圖如下:

⑸ 工作流附件類型為表的信息訪問類:對應工作流附件類型為表格的信息表,該類封裝了該表記錄的各種操作,就是插入或查詢一條工作流附件類型為表格的具體信息,類圖如下:

⑹ 工作流實例啟動信息訪問類:對應工作流實例啟動信息表,該類封裝了該表記錄的各種操作,就是插入或查詢一條工作流啟動信息,查詢同屬于一個用戶的工作流實例啟動信息,更新部分字段信息,類圖如下:

說明:selectFinishedWorkflowInstanceStartUpInfoVO()負責查詢特定用戶啟動的并且已經完成的工作流信息,selectNotFinishedWorkflowInstanceStartUpInfoVO()負責查詢特定用戶啟動的并且還沒有完成的工作流信息,updateWFInstFinishedFields()負責在工作流實例結束時更新特定的字段信息,updateWFInstProcessingFields()負責在工作流實例運行工程中更新特定的字段信息。

⑺ 工作流實例過程信息訪問類:對應工作流實例過程信息表,該類封裝了該表格記錄的各種操作,每一條記錄實際上是一個環節實例,就是插入、刪除或查詢一條環節實例信息,查詢指定工作流實例的所有環節信息,更新部分信息字段,類圖如下:

說明:SetWFInstProcessingCurrentPerformerNumField()負責更新已經處理該環節實例對應的工作項的參與該環節實例的用戶數目,updateWFInstProcessingFields()負責在環節實例處理過程中更新特定的字段信息。

⑻ 工作項信息訪問表:對應工作項表,該類封裝了該表格記錄的各種操作,就是插入或刪除一條工作項信息,查詢工作項信息,更新工作項信息,類圖如下:

說明:selectFinishedWorkItemVO()負責查詢特定用戶已經處理完畢的工作項信息,selectNotYetFinishedWorkItemVO()負責查詢還沒有處理的工作項信息,updateWorkItemFields()負責更新工作項在處理過程中的特定字段信息,isPerformedInWorkItemByUser()負責判斷該工作項是否已經處理完畢。

⑼ 用戶信息訪問表:對應用戶信息表,該類封裝了該表格記錄的各種操作,就是插入、刪除或查詢一條用戶信息,查詢特定角色對應的用戶信息,類圖如下:

說明:selectCountRS()負責統計同屬于一個角色的用戶數目。

⑽ 角色信息訪問類:對應角色信息表,該類封裝了該表記錄的各種操作,就是插入、刪除或查詢一條角色信息,查詢所有角色信息,類圖如下:

⑾ 部門信息訪問類:對應部門信息表,該類封裝了該表記錄的各種操作,就是插入、刪除或查詢一條部門信息,查詢所有部門信息,類圖如下:

⑿ 職位信息訪問類:對應職位信息表,該類封裝了該表記錄的各種操作,就是插入、刪除或查詢一條職位信息,查詢所有職位信息,類圖如下:

⒀ 日志信息訪問類:對應日志信息表,該類封裝了該表記錄的各種操作,就是插入、刪除一條日志信息,查詢特定的日志信息,類圖如下:

3.5.1.2 值對象類

值對象類其實是一種數據結構,用于客戶機和服務器之間的數據交換,也用于對象實例的數據傳遞,它有若干屬性,可是很少方法,實例化后就對應數據庫表的一條記錄。

⑴ 工作流定義主信息值對象類:可以保存工作流主信息表的一條記錄信息,類圖如下:

⑵ 工作流流程信息值對象類:可以保存工作流流程信息表的一條記錄信息,類圖如下:

⑶ 工作流附件信息值對象類:可以保存工作流附件信息表的一條記錄信息,類圖如下:

說明:SetOtherInfo()負責以一定格式把工作流附件類型為表的表格字段信息保存在OtherInfo中,GetOtherInfo()負責從OtherInfo中以一定的格式還原工作流附件為表的表格字段信息。

⑷ 工作流附件類型為表的信息值對象類:可以保存工作流附件類型為表的信息表的一條記錄信息,類圖如下:

說明:tableName就是工作流附件類型為表的表格名稱,fieldValue就是對應該表的一條記錄的各個字段值,用可變長數組Vector保存下來。

⑸ 工作流實例啟動信息值對象類:可以保存工作流實例啟動信息表的一條記錄信息,類圖如下:

⑹ 工作流實例過程信息值對象類:可以保存工作流實例過程信息表的一條記錄信息,類圖如下:

⑺ 工作項信息值對象類:可以保存工作項信息表的一條記錄信息,類圖如下:

⑻ 用戶信息值對象類:可以保存用戶信息表的一條記錄信息,類圖如下:

⑼ 角色信息值對象類:可以保存角色信息表的一條記錄信息,類圖如下:

⑽ 部門信息值對象類:可以保存部門信息表的一條記錄信息,類圖如下:

⑾ 職位信息值對象類:可以保存職位信息表的一條記錄信息,類圖如下:

⑿ 日志信息值對象類:可以保存日志信息表的一條記錄信息,類圖如下:

⒀ 信息集合值對象類:可以保存各種信息的一個集合,當需要返回多條記錄信息的時候可以使用該類,類圖如下:

說明:只有一個屬性,是一個可變長數組,可以存放不定數量的記錄信息。3.5.2 業務類的設計

業務類,其實就是邊界類,它根據系統的需求按照一定的方式把各個實體類聯系起來,以實現系統的各種功能。按照實現功能的不同我們可以分為用戶管理類,角色管理類,部門管理類,職位管理類,工作流模型管理類,工作流實例管理類,系統監控管理類。

⑴ 用戶管理類:負責用戶的注冊,注銷,檢測合法性,查找用戶信息,類圖如下:

⑵ 角色管理類:負責新增加角色,刪除角色,查找角色信息,類圖如下:

⑶ 部門管理類:負責新增加部門,刪除部門,查找部門信息,類圖如下:

⑷ 職位管理類:負責新增加職位,刪除職位,查找部門信息,類圖如下:

⑸ 工作流模型管理類:負責工作流模型的定義,解析,類圖如下:

⑹ 工作流實例管理類:負責工作流實例的創建,維護各種實例的狀態信息,分派任務給用戶,用戶處理工作項等等的工作,類圖如下:

說明:uploadAttachmentToServer()負責把工作流附件類型為文檔的文檔上傳到服務器特定目錄下。

⑺系統監控管理類:是一個綜合類,主要通過調用其它管理類的功能來實現本身的功能,就是查看工作流實例的過程狀態,完成程度,根據一定的條件有必要控制實例的掛起,激活,結束,查看各個參與用戶的工作情況,在出現工作誤時、意外、異常等等情況時采取一定的措施保證整個實例的完成。而所有這些都保存在日志中。

3.5.3 接口類的設計

接口類是工作流引擎提供給外部應用的類,應用系統通過調用這些類,來實現一定的應用功能。我們在接口類的設計上,采取格式統一、隱藏系統復雜性、功能調用方便的原則,盡量為外部應用系統提供簡潔、易懂的功能調用接口。因而我們把這些類都設計成只有一個業務類實例,一個ToDoWhat()方法的類,并且每一個業務類對應一個接口類。在這些接口類中,業務類實例作為它的一個數據成員,ToDoWhat()方法有兩個參數,toDoCode(工作代碼)和object(數據交換對象),工作代碼表示要調用的功能的標識,數據交換對象表示功能調用要處理的數據(應用數據)。從本質上來說,就是根據不同的工作代碼調用業務類實例的不同方法,對各種應用數據進行處理。

第四章

系統實現系統的實現主要包括關鍵問題的解決方案和一個工作流管理應用系統的實踐。首先提出關鍵問題,然后給出解決方案,最后提出一個應用架構,利用J2EE技術和數據庫技術實現一個基于輕量級工作流引擎的簡單工作流管理應用系統。

4.1 關鍵問題的解決方案

在實現工作流引擎的時候,有一些關鍵問題,例如啟動工作流實例,推動工作流實例的進程,類型為文檔的附件的處理等等,都是要重點解決的。4.1.1 啟動工作流實例

當根據各種業務需求創建了對應的工作流模型,根據結構組織情況創建了組織模型后,用戶就可以創建工作流實例并啟動它。用戶把工作流實例的信息提交給工作流引擎,那么工作流引擎如何工作呢?工作流引擎其實做了一系列的工作,其處理過程如下:

⑴ 工作流引擎得到用戶創建的工作流實例數據,記錄在工作流實例啟動信息表中;

⑵ 工作流引擎解析對應該工作流實例的工作流模型的含義,獲得必要信息提供給工作流實例使用;

⑶ 工作流引擎根據這些必要信息找到工作流模型對應流程的第一個環節信息,并生成該工作流實例的第一個環節實例,記錄在工作流實例過程描述表中;

⑷ 工作流引擎根據任務分派原則開始把任務項分派給參與該環節實例的所有用戶;

⑸ 工作流引擎根據該環節定義的參與者角色,找出所有同屬于該角色的所有用戶,為各個用戶都生成一個工作項,記錄在工作項信息表中,工作項要繼承該環節定義的業務規則,完成任務的分派;

⑹ 工作流引擎根據該環節定義的業務規則,如果該環節是自動型的,則為該環節的參與用戶分派完任務后立刻就根據該環節信息去找下一個環節的信息,進行下一環節實例的處理;如果該環節不是自動型的,是需要人工參與處理的,則工作流引擎暫停該工作流實例的處理工作,等待參與用戶處理的結果;

⑺ 啟動工作流實例的工作結束。

4.1.2 推進工作流實例的進程

⑴ 如果上一環節定義的業務規則是自動型的,則立刻根據當前環節信息查找下一環節;

⑵ 如果上一環節定義的業務規則是不是自動型的,則等待參與用戶對各自的工作項進行處理,當每一個用戶處理完后,工作流引擎都要判斷該環節實例是否結束,結束的條件是業務規則的規定和用戶的處理結果。

如果業務規則是與聚合,當當前用戶的處理結果是非正常處理的話,該環節實例就結束,并且該工作流實例也結束,通知其他還沒處理的用戶該環節已經結束,并記錄在相應的數據庫表中;當當前用戶的處理結果是正常處理的話,則再判斷是否所有參與的用戶都處理完畢,如果是則結束該環節,通知其他用戶該環節已經結束,并記錄在相應的數據庫表中,然后查找下一環節,如果不是則等待其他還沒處理的用戶的處理結果。

如果業務規則是或聚合,當當前用戶的處理結果是正常處理的話,該環節的實例就結束,并且該工作流實例也結束,通知其他參與還沒處理的用戶該環節實例已經結束,記錄在相應的數據庫表中,然后查找下一環節;當當前用戶的處理結果是非正常的話,則等待其他還沒處理的用戶的處理結果。

如果業務規則是投票聚合,當當前用的處理結果是正常處理的話,則使統計正常處理結果的計數器加一,然后判斷該統計數量是否已經達到規定的數量,如果是則結束該環節實例,并通知其他還沒處理的用戶該環節實例已經結束,記錄在數據庫表中,然后查找下一環節;當當前用的處理結果是非正常處理的話,則不統計,等待其他還沒處理的用戶的處理結果。

⑶ 當前環節實例結束后,工作流引擎就找下一環節處理,如果沒有下一環節,則結束該工作流實例,記錄在數據庫表中,如果還有環節,則同樣生成環節實例,進行任務分派,等待環節實例的結束。工作流引擎就是這樣推進工作流實例進程,從一個實例環節到下一個實例環節,直到工作流實例結束為止。

4.1.3 類型為文檔的附件的處理

對于文檔形式的附件,我們采用上傳文件到服務器的方法,用戶編輯好文檔后,以規定的文件名上傳到服務器中特定的目錄中,當用戶要查看該文檔時,工作流引擎會根據該附件文檔對應的信息得到其文件名,用戶根據該文件名下載到本地中,同時調用外部應用程序如work2000、記事本打開給用戶瀏覽其內容。

4.2 一個簡單工作流管理系統的實現

現在,我們利用J2EE技術把工作流引擎開發出來,并基于該引擎做一個簡單的應用系統,以證明系統設計的可行性。我們用Jbuilder9.0做開發工具,用MS SQLSERVER2000做數據庫管理系統。4.2.1 系統應用框架

工作流實例管理器

工作流模型管理器

組織管理器

系統監控器

工作流引擎

應用服務器

數據庫

Web界面

文檔管理系統

圖4.1 系統應用框架

4.2.2 J2EE相關技術的應用

J2EE為多層Web應用系統提供了容器平臺,用J2EE技術把工作流管理系統開發成一個多層Web應用系統,是最合適不過了。

4.2.2.1 J2EE核心模式和類的實現

模式是特定問題的可重現的解決方案,使用模式有莫大的好處。模式可以權衡已經被證實的解決方案,為交流提供一個共同的詞匯,約束解決方案的范圍。J2EE核心模式是在J2EE平臺上應用的模式,它在表示層,業務層,集成層都有特定的模式,為基于J2EE平臺的開發提供很好的解決方案。對類的實現我們采用了J2EE核心模式,主要運用的核心模式是業務層的ValueObject(值對象)和集成層的DAO(DataAccessObject,數據訪問對象)。

⑴ 值對象:基于多層應用架構的系統,客戶端和服務器端往往有大量的數據交換,而且客戶端調用的方法都是遠程的,不是本地的,為了減輕網絡負載,提高應用程序的性能,用值對象封裝業務數據,在客戶端和服務器端進行數據交換。因而我們把所有工作流對象都用值對象表示,像工作流定義主信息值對象類(WFDefineMainInfo)。在這些值對象中,所有屬性和方法都是聲明為公共的,并且很少方法,很多屬性,這些屬性就是對應的工作流對象的屬性,也對應了數據庫中表的某個字段。

⑵ 數據訪問對象:基于關系數據庫技術的系統,會對數據庫進行頻繁的訪問,數據庫表的眾多,對某個表操作的方式的眾多,如果不對這些表和表的操作方式進行必要的歸類,只會造成模塊聚合度的降低,代碼混亂的后果。我們使用數據訪問對象,來抽象和封裝對數據庫的訪問,所有涉及到數據庫訪問的情況都使用數據訪問對象去實現。工作流對象的所有數據都保存在數據庫中,我們為每個對象數據的數據庫操作都封裝在數據訪問對象中,像工作流定義主信息訪問類(WFDefineMainInfoDAO)。4.2.2.2 JavaBean技術與類的實現

JavaBean是基于Java技術的軟件構件模型,它是Java語言編寫的可移植的不依賴于平臺的軟件構件模塊。我們把系統所有的類都實現為一個一個的JavaBean,提高類的可重用性,有利于日后的功能擴展。另外,JavaBean應用到JSP中,可以為JSP應用帶來更好的可伸縮性。

4.2.2.3 JBOSS應用服務器和工作流引擎的實現

應用服務器我們采用JBOSS,這是一個免費的產品,它提供數據庫訪問(JDBC)、命名機制(JNDI)服務等服務,支持數據庫連接池、實例連接池,這些為我們的工作流引擎的實現提供了支持,給系統開發帶來很大的方便。

⑴ 對數據庫訪問的支持:JBOSS通過對特定數據庫管理系統的配置(XML文件),并實例化對數據庫的若干連接,放進數據庫連接池中,提供給系統使用。在JBOSS運行過程中,對這些數據庫進行有效的管理,減輕了工作流引擎的工作負擔。①

配置方法 mssql-ds.xml文件:

MSSQLDS/* 數據源名字 */

jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WorkflowDB /* 連接URL,包括服務器

地址,數據庫名稱 */

com.microsoft.jdbc.sqlserver.SQLServerDriver /* sqlserver驅動 */

workflowUser /* 用戶名稱 */

123456 /* 用戶密碼 */

調用方法(使用JNDI機制)部分代碼:

InitialContext ctx = new InitialContext();//初始化上下文

DataSource ds =(DataSource)ctx.lookup(“java:/MSSQLDS”);

//根據數據源名字查找已經配置好的數據源

Connection conn = ds.getConnection();

//調用該方法可以得到對數據庫的一條連接,而這條連接已經被JBOSS初始化,實際上是從數據庫連接池中找到一條可用的連接而已,然后通過該連接就可以對數據庫進行各種操作,操作完畢后不用顯式關閉,JBOSS會自動回收該連接,把該連接重新放入連接池中。

⑵ 對對象實例化的支持

當系統第一次生成某個對象實例時,JBOSS就對該實例進行管理,把該實例放入實例池中,并不釋放它,當系統再次要生成該實例時,不再進行該對象的實例化,而是JBOSS從實例池中找到該實例并提供給系統使用,這明顯提高系統運行速度。

⑶ 對線程的支持

當不同的用戶登陸系統,并且對系統所有功能的使用,JBOSS會為每個用戶分配一個線程去為他們工作,這些線程放入線程池中,JBOSS在運行過程中始終對這個線程池進行管理,提高系統的并發性能。

4.2.2.4 Jsp/Servlet技術和系統界面的實現

JSP技術可以方便的建立動態Web頁面,提供一個友好的用戶界面,并且很方便的調用JavaBean,完成復雜的業務功能;Servlet提供在Web進行請求和響應服務的功能,客戶端對服務器提供的服務的所有請求和響應都通過Servlet實現。JSP最終解析為Servlet。

⑴ JSP調用JavaBean

下面是創建工作流定義主信息的JSP頁面部分代碼:

class=“wfsystem.interfacepack.client.workflowManager” />

?

<%

WFDefineMainInfo wfDefinemaininfo =new WFDefineMainInfo();

? // 填充工作流定義主信息值對象WFDefineMainInfo 實例

wfManager.ToDoWhat(0,(Object)wfDefinemaininfo);//調用接口類的方法,0對應創建工作流主信息的方法代碼

%>

⑵ Servlet請求和響應服務 下面是請求得到表單信息(這些信息就是工作流定義主信息值對象的內容)部分代碼:

<%

String workflowname = request.getParameter(“workflowname”);

String workflowDesc = request.getParameter(“workflowDesc”);

//request就是請求對象,調用其方法getParameter()可以得到表單的信息

? //一個一個的得到信息

%>

下面是響應用戶的部分代碼:

<%

response.sendRedirect(“defineWorkflowModel-mainInfo.jsp”);// response就是響應對象,調用其方法sendRedirect()向用戶發送一個頁面重定向的應答。

%>

4.2.3 具體編碼實現

接下來的工作就是編碼工作,以Jbulider9.0作為開發工具,以VSS(Microsoft Visual SourceSafe6.0)作為版本控制工具,進行代碼編寫,進行單元測試,綜合測試,最后得到一個基于輕量級工作流引擎的簡單的工作流管理系統。

第五章

系統的不足

本文探討的輕量級工作流引擎,盡管有很多的優點,可是它從夠用、靈活和低成本的設計原則出發,不追求工作流引擎的功能的完備和復雜,所以存在著一些不足:

⑴ 不支持復雜業務:本文探討的輕量級工作流引擎是從一般業務的需求設計工作流模型,我們只實現了活動的單分支,就是組成工作流流程的活動是一個活動只有一個后續活動,而復雜業務可能一個活動后面出現多分支,有多個后續活動,形成一個樹型的結構。所以對復雜業務的不支持是本文探討的工作流引擎的最大的不足。

⑵ 不支持復雜的組織結構:本文探討的工作流引擎只是以職能型的機構模型去描述組織結構,主要以部門和職位組成一個角色,任務分配也只是按照部門和職位的不同組合去分配,可是復雜的組織結構模型可以定義多重角色,臨時工作組等等。

⑶ 不支持提供內建(built-in)的應用開發工具,例如是可視化工作流建模工具,FORM設計工具,這些在本文探討的工作流引擎都沒有實現一定的接口。

⑷ 在定義應用數據方面不支持所有數據類型和完整性維護,只支持字符型類型和進行一些簡單的數據保存工作。

⑸ 沒有完善的異常處理功能。對異常的捕捉和處理并不完善,沒能及時把錯誤信息顯示給用戶。

⑹ 沒有完善的事務控制功能。只實現了一些簡單的事務控制,沒有對復雜事務的控制。

第六章

結本文主要探討了輕量級工作流引擎的設計與實現,首先我們要了解有關工作流技術的相關知識,然后說明開發輕量級工作流引擎的原因,再從企事業一般業務需求入手,抽象出工作流對象,分析其之間的邏輯關系,組成工作流模型,跟著提出一個系統結構,進行模塊劃分,數據庫設計,類的設計,最后利用J2EE技術,用MS SQLSERVER2000作后臺數據庫,Jbuilder9.0作開發工具,VSS作版本控制,實現工作流引擎的開發,并基于該工作流引擎作一個簡單的應用系統,最終實現為一個工作流管理系統。該管理系統的正常運行,充分體現了輕量級工作流引擎在企事業業務的開發過程中的價值。參考文獻[1] 范玉順著,《工作流管理技術基礎》,清華大學出版社 [2] Deepak Alus等著,《J2EE核心模式》,機械工業出版社 [3] 王克紅等著,《Java技術教程(中級篇)》,清華大學出版社

[4] Wendy Boggs等著,《UML With Rational Rose從入門到精通》,電子工業出版社

[5] Borland公司著,《Borland Jbuilder實用技術手冊》,電子工業出版社 [6] 何清法等著,《基于關系結構的輕量級工作流引擎》,中國科學院計算技術研究所 [7] Joseph L.Weber著,《Java 2 編程詳解》,電子工業出版社

本文來自CSDN博客,轉載請

處http://blog.csdn.net/hjt79/archive/2004/08/15/75484.aspx

下載JAVA工作流引擎原理學習word格式文檔
下載JAVA工作流引擎原理學習.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    賽迪時代柔性工作流引擎的業務應用

    賽迪時代柔性工作流引擎技術的研究與應用 賽迪時代工作流引擎系統在工作流模型的基礎上運行企業的業務,即業務流程以工作流模型的形式表示,按照預先定義好的規則進行執行,并且......

    java學習

    .如何學習Java? 3.1 Java學習路線 3.1.1 基礎語法及Java原理基礎語法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的。學習Java也是如此,必須要有扎實的基礎,你......

    JAVA學習

    1 買本《java瘋狂講義》 或者 在網上下載下來看看2 主要看java語法部分和面向對象編程部分3 這些要速度過 接下來開始寫一些小例子 從例子里面學習會更快4 例子差不多了就開......

    如何深入學習java

    在開發領域的技術人員,只有不斷地充電提高才能夠讓自己始終處于不敗之地。技術日新月異,推陳出新,讓技術人員目不暇接。我們都知道,java技術是目前最流行的編程語言,java入門很難......

    學習“紅色引擎”體會

    學習陳一新書記“紅色引擎工程”心得體會 長堰小學 CCC 2017年3月5日近期,我校支部成員在學校黨支部的統一安排引領下,開展了學習陳一新書記的“紅色引擎工程”黨員學習活動......

    Java學習路線

    怎么學習Java,這是很多新手經常會問我的問題,現在我簡單描述下一個Java初學者到就業要學到的一些東西: 首先要明白Java體系設計到得三個方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 P......

    java 學習線路

    怎么學習Java,這是很多新手經常會問我的問題,現在我簡單描述下一個Java初學者到就業要學到的一些東西: 首先要明白Java體系設計到得三個方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 P......

    學習必經之路JAVA

    很多網友問我學習Java有沒有什么捷徑,我說“無他,唯手熟爾”。但是我卻很愿意將自己學習的一些經驗寫出來,以便后來者少走彎路,幫助別人是最大的快樂嘛! 要想學好Java,首先要知......

主站蜘蛛池模板: 青青草国产精品亚洲| 99久久99久久精品国产片果冻| 亚洲中文字幕无码中字| 免费观看性欧美大片无片| 亚洲成色www久久网站| 强伦姧人妻三上悠亚中文字幕| 麻豆一区二区三区精品视频| 国产精品美女久久久久久久久| 无码国产成人午夜电影在线观看| 亚洲精品无码久久千人斩探花| 无码av免费永久免费永久专区| 上司的丰满人妻中文字幕| 中文字幕精品久久久久人妻红杏ⅰ| 无码丰满少妇2在线观看| 国产肥白大熟妇bbbb| 亚洲午夜福利在线观看| 色护士极品影院| 伊人久久大线影院首页| 免费又黄又爽又色的视频| 成人午夜亚洲精品无码网站| 色综久久综合桃花网国产精品| 女人爽到高潮免费视频大全| 色综合视频一区二区三区44| 国产av一区二区三区日韩| 2022国产在线无码精品| 亚洲综合久久精品无码色欲| 国产精品欧美一区二区三区不卡| 亚洲中文字幕无码久久精品1| 亚洲无码在线播放| ā片在线观看免费观看| 日本阿v片在线播放免费| 国产精品成人无码a片在线看| 国产永久免费高清在线| 午夜成人鲁丝片午夜精品| 怀孕挺大肚子疯狂高潮av毛片| 中文字幕久久久久人妻中出| 潮喷失禁大喷水aⅴ无码| 日本一本一区二区免费播放| 亚洲综合久久无码色噜噜赖水| 精品久久久久久| 48久久国产精品性色aⅴ人妻|