Java開源工作流對比
轉(zhuǎn)自http://www.360doc.com/content/19/0713/11/1314937_848435803.shtml 筆記記錄
工作流(Workflow)
1咬清、業(yè)務(wù)過程的部分或整體在計算機應(yīng)用環(huán)境下的自動化票渠;
2、是對工作流程及其各步驟之間業(yè)務(wù)規(guī)則的抽象驻售、概括描述纽绍;
3姿骏、工作流主要解決的問題是:為了實現(xiàn)某個業(yè)務(wù)目標(biāo),利用計算機在多個參與者之間按某種預(yù)定規(guī)則自動傳遞文檔、信息或者任務(wù)筐摘;
4、工作流的概念起源于生產(chǎn)組織和辦公自動化領(lǐng)域,是針對日常工作中具有固定程序活動而提出的一個概念咖熟;目的是通過將工作分解成定義良好的任務(wù)或角色圃酵,按照一定規(guī)則和過程來執(zhí)行這些任務(wù)并對其進行監(jiān)控;達到提高工作效率馍管、更好的控制過程郭赐、增強對客戶的服務(wù)、有效管理業(yè)務(wù)流程等目的确沸;
5捌锭、Georgakopoulos給出的工作流定義是:工作流是將一組任務(wù)組織起來一完成某個經(jīng)營過程:定義了任務(wù)的出發(fā)順序和觸發(fā)條件,每個任務(wù)可以由一個或多個軟件系統(tǒng)完成罗捎,也可以由一個或一組人完成观谦,還可以由一個或多個人與系統(tǒng)軟件協(xié)作完成;
6桨菜、工作流的特點:(1)極大地提高了工作效率豁状;(2)本身只是業(yè)務(wù)邏輯決定的一個事務(wù)流程;(3)一旦啟動倒得,自動流轉(zhuǎn)泻红;(4)具有事務(wù)的特征;(5)流程節(jié)點靈活可配霞掺;(6)符合面向?qū)ο蟮乃枷?/p>
7谊路、工作流的分類:(1)順序工作流;(2)流程圖工作流菩彬;(3)狀態(tài)機工作流
8缠劝、工作流就是:在一個工作群組中,為了達成某一個共同目的而需要多人協(xié)力以循序或平行工作的形式來共同完成的任務(wù)
關(guān)于工作流的幾個名詞解釋: | |
---|---|
任務(wù) | 泛指各種事務(wù)上所必需執(zhí)行的流程性工作 |
循序或平行工作 | 工作的流動性是一個人接著一個人執(zhí)行挤巡,或同時由多個人分開執(zhí)行剩彬,或是上述兩類工作合并之后的混合型工作 |
多人 | 若是單人就可以完成的工作,則不能歸類為流程工作矿卑;凡是一件工作必須由兩個人或更多人來協(xié)力完成的工作才能稱之為流程工作喉恋; |
共同目的 | 多人參與的流程性工作,必須是以完成共同目的為前提母廷;如果一群人是分別針對不同的專案來執(zhí)行個別的工作轻黑,并不算構(gòu)成一個工作流程; |
9琴昆、 鏈接: 從程序員的角度來看為什么我們需要工作流
10氓鄙、 鏈接: 工作流簡介及其6種常用的工作流引擎
J2EE常用工作流比較
引用鏈接 | Shark(EnhydraShark) | Osworkflow opensymphony | JBPM(JBoss JBPM)****Java Business Process Management |
---|---|---|---|
工作流描述語言 | XPDL:WFMC制定的描述業(yè)務(wù)流程控制流的XML格式規(guī)范,格式復(fù)雜业舍,與具體語言無關(guān)抖拦,不靈活 | 1升酣、XML:流程定義格式簡單,使用靈活2态罪、基于有限狀態(tài)機模型 | 1噩茄、JPdl:JBoss jBPM Processdefinition language,一個商務(wù)流程被看作是一個UML狀態(tài)圖复颈。2绩聘、基于UML的狀態(tài)圖和活動圖來定義流程,已加入JBOSS大家庭耗啦,市場前景看好凿菩。 |
是否開源,開源協(xié)議 | 一個可擴展的工作流引擎框架≈慕玻現(xiàn)在不再開源衅谷,用于商業(yè)用途 | 開源的嵌入式工作流引擎 ,它的使用遵循 Apache License | 一種基于J2EE的輕量級工作流管理系統(tǒng)舒帮,它的使用遵循 Apache License |
相關(guān)開源項目 | Jawe | Osworkflow for .net | |
支持是否全面 | 流程定制工具JAWE | 1会喝、帶有一個簡陋的流程定制工具陡叠,但十分簡陋且常有錯誤 2玩郊、需要專業(yè)技術(shù)用戶使用 | 1、Jbpm3的圖形化流程定義嵌入到j(luò)bosseclipse IDE2枉阵、流程定制方式更接近用戶的理解 |
拓展性 | 體系和功能最為復(fù)雜译红,秉承“模塊化”的思想,比較容易擴展 | 有良好的擴展性兴溜,絕對的靈活(同時也增加了開發(fā)者的工作量侦厚,需要自己寫一些必要的函數(shù)) | 最適宜擴展(Jbpm的過程模式支持是比較固定的,但是其對任務(wù)的中action擴展是很的靈活)最適宜被商業(yè)化應(yīng)用 |
持久化 | Shark的持久層采用DODS來實現(xiàn) | 1拙徽、它提供的持久化API:EJB,Hibernate,JDBC等 2刨沦、Osworkflow 可以與Spring集成。 | 利用hibernate持久化 |
小結(jié) | Shark是體系和功能最為復(fù)雜的代表膘怕。它是一款遵循WfMC的XPDL標(biāo)準(zhǔn)開源工作流引擎,并且同時遵循OMG組織的WorkflowManagement Facility規(guī)范来破。XPDL的兩個最重要的概念是Process和Activity徘禁。XPDL中的Activity是基于UML1.x中的活動圖的概念娘荡∷模活動圖天生的適于工作流程建模央拖,它相對于狀態(tài)圖的一個最大的優(yōu)點是容易做并發(fā)線程的分叉控制,這些并發(fā)線程可以同時執(zhí)行也可以順序執(zhí)行遏餐;它還有一個優(yōu)點是有泳道的概念失都,可以控制工作流引擎中的任務(wù)的產(chǎn)生幸冻。 在所有開源工作流引擎中洽损,Shark的體系最為完備和復(fù)雜碑定。其一直秉承著“模塊化”的思想,所以比較容易擴展漫试。但是自從被Together公司收購后,Shark的商業(yè)化色彩已經(jīng)越來越濃秘车,改稱為Together Workflow Server,并僅以Community Edition的形式提供了部分開源代碼供參考眯亦。 | OSWorkflow是最輕量型的代表妻率,也是一款非常靈活和低級別定位的工作流引擎的實現(xiàn)框架。低級別定位的意思是說,它不是定位在解決流程模型對象和運轉(zhuǎn)場景孤里,而是提供一套可維護調(diào)度的機制伏伯,供開發(fā)人員自主擴展捌袜。這個維護流程調(diào)度機制OSWorkflow選擇的是基于行為(Action)的FSM理論,所以O(shè)SWorkflow更像是一個復(fù)雜而靈活的有限狀態(tài)調(diào)度機虏等。 Osworkflow有個重要概念是State,State是由step和status聯(lián)合表達的霍衫,一個State就是一個step中的某個status候引;而state的轉(zhuǎn)換由action來驅(qū)動慕淡,類似狀態(tài)圖中的event,因為一個event對應(yīng)一個action OSWorkflow在國內(nèi)項目應(yīng)用得較多峰髓,很多國內(nèi)的簡易審批流程項目都是基于其引擎二次開發(fā)而來。這主要是由于OSWorkflow是基于Action驅(qū)動的徐紧,而國內(nèi)的客戶也很容易接受這樣的操作習(xí)慣。但OSWorkflow所依賴的FSM模型對于分支侮腹、聚合嘲碧、子流程的支持度很低,這一點在實施過程中需要注意父阻。 | Jbpm結(jié)合應(yīng)用了狀態(tài)圖+活動圖+PetriNet的知識愈涩,而且這里的活動圖還是UML2.0版的望抽。UML2.0的活動圖中,節(jié)點不叫活動(Activity)而叫動作(action)履婉,活動成了一個高層次的概念煤篙,它包含一個動作序列。一個活動圖展現(xiàn)一系列的動作毁腿,這些動作組成了活動辑奈。Jbpm把action也改名了,稱為state已烤。Jbpm使用的狀態(tài)圖的概念有transition/event等身害。Jbpm來內(nèi)部實現(xiàn)中還采用了PetriNet的概念,如token,signal等草戈,jBpm對Token的應(yīng)用很有特色塌鸯,巧妙地利用Parent-Child Token的機制處理分支、父子流程等復(fù)雜應(yīng)用場景唐片。 jBpm是最適合擴展的代表丙猬,是在所有開源引擎中最適宜被商業(yè)化應(yīng)用的一款。首先其流程建模模型是基于Activity Diagram(活動圖)的费韭,并在引擎構(gòu)建上融入了FSM和PetriNet思想茧球,所以其內(nèi)核和根基比較牢固扎實。其次星持,自從被JBoss收購后抢埋,其3.x系列的結(jié)構(gòu)更加趨于微內(nèi)核,Plug-in思想也更加深入督暂。其同時還提供了對BPEL擴展揪垄,存儲支持JBossHibernate實現(xiàn),集成了JBoss seam逻翁,規(guī)則引擎準(zhǔn)備采用JBossrules饥努,并準(zhǔn)備集成JBoss Messaging。這樣八回,不論從內(nèi)核和外圍應(yīng)用酷愧,jBpm都具有了強勁的動力。 |
用OSWorkFlow和JBPM開發(fā)工作流異同
引用鏈接 | JPBM | OSWorkFlow |
編寫流程描述文件方式 | BPM是通過圖形化的編輯工具(JBPM自帶的Eclipse插件)來編寫業(yè)務(wù)流程如開始狀態(tài)缠诅,結(jié)束狀態(tài)溶浴,以及狀態(tài)之間的轉(zhuǎn)換,之后會自動生成XML文件管引,但具體每一步相關(guān)的細(xì)節(jié)操作還是要手工配置(如該節(jié)點是屬于什么類型節(jié)點士败,相關(guān)的函數(shù),要不要較驗)汉匙。 | OSWorkFlow則要通過手工寫XML文件來定義流程文件拱烁,而且它涉及的標(biāo)簽元素比較多生蚁,其用戶手冊上也建議實施人員不要去修改流程,否則流程很容易破壞戏自。 |
工作流信息保存方式 | JBPM是將流程信息直接保存到數(shù)據(jù)庫邦投,可以用任何方式對數(shù)據(jù)庫的操作,這樣就要引入保存工作流信息的相關(guān)表擅笔。 | OSWorkFlow是既可以保存在XML文件里志衣,也可以保存在數(shù)據(jù)庫中,保存在數(shù)據(jù)庫中時需要配置propertySet.xml文件猛们,比較復(fù)雜念脯,而且它不是完全支持hibernate(如引入osuser來作權(quán)限分析時),此時要自定義操作數(shù)據(jù)庫的方式弯淘。 |
與系統(tǒng)集成 | JBPM集成比較容易绿店,加入Spring支持包spring-modules-jbpm31.jar,該包加入了Spring對JBPM的包裝,所有的集成都是在此包基礎(chǔ)之上庐橙。之后還要配置sessionFactoryForJbpm ,jbpmConfiguration,jbpmTemplate, jbpmDao假勿。 | OSWorkFlow跟Spring集成須要如下所需組件: 1)SpringHibernateWorkflowStore,讓工作流程實例(如果需要的話)分享當(dāng)前事務(wù)态鳖。 2) SpringTypeResolver转培,允許 OSWorkflow 從 Spring ApplicationContext中獲得業(yè)務(wù)邏輯組件(conditions, functions等等)。 3)SpringConfiguration浆竭, 這是一個 Workflow Configuration 接口的實現(xiàn)類浸须, 它包含指向 store和 factory的引用,這樣可以在 spring 中注射或者連接邦泄。 4) SpringWorkflowFactory删窒,這是一個 XMLWorkflowFactory 封裝包,它可以允許從容器中注入 configuration虎韵,從而不再從其它的 XML 配置文件中讀取它們易稠。 如果OSWorkFlow引入osuser.xml來設(shè)置權(quán)限,則不支持Hibernate3包蓝,因為osuser是比較獨立的模塊,目前還沒有支持hibernate3企量,所以跟Spring集成時要修改配置文件applicationContext-hibernate3.xml |
重點難點 | JPDL語言的學(xué)習(xí)测萎,主要是用來編寫流程文件;理解3個接口:動作處理接口(提供影響流程執(zhí)行的方法届巩,在event和action元素中被回調(diào))硅瞧,判定處理接口(用在decision判定節(jié)點中,提供方法來判定節(jié)點的轉(zhuǎn)向)恕汇,委派處理接口(用在task的委派子元素assignment中腕唧,用來指定將任務(wù)分配給指定的人員或角色)或辖。 | 工作流文件定義的元素,主要用來編寫工作流懈贺;OSWorkFlow.xml及propertySet.xml文件的配置描验;InputMap接口争舞、Workflow 接口及WorkflowDescriptor接口。 |
開發(fā)步驟 | 通過圖形編輯工具編寫業(yè)務(wù)流程――>生成xml流程文件――>修改流程文件(判斷節(jié)點是任務(wù)節(jié)點耳鸯、普通節(jié)點還是判定節(jié)點,之后作相應(yīng)修改)――>導(dǎo)入保存流程信息的數(shù)據(jù)庫表――>部署流程定義文件(將流程文件中的內(nèi)容放到數(shù)據(jù)庫中)――>創(chuàng)建流程實例――>調(diào)用JBPM提供的signal方法執(zhí)行流程流轉(zhuǎn) | 手工編寫工作流文件——>配置OSWorkflow.xml――>配置WorkStore——>配置propertySet.xml,osUser.xml文件(如果需要用戶權(quán)限)――>調(diào)用AbatractWorkflow類加載OSWorkflow.xml(它會自動加載工作流文件及數(shù)據(jù)庫配置文件)――>調(diào)用WorkFlow接口方法(initial()方法,transitionWorkflow()方法,doAction()方法) |
流轉(zhuǎn)方法 | 先確定節(jié)點是什么節(jié)點膀曾,如果是普通的Node節(jié)點县爬,則是流程執(zhí)行到此節(jié)點不會中斷,繼續(xù)執(zhí)行添谊;如果是state節(jié)點财喳,則流程執(zhí)行到此節(jié)點會中斷,直到系統(tǒng)外的參與者發(fā)會命令才能繼續(xù)執(zhí)行斩狱,即調(diào)用signal()或end()方法纲缓;如果節(jié)點是Task-node,則會根據(jù)task任務(wù)列表的任務(wù)有沒全部執(zhí)行完來決定流轉(zhuǎn)喊废。 | 一個工作流包含多個步驟祝高。每一個步驟都有一個當(dāng)前狀態(tài)(例如, Queued, Underway, or Finished)。每一個步驟中都有一個或者多個動作可以被執(zhí)行污筷。每一個動作都可以設(shè)置執(zhí)行條件(condition)工闺,也可以設(shè)置執(zhí)行函數(shù)(pre-function or post-function)。動作產(chǎn)生結(jié)果(result)瓣蛀,導(dǎo)致工作流的狀態(tài)和當(dāng)前步驟發(fā)生改變 |
流程定義文件主要元素 | 一個JBPM的流程定義XML文件中包含一個< process-definition>元素陆蟆,而一個< process-definition>元素又包含零個或一個< description>元素,零個或多個的< swimlane>元素惋增,一個< start-state>元素叠殷,零個或多個的< state>元素或< decision>元素或< fork>元素或< join>元素,以及零個或多個的< action>元素诈皿,零個或多個<task-node>和<node>元素林束,一個< end-state>元素等等。此外稽亏,< process definition>元素有一個標(biāo)示符壶冒,以“name”屬性來表示,這個屬性必須存在截歉,用來表示該流程的名稱胖腾。 | 步驟(step)、條件(conditions)、循環(huán)(loops)咸作、分支(spilts)锨阿、合并(joins)、角色(roles)记罚、函數(shù)(function) |
其他 | JBPM的Scheduler可以實現(xiàn)在JBPM流程中定時觸發(fā)某一動作墅诡。在流程中JPBM提供了timer節(jié)點供我們使用,通過這個節(jié)點我們可以實現(xiàn)節(jié)點動作的定時觸發(fā)毫胜。 |
深入了解jBPM5與Activiti之間的差異對比
引用鏈接 | Activiti | JBPM5 |
---|---|---|
相似之處 | 1书斜、都是BPMN2過程建模和執(zhí)行環(huán)境。2酵使、都是BPM系統(tǒng)(符合BPM規(guī)范)荐吉。3、都是開源項目-遵循ASL協(xié)議( Apache的 軟件許可)口渔。4样屠、都源自JBoss(Activiti5是jBPM4的衍生,jBPM5則基于Drools Flow)缺脉。 5痪欲、都很成熟,從無到有攻礼,雙方開始約始于2年半前业踢。 都有對人工任務(wù)的生命周期管理。 6礁扮、Activiti5和jBPM5唯一的區(qū)別是jBPM5基于WebService - HumanTask標(biāo)準(zhǔn)來描述人工任務(wù)和管理生命周期知举。 如有興趣了解這方面的標(biāo)準(zhǔn)及其優(yōu)點,可參閱WS - HT規(guī)范介紹 太伊。7雇锡、 都使用了不同風(fēng)格的 Oryx 流程編輯器對BPMN2建模。 jBPM5采用的是 Intalio 維護的開源項目分支僚焦。 Activiti5則使用了Signavio維護的分支锰提。 | |
數(shù)據(jù)庫持久層ORM | MyBatis3 | Hibernate3 |
持久化標(biāo)準(zhǔn) | 無 | JPA規(guī)范 |
事務(wù)管理 | MyBatis機制/Spring事務(wù)控制 | Bitronix,基于JTA事務(wù)管理 |
數(shù)據(jù)庫連接方式 | Jdbc/DataSource | Jdbc/DataSource |
支持?jǐn)?shù)據(jù)庫 | Oracle芳悲、SQL Server立肘、MySQL等多數(shù)數(shù)據(jù)庫 | Oracle、SQL Server芭概、MySQL等多數(shù)數(shù)據(jù)庫 |
設(shè)計模式 | Command模式赛不、觀察者模式等 | |
內(nèi)部服務(wù)通訊 | Service間通過API調(diào)用 | 基于Apache Mina異步通訊 |
集成接口 | SOAP、Mule罢洲、RESTful | 消息通訊 |
支持的流程格式 | BPMN2、xPDL、jPDL等 | 目前僅只支持BPMN2 xml |
引擎核心 | PVM(流程虛擬機) | Drools |
技術(shù)前身 | jBPM3惹苗、jBPM4 | Drools Flow |
所屬公司 | Alfresco | jBoss.org |
集成 | Activiti5使用Spring進行引擎配置以及各個Bean的管理殿较,綜合使用IoC和AOP技術(shù),使用CXF作為Web Services實現(xiàn)的基礎(chǔ)桩蓉,使用MyBatis進行底層數(shù)據(jù)庫ORM的管理淋纲,預(yù)先提供Bundle化包能較容易的與OSGi進行集成,通過與Mule ESB的集成和對外部服務(wù)(Web Service院究、RESTful等)的接口可以構(gòu)建全面的SOA應(yīng)用洽瞬; | jBPM5使用jBoss.org社區(qū)的大多數(shù)組件,以Drools Flow為核心組件作為流程引擎的核心構(gòu)成业汰,以Hibernate作為數(shù)據(jù)持久化ORM實現(xiàn)伙窃,采用基于JPA/JTA的可插拔的持久化和事務(wù)控制規(guī)范,使用Guvnor作為流程管理倉庫样漆,能夠與Seam为障、Spring、OSGi等集成放祟。 |
優(yōu)劣對比 | 從技術(shù)組成來看鳍怨,Activiti最大的優(yōu)勢是采用了PVM(流程虛擬機),支持除了BPMN2.0規(guī)范之外的流程格式跪妥,與外部服務(wù)有良好的集成能力鞋喇,延續(xù)了jBPM3、jBPM4良好的社區(qū)支持眉撵,服務(wù)接口清晰侦香,鏈?zhǔn)紸PI更為優(yōu)雅;Activiti上手比較快执桌,界面也比較簡潔鄙皇、直觀 劣勢是持久化層沒有遵循JPA規(guī)范。 | jBPM最大的優(yōu)勢是采用了Apache Mina異步通信技術(shù)仰挣,采用JPA/JTA持久化方面的標(biāo)準(zhǔn)伴逸,以功能齊全的Guvnor作為流程倉庫,有RedHat(jBoss.org被紅帽收購)的專業(yè)化支持膘壶; 但其劣勢也很明顯错蝴,對自身技術(shù)依賴過緊且目前僅支持BPMN2。 |