Java開(kāi)源工作流對(duì)比工作流(Workflow)1、業(yè)務(wù)過(guò)程的部分或整體在計(jì)算機(jī)應(yīng)用環(huán)境下的自動(dòng)化; 2、是對(duì)工作流程及其各步驟之間業(yè)務(wù)規(guī)則的抽象、概括描述; 3、工作流主要解決的問(wèn)題是:為了實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo),利用計(jì)算機(jī)在多個(gè)參與者之間按某種預(yù)定規(guī)則自動(dòng)傳遞文檔、信息或者任務(wù); 4、工作流的概念起源于生產(chǎn)組織和辦公自動(dòng)化領(lǐng)域,是針對(duì)日常工作中具有固定程序活動(dòng)而提出的一個(gè)概念;目的是通過(guò)將工作分解成定義良好的任務(wù)或角色,按照一定規(guī)則和過(guò)程來(lái)執(zhí)行這些任務(wù)并對(duì)其進(jìn)行監(jiān)控;達(dá)到提高工作效率、更好的控制過(guò)程、增強(qiáng)對(duì)客戶的服務(wù)、有效管理業(yè)務(wù)流程等目的; 5、Georgakopoulos給出的工作流定義是:工作流是將一組任務(wù)組織起來(lái)一完成某個(gè)經(jīng)營(yíng)過(guò)程:定義了任務(wù)的出發(fā)順序和觸發(fā)條件,每個(gè)任務(wù)可以由一個(gè)或多個(gè)軟件系統(tǒng)完成,也可以由一個(gè)或一組人完成,還可以由一個(gè)或多個(gè)人與系統(tǒng)軟件協(xié)作完成; 6、工作流的特點(diǎn):(1)極大地提高了工作效率;(2)本身只是業(yè)務(wù)邏輯決定的一個(gè)事務(wù)流程;(3)一旦啟動(dòng),自動(dòng)流轉(zhuǎn);(4)具有事務(wù)的特征;(5)流程節(jié)點(diǎn)靈活可配;(6)符合面向?qū)ο蟮乃枷?/span> 7、工作流的分類:(1)順序工作流;(2)流程圖工作流;(3)狀態(tài)機(jī)工作流 8、工作流就是:在一個(gè)工作群組中,為了達(dá)成某一個(gè)共同目的而需要多人協(xié)力以循序或平行工作的形式來(lái)共同完成的任務(wù) 關(guān)于工作流的幾個(gè)名詞解釋: | 任務(wù) | 泛指各種事務(wù)上所必需執(zhí)行的流程性工作 | 循序或平行工作 | 工作的流動(dòng)性是一個(gè)人接著一個(gè)人執(zhí)行,或同時(shí)由多個(gè)人分開(kāi)執(zhí)行,或是上述兩類工作合并之后的混合型工作 | 多人 | 若是單人就可以完成的工作,則不能歸類為流程工作;凡是一件工作必須由兩個(gè)人或更多人來(lái)協(xié)力完成的工作才能稱之為流程工作; | 共同目的 | 多人參與的流程性工作,必須是以完成共同目的為前提;如果一群人是分別針對(duì)不同的專案來(lái)執(zhí)行個(gè)別的工作,并不算構(gòu)成一個(gè)工作流程; |
9、 鏈接: 從程序員的角度來(lái)看為什么我們需要工作流 10、 鏈接: 工作流簡(jiǎn)介及其6種常用的工作流引擎
J2EE常用工作流比較引用鏈接 | Shark(EnhydraShark) | Osworkflow opensymphony | JBPM(JBoss JBPM) Java Business Process Management | 工作流描述語(yǔ)言 | XPDL:WFMC制定的描述業(yè)務(wù)流程控制流的XML格式規(guī)范,格式復(fù)雜,與具體語(yǔ)言無(wú)關(guān),不靈活 | 1、XML:流程定義格式簡(jiǎn)單,使用靈活 2、基于有限狀態(tài)機(jī)模型 | 1、JPdl:JBoss jBPM Processdefinition language,一個(gè)商務(wù)流程被看作是一個(gè)UML狀態(tài)圖。 2、基于UML的狀態(tài)圖和活動(dòng)圖來(lái)定義流程,已加入JBOSS大家庭,市場(chǎng)前景看好。 | 是否開(kāi)源,開(kāi)源協(xié)議 | 一個(gè)可擴(kuò)展的工作流引擎框架?,F(xiàn)在不再開(kāi)源,用于商業(yè)用途 | 開(kāi)源的嵌入式工作流引擎 ,它的使用遵循 Apache License | 一種基于J2EE的輕量級(jí)工作流管理系統(tǒng),它的使用遵循 Apache License | 相關(guān)開(kāi)源項(xiàng)目 | Jawe | Osworkflow for .net |
| 支持是否全面 | 流程定制工具JAWE | 1、帶有一個(gè)簡(jiǎn)陋的流程定制工具,但十分簡(jiǎn)陋且常有錯(cuò)誤 2、需要專業(yè)技術(shù)用戶使用 | 1、Jbpm3的圖形化流程定義嵌入到j(luò)bosseclipse IDE 2、流程定制方式更接近用戶的理解 | 拓展性 | 體系和功能最為復(fù)雜,秉承“模塊化”的思想,比較容易擴(kuò)展 | 有良好的擴(kuò)展性,絕對(duì)的靈活(同時(shí)也增加了開(kāi)發(fā)者的工作量,需要自己寫(xiě)一些必要的函數(shù)) | 最適宜擴(kuò)展(Jbpm的過(guò)程模式支持是比較固定的,但是其對(duì)任務(wù)的中action擴(kuò)展是很的靈活)最適宜被商業(yè)化應(yīng)用 | 持久化 | Shark的持久層采用DODS來(lái)實(shí)現(xiàn) | 1、它提供的持久化API:EJB,Hibernate,JDBC等 2、Osworkflow 可以與Spring集成。 | 利用hibernate持久化 | 小結(jié) | Shark是體系和功能最為復(fù)雜的代表。它是一款遵循WfMC的XPDL標(biāo)準(zhǔn)開(kāi)源工作流引擎,并且同時(shí)遵循OMG組織的WorkflowManagement Facility規(guī)范。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)生。 在所有開(kāi)源工作流引擎中,Shark的體系最為完備和復(fù)雜。其一直秉承著“模塊化”的思想,所以比較容易擴(kuò)展。但是自從被Together公司收購(gòu)后,Shark的商業(yè)化色彩已經(jīng)越來(lái)越濃,改稱為Together Workflow Server,并僅以Community Edition的形式提供了部分開(kāi)源代碼供參考。 | OSWorkflow是最輕量型的代表,也是一款非常靈活和低級(jí)別定位的工作流引擎的實(shí)現(xiàn)框架。低級(jí)別定位的意思是說(shuō),它不是定位在解決流程模型對(duì)象和運(yùn)轉(zhuǎn)場(chǎng)景,而是提供一套可維護(hù)調(diào)度的機(jī)制,供開(kāi)發(fā)人員自主擴(kuò)展。這個(gè)維護(hù)流程調(diào)度機(jī)制OSWorkflow選擇的是基于行為(Action)的FSM理論,所以OSWorkflow更像是一個(gè)復(fù)雜而靈活的有限狀態(tài)調(diào)度機(jī)。 Osworkflow有個(gè)重要概念是State,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 OSWorkflow在國(guó)內(nèi)項(xiàng)目應(yīng)用得較多,很多國(guó)內(nèi)的簡(jiǎn)易審批流程項(xiàng)目都是基于其引擎二次開(kāi)發(fā)而來(lái)。這主要是由于OSWorkflow是基于Action驅(qū)動(dòng)的,而國(guó)內(nèi)的客戶也很容易接受這樣的操作習(xí)慣。但OSWorkflow所依賴的FSM模型對(duì)于分支、聚合、子流程的支持度很低,這一點(diǎn)在實(shí)施過(guò)程中需要注意。 | Jbpm結(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等。Jbpm來(lái)內(nèi)部實(shí)現(xiàn)中還采用了PetriNet的概念,如token,signal等,jBpm對(duì)Token的應(yīng)用很有特色,巧妙地利用Parent-Child Token的機(jī)制處理分支、父子流程等復(fù)雜應(yīng)用場(chǎng)景。 jBpm是最適合擴(kuò)展的代表,是在所有開(kāi)源引擎中最適宜被商業(yè)化應(yīng)用的一款。首先其流程建模模型是基于Activity Diagram(活動(dòng)圖)的,并在引擎構(gòu)建上融入了FSM和PetriNet思想,所以其內(nèi)核和根基比較牢固扎實(shí)。其次,自從被JBoss收購(gòu)后,其3.x系列的結(jié)構(gòu)更加趨于微內(nèi)核,Plug-in思想也更加深入。其同時(shí)還提供了對(duì)BPEL擴(kuò)展,存儲(chǔ)支持JBossHibernate實(shí)現(xiàn),集成了JBoss seam,規(guī)則引擎準(zhǔn)備采用JBossrules,并準(zhǔn)備集成JBoss Messaging。這樣,不論從內(nèi)核和外圍應(yīng)用,jBpm都具有了強(qiáng)勁的動(dòng)力。 |
用OSWorkFlow和JBPM開(kāi)發(fā)工作流異同引用鏈接 | JPBM | OSWorkFlow | 編寫(xiě)流程描述文件方式 | BPM是通過(guò)圖形化的編輯工具(JBPM自帶的Eclipse插件)來(lái)編寫(xiě)業(yè)務(wù)流程如開(kāi)始狀態(tài),結(jié)束狀態(tài),以及狀態(tài)之間的轉(zhuǎn)換,之后會(huì)自動(dòng)生成XML文件,但具體每一步相關(guān)的細(xì)節(jié)操作還是要手工配置(如該節(jié)點(diǎn)是屬于什么類型節(jié)點(diǎn),相關(guān)的函數(shù),要不要較驗(yàn))。 | OSWorkFlow則要通過(guò)手工寫(xiě)XML文件來(lái)定義流程文件,而且它涉及的標(biāo)簽元素比較多,其用戶手冊(cè)上也建議實(shí)施人員不要去修改流程,否則流程很容易破壞。 | 工作流信息保存方式 | JBPM是將流程信息直接保存到數(shù)據(jù)庫(kù),可以用任何方式對(duì)數(shù)據(jù)庫(kù)的操作,這樣就要引入保存工作流信息的相關(guān)表。 | OSWorkFlow是既可以保存在XML文件里,也可以保存在數(shù)據(jù)庫(kù)中,保存在數(shù)據(jù)庫(kù)中時(shí)需要配置propertySet.xml文件,比較復(fù)雜,而且它不是完全支持hibernate(如引入osuser來(lái)作權(quán)限分析時(shí)),此時(shí)要自定義操作數(shù)據(jù)庫(kù)的方式。 | 與系統(tǒng)集成 | JBPM集成比較容易,加入Spring支持包spring-modules-jbpm31.jar,該包加入了Spring對(duì)JBPM的包裝,所有的集成都是在此包基礎(chǔ)之上。之后還要配置sessionFactoryForJbpm ,jbpmConfiguration,jbpmTemplate, jbpmDao。 | OSWorkFlow跟Spring集成須要如下所需組件: 1)SpringHibernateWorkflowStore,讓工作流程實(shí)例(如果需要的話)分享當(dāng)前事務(wù)。 2) SpringTypeResolver,允許 OSWorkflow 從 Spring ApplicationContext中獲得業(yè)務(wù)邏輯組件(conditions, functions等等)。 3)SpringConfiguration, 這是一個(gè) Workflow Configuration 接口的實(shí)現(xiàn)類, 它包含指向 store和 factory的引用,這樣可以在 spring 中注射或者連接。 4) SpringWorkflowFactory,這是一個(gè) XMLWorkflowFactory 封裝包,它可以允許從容器中注入 configuration,從而不再?gòu)钠渌?nbsp;XML 配置文件中讀取它們。 如果OSWorkFlow引入osuser.xml來(lái)設(shè)置權(quán)限,則不支持Hibernate3,因?yàn)閛suser是比較獨(dú)立的模塊,目前還沒(méi)有支持hibernate3,所以跟Spring集成時(shí)要修改配置文件applicationContext-hibernate3.xml | 重點(diǎn)難點(diǎn) | JPDL語(yǔ)言的學(xué)習(xí),主要是用來(lái)編寫(xiě)流程文件;理解3個(gè)接口:動(dòng)作處理接口(提供影響流程執(zhí)行的方法,在event和action元素中被回調(diào)),判定處理接口(用在decision判定節(jié)點(diǎn)中,提供方法來(lái)判定節(jié)點(diǎn)的轉(zhuǎn)向),委派處理接口(用在task的委派子元素assignment中,用來(lái)指定將任務(wù)分配給指定的人員或角色)。 | 工作流文件定義的元素,主要用來(lái)編寫(xiě)工作流;OSWorkFlow.xml及propertySet.xml文件的配置;InputMap接口、Workflow 接口及WorkflowDescriptor接口。 | 開(kāi)發(fā)步驟 | 通過(guò)圖形編輯工具編寫(xiě)業(yè)務(wù)流程――>生成xml流程文件――>修改流程文件(判斷節(jié)點(diǎn)是任務(wù)節(jié)點(diǎn)、普通節(jié)點(diǎn)還是判定節(jié)點(diǎn),之后作相應(yīng)修改)――>導(dǎo)入保存流程信息的數(shù)據(jù)庫(kù)表――>部署流程定義文件(將流程文件中的內(nèi)容放到數(shù)據(jù)庫(kù)中)――>創(chuàng)建流程實(shí)例――>調(diào)用JBPM提供的signal方法執(zhí)行流程流轉(zhuǎn) | 手工編寫(xiě)工作流文件——>配置OSWorkflow.xml――>配置WorkStore——>配置propertySet.xml,osUser.xml文件(如果需要用戶權(quán)限)――>調(diào)用AbatractWorkflow類加載OSWorkflow.xml(它會(huì)自動(dòng)加載工作流文件及數(shù)據(jù)庫(kù)配置文件)――>調(diào)用WorkFlow接口方法(initial()方法,transitionWorkflow()方法,doAction()方法) | 流轉(zhuǎn)方法 | 先確定節(jié)點(diǎn)是什么節(jié)點(diǎn),如果是普通的Node節(jié)點(diǎn),則是流程執(zhí)行到此節(jié)點(diǎn)不會(huì)中斷,繼續(xù)執(zhí)行;如果是state節(jié)點(diǎn),則流程執(zhí)行到此節(jié)點(diǎn)會(huì)中斷,直到系統(tǒng)外的參與者發(fā)會(huì)命令才能繼續(xù)執(zhí)行,即調(diào)用signal()或end()方法;如果節(jié)點(diǎn)是Task-node,則會(huì)根據(jù)task任務(wù)列表的任務(wù)有沒(méi)全部執(zhí)行完來(lái)決定流轉(zhuǎn)。 | 一個(gè)工作流包含多個(gè)步驟。每一個(gè)步驟都有一個(gè)當(dāng)前狀態(tài)(例如, Queued, Underway, or Finished)。每一個(gè)步驟中都有一個(gè)或者多個(gè)動(dòng)作可以被執(zhí)行。每一個(gè)動(dòng)作都可以設(shè)置執(zhí)行條件(condition),也可以設(shè)置執(zhí)行函數(shù)(pre-function or post-function)。動(dòng)作產(chǎn)生結(jié)果(result),導(dǎo)致工作流的狀態(tài)和當(dāng)前步驟發(fā)生改變 | 流程定義文件主要元素 | 一個(gè)JBPM的流程定義XML文件中包含一個(gè)< process-definition>元素,而一個(gè)< process-definition>元素又包含零個(gè)或一個(gè)< description>元素,零個(gè)或多個(gè)的< swimlane>元素,一個(gè)< start-state>元素,零個(gè)或多個(gè)的< state>元素或< decision>元素或< fork>元素或< join>元素,以及零個(gè)或多個(gè)的< action>元素,零個(gè)或多個(gè)<task-node>和<node>元素,一個(gè)< end-state>元素等等。此外,< process definition>元素有一個(gè)標(biāo)示符,以“name”屬性來(lái)表示,這個(gè)屬性必須存在,用來(lái)表示該流程的名稱。 | 步驟(step)、條件(conditions)、循環(huán)(loops)、分支(spilts)、合并(joins)、角色(roles)、函數(shù)(function) | 其他 | JBPM的Scheduler可以實(shí)現(xiàn)在JBPM流程中定時(shí)觸發(fā)某一動(dòng)作。在流程中JPBM提供了timer節(jié)點(diǎn)供我們使用,通過(guò)這個(gè)節(jié)點(diǎn)我們可以實(shí)現(xiàn)節(jié)點(diǎn)動(dòng)作的定時(shí)觸發(fā)。 |
|
深入了解jBPM5與Activiti之間的差異對(duì)比引用鏈接 | Activiti | JBPM5 | 相似之處 | 1、都是BPMN2過(guò)程建模和執(zhí)行環(huán)境。 2、都是BPM系統(tǒng)(符合BPM規(guī)范)。 3、都是開(kāi)源項(xiàng)目-遵循ASL協(xié)議( Apache的 軟件許可)。 4、都源自JBoss(Activiti5是jBPM4的衍生,jBPM5則基于Drools Flow)。 5、都很成熟,從無(wú)到有,雙方開(kāi)始約始于2年半前。 都有對(duì)人工任務(wù)的生命周期管理。 6、Activiti5和jBPM5唯一的區(qū)別是jBPM5基于WebService - HumanTask標(biāo)準(zhǔn)來(lái)描述人工任務(wù)和管理生命周期。 如有興趣了解這方面的標(biāo)準(zhǔn)及其優(yōu)點(diǎn),可參閱WS - HT規(guī)范介紹 。 7、 都使用了不同風(fēng)格的 Oryx 流程編輯器對(duì)BPMN2建模。 jBPM5采用的是 Intalio 維護(hù)的開(kāi)源項(xiàng)目分支。 Activiti5則使用了Signavio維護(hù)的分支。 | 數(shù)據(jù)庫(kù)持久層ORM | MyBatis3 | Hibernate3 | 持久化標(biāo)準(zhǔn) | 無(wú) | JPA規(guī)范 | 事務(wù)管理 | MyBatis機(jī)制/Spring事務(wù)控制 | Bitronix,基于JTA事務(wù)管理 | 數(shù)據(jù)庫(kù)連接方式 | Jdbc/DataSource | Jdbc/DataSource | 支持?jǐn)?shù)據(jù)庫(kù) | Oracle、SQL Server、MySQL等多數(shù)數(shù)據(jù)庫(kù) | Oracle、SQL Server、MySQL等多數(shù)數(shù)據(jù)庫(kù) | 設(shè)計(jì)模式 | Command模式、觀察者模式等 |
| 內(nèi)部服務(wù)通訊 | Service間通過(guò)API調(diào)用 | 基于Apache Mina異步通訊 | 集成接口 | SOAP、Mule、RESTful | 消息通訊 | 支持的流程格式 | BPMN2、xPDL、jPDL等 | 目前僅只支持BPMN2 xml | 引擎核心 | PVM(流程虛擬機(jī)) | Drools | 技術(shù)前身 | jBPM3、jBPM4 | Drools Flow | 所屬公司 | Alfresco | jBoss.org | 集成 | Activiti5使用Spring進(jìn)行引擎配置以及各個(gè)Bean的管理,綜合使用IoC和AOP技術(shù),使用CXF作為Web Services實(shí)現(xiàn)的基礎(chǔ),使用MyBatis進(jìn)行底層數(shù)據(jù)庫(kù)ORM的管理,預(yù)先提供Bundle化包能較容易的與OSGi進(jìn)行集成,通過(guò)與Mule ESB的集成和對(duì)外部服務(wù)(Web Service、RESTful等)的接口可以構(gòu)建全面的SOA應(yīng)用; | jBPM5使用jBoss.org社區(qū)的大多數(shù)組件,以Drools Flow為核心組件作為流程引擎的核心構(gòu)成,以Hibernate作為數(shù)據(jù)持久化ORM實(shí)現(xiàn),采用基于JPA/JTA的可插拔的持久化和事務(wù)控制規(guī)范,使用Guvnor作為流程管理倉(cāng)庫(kù),能夠與Seam、Spring、OSGi等集成。 | 優(yōu)劣對(duì)比 | 從技術(shù)組成來(lái)看,Activiti最大的優(yōu)勢(shì)是采用了PVM(流程虛擬機(jī)),支持除了BPMN2.0規(guī)范之外的流程格式,與外部服務(wù)有良好的集成能力,延續(xù)了jBPM3、jBPM4良好的社區(qū)支持,服務(wù)接口清晰,鏈?zhǔn)紸PI更為優(yōu)雅;Activiti上手比較快,界面也比較簡(jiǎn)潔、直觀 劣勢(shì)是持久化層沒(méi)有遵循JPA規(guī)范。 | jBPM最大的優(yōu)勢(shì)是采用了Apache Mina異步通信技術(shù),采用JPA/JTA持久化方面的標(biāo)準(zhǔn),以功能齊全的Guvnor作為流程倉(cāng)庫(kù),有RedHat(jBoss.org被紅帽收購(gòu))的專業(yè)化支持; 但其劣勢(shì)也很明顯,對(duì)自身技術(shù)依賴過(guò)緊且目前僅支持BPMN2。 |
|