java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?
原標(biāo)題:activiti和jbpm工作流引擎哪個(gè)比較好?
在常用的ERP系統(tǒng)、OA系統(tǒng)的開發(fā)中,工作流引擎是一個(gè)必不可少的工具。之前在選擇工作流引擎時(shí)曾經(jīng)在activiti和jbpm之間有過比較,當(dāng)時(shí)做出的決定是使用jbpm,但實(shí)際開發(fā)過程中發(fā)現(xiàn)這個(gè)選擇是不合適的。目前我們改為選擇Activiti作為工作流模塊的引擎,理由如下:
1、Activiti擁有更簡(jiǎn)潔健壯的接口
JBPM自從版本五后,便重啟爐灶,完全拋棄了JBMP4的代碼基礎(chǔ),重新基于drools進(jìn)行了實(shí)現(xiàn)。JBPM5,JBPM6似乎缺少一個(gè)合格的系統(tǒng)架構(gòu)師,其接口設(shè)計(jì)匪夷所思,基本上是按照drools的接口再提供了一套JBPM接口,同名的接口,實(shí)現(xiàn)類不斷重復(fù)出現(xiàn),代碼體系十分混亂。
一個(gè)典型的例子,同樣是查詢待辦事項(xiàng),在JBPM中接口如下:
List getTasksAssignedAsBusinessAdministrator(String userId, String language);
List getTasksAssignedAsExcludedOwner(String userId, String language);
List getTasksAssignedAsPotentialOwner(String userId, String language);
@Deprecated
List getTasksAssignedAsPotentialOwner(String userId, List groupIds, String language);
@Deprecated
List getTasksAssignedAsPotentialOwner(String userId, List groupIds, String language, int firstResult, int maxResult);
List getTasksAssignedAsRecipient(String userId, String language);
List getTasksAssignedAsTaskInitiator(String userId, String language);
List getTasksAssignedAsTaskStakeholder(String userId, String language);
List getTasksOwned(String userId, String language);
List getTasksOwned(String userId, List status, String language);
上述接口設(shè)計(jì)者顯然沒有考慮接口的修改擴(kuò)展需要,將各種復(fù)雜的查詢通過一個(gè)又一個(gè)的方法提供出來,這將導(dǎo)致今后增加一種查詢過濾就必須增加一個(gè)getXXX方法,丑陋之至,再看看Activiti的接口:
TaskQuery taskId(String taskId);
TaskQuery taskName(String name);
TaskQuery taskNameLike(String nameLike);
TaskQuery taskDescription(String description);
TaskQuery taskDescriptionLike(String descriptionLike);
TaskQuery taskPriority(Integer priority);
TaskQuery taskMinPriority(Integer minPriority);
TaskQuery taskMaxPriority(Integer maxPriority);
TaskQuery taskAssignee(String assignee);
TaskQuery taskAssigneeLike(String assigneeLike);
TaskQuery taskOwner(String owner);
TaskQuery taskOwnerLike(String ownerLike);
TaskQuery taskUnassigned();
TaskQuery taskUnnassigned();
TaskQuery taskDelegationState(DelegationState delegationState);
TaskQuery taskCandidateUser(String candidateUser);
TaskQuery taskInvolvedUser(String involvedUser);
TaskQuery taskCandidateGroup(String candidateGroup);
TaskQuery taskCandidateGroupIn(List candidateGroups);
TaskQuery processInstanceId(String processInstanceId);
TaskQuery processInstanceBusinessKey(String processInstanceBusinessKey);
TaskQuery processInstanceBusinessKeyLike(String processInstanceBusinessKeyLike);
TaskQuery executionId(String executionId);
TaskQuery taskCreatedOn(Date createTime);
TaskQuery taskCreatedBefore(Date before);
TaskQuery taskCreatedAfter(Date after);
TaskQuery excludeSubtasks();
TaskQuery taskVariableValueGreaterThan(String name, Object value);
TaskQuery processDefinitionName(String processDefinitionName);
TaskQuery withoutDueDate();
TaskQuery suspended();
TaskQuery orderByTaskAssignee();
TaskQuery orderByProcessInstanceId();
TaskQuery orderByDueDate();
long count();
U singleResult();
List list();
List listPage(int firstResult, int maxResults);
}
同樣是查詢待辦事項(xiàng),Activiti中提供TaskQuery接口,可以設(shè)置各種查詢過濾,排序方式,最終通過list方法執(zhí)行查詢,相比jbpm,它還提供了分頁查詢功能,雙方高下立判。
2、Activiti支持啟動(dòng)引擎后隨時(shí)熱部署
JBPM存在一個(gè)軟肋,一個(gè)RuntimeService只能在啟動(dòng)的時(shí)候指定bpmn資源,一旦啟動(dòng)后便不再能夠去更新或者增加bpmn了,這會(huì)導(dǎo)致我們系統(tǒng)集成的困難,因?yàn)槲覀冏匀幌M麄€(gè)系統(tǒng)只有一個(gè)工作流引擎實(shí)例運(yùn)行。Activiti則提供了Deploy機(jī)制,將bpmn資源的熱部署,熱更新都做了很好的支持
3、Activiti擁有更友好易用的Eclipse編輯插件和在線插件
從下圖就可以看到Activiti在流程編輯上的用心,以及JBPM在流程編輯器上的漫不用心:
4、Activiti依賴更少的jar包
Activiti依賴的第三方j(luò)ar包較少,主要就是mybatics,而JBPM則依賴了一大堆的jar,從drools到繁雜的hibernate,再到自身拆分的零零散散的jar包,讓人不由覺得它是一個(gè)龐大的怪物。
5、Activiti擁有更友好的用戶體驗(yàn)
雖然JBPM和activiti都是使用bpmn格式作為流程定義語言,但二者都相應(yīng)地利用了bpmn格式的規(guī)范擴(kuò)展了一些自定義的功能,根據(jù)這些擴(kuò)展它們都提供了自己的綁定表單的方式。JBPM核心引擎完全沒有關(guān)于表單的任何抽象,它的工作機(jī)制是通過全局常量,流程變量,任務(wù)變量,這些概念十分技術(shù)化。
相比之下Activiti則更貼近實(shí)際的應(yīng)用場(chǎng)景,它將為開始節(jié)點(diǎn),以及人工任務(wù)提供了表單設(shè)置,用戶可以設(shè)置字段名稱,字段類型。通過Activiti的平臺(tái)可以根據(jù)這些設(shè)置去生成表單,但如果不使用其平臺(tái)只使用引擎的話,也支持通過它來表達(dá)與第三方表單的關(guān)系。這些表單設(shè)置的元數(shù)據(jù)信息也可以通過接口去獲取。
總結(jié):
JBPM5,JBPM6使用drools規(guī)則引擎來實(shí)現(xiàn)工作流引擎聽起來是一個(gè)很酷的概念,但JBPM開發(fā)團(tuán)隊(duì)顯然沒有很好地去掌控好整個(gè)架構(gòu)的變化。因此選擇activiti作為工作流引擎至少在可見的幾年間都是正道,今后需要實(shí)現(xiàn)規(guī)則庫時(shí),再單獨(dú)引入drools工具包,相信drools會(huì)是一個(gè)比JBPM靠譜的工具。
如果JAVA底子差一點(diǎn)的話可以用XJR快速開發(fā)框架,采用主流的Activiti工作流引擎,遵循bpmn規(guī)范,可實(shí)現(xiàn)XML、Json一鍵導(dǎo)入導(dǎo)出,以及添加了人員動(dòng)態(tài)選擇、便捷式會(huì)簽設(shè)置、便捷式任務(wù)委托設(shè)置、添加自定義表單、自定義節(jié)點(diǎn)按鈕、動(dòng)態(tài)變量選擇(包括會(huì)簽變量、按鈕變量、表單變量)以及各節(jié)點(diǎn)屬性優(yōu)化,遵循以使用者為中心的優(yōu)化原則,將整個(gè)流程的操作變得簡(jiǎn)單、快捷,實(shí)現(xiàn)0基礎(chǔ)短時(shí)間可自由編輯流程模板。返回搜狐,查看更多
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频教程-Xamarin技术讲座——初级
- 下一篇: 单应矩阵公式推导及计算