工作流引擎activiti和jbpm哪個比較好

在常用的ERP系統、OA系統的開發中,工作流引擎是一個必不可少的工具。之前在選擇工作流引擎時曾經在activiti和jbpm之間有過比較,當時做出的決定是使用jbpm,但實際開發過程中發現這個選擇是不合適的。目前我們改爲選擇Activiti作爲工作流模塊的引擎,理由如下:

1、Activiti擁有更簡潔健壯的接口

JBPM自從版本五後,便重啓爐竈,完全拋棄了JBMP4的代碼基礎,重新基於drools進行了實現。JBPM5,JBPM6似乎缺少一個合格的系統架構師,其接口設計匪夷所思,基本上是按照drools的接口再提供了一套JBPM接口,同名的接口,實現類不斷重複出現,代碼體系十分混亂。

一個典型的例子,同樣是查詢待辦事項,在JBPM中接口如下:


List<TaskSummary> getTasksAssignedAsBusinessAdministrator(String userId, String language);

List<TaskSummary> getTasksAssignedAsExcludedOwner(String userId, String language);

List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, String language);

@Deprecated

List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language);

@Deprecated

List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language, int firstResult, int maxResult);

List<TaskSummary> getTasksAssignedAsRecipient(String userId, String language);

List<TaskSummary> getTasksAssignedAsTaskInitiator(String userId, String language);

List<TaskSummary> getTasksAssignedAsTaskStakeholder(String userId, String language);

List<TaskSummary> getTasksOwned(String userId, String language);

List<TaskSummary> getTasksOwned(String userId, List<Status> status, String language);

上述接口設計者顯然沒有考慮接口的修改擴展需要,將各種複雜的查詢通過一個又一個的方法提供出來,這將導致今後增加一種查詢過濾就必須增加一個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<String> 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<U> list();

List<U> listPage(int firstResult, int maxResults);

}

同樣是查詢待辦事項,Activiti中提供TaskQuery接口,可以設置各種查詢過濾,排序方式,最終通過list方法執行查詢,相比jbpm,它還提供了分頁查詢功能,雙方高下立判。

2、Activiti支持啓動引擎後隨時熱部署

JBPM存在一個軟肋,一個RuntimeService只能在啓動的時候指定bpmn資源,一旦啓動後便不再能夠去更新或者增加bpmn了,這會導致我們系統集成的困難,因爲我們自然希望整個系統只有一個工作流引擎實例運行。Activiti則提供了Deploy機制,將bpmn資源的熱部署,熱更新都做了很好的支持

3、Activiti擁有更友好易用的Eclipse編輯插件和在線插件

從下圖就可以看到Activiti在流程編輯上的用心,以及JBPM在流程編輯器上的漫不用心:

4、Activiti依賴更少的jar包

Activiti依賴的第三方jar包較少,主要就是mybatics,而JBPM則依賴了一大堆的jar,從drools到繁雜的hibernate,再到自身拆分的零零散散的jar包,讓人不由覺得它是一個龐大的怪物。

5、Activiti擁有更友好的用戶體驗

雖然JBPM和activiti都是使用bpmn格式作爲流程定義語言,但二者都相應地利用了bpmn格式的規範擴展了一些自定義的功能,根據這些擴展它們都提供了自己的綁定表單的方式。JBPM核心引擎完全沒有關於表單的任何抽象,它的工作機制是通過全局常量,流程變量,任務變量,這些概念十分技術化。

相比之下Activiti則更貼近實際的應用場景,它將爲開始節點,以及人工任務提供了表單設置,用戶可以設置字段名稱,字段類型。通過Activiti的平臺可以根據這些設置去生成表單,但如果不使用其平臺只使用引擎的話,也支持通過它來表達與第三方表單的關係。這些表單設置的元數據信息也可以通過接口去獲取。

總結:

JBPM5,JBPM6使用drools規則引擎來實現工作流引擎聽起來是一個很酷的概念,但JBPM開發團隊顯然沒有很好地去掌控好整個架構的變化。因此選擇activiti作爲工作流引擎至少在可見的幾年間都是正道,今後需要實現規則庫時,再單獨引入drools工具包,相信drools會是一個比JBPM靠譜的工具。

工作流引擎activiti和jbpm哪個比較好

如果JAVA底子差一點的話可以用XJR快速開發框架,採用主流的Activiti工作流引擎,遵循bpmn規範,可實現XML、Json一鍵導入導出,以及添加了人員動態選擇、便捷式會籤設置、便捷式任務委託設置、添加自定義表單、自定義節點按鈕、動態變量選擇(包括會籤變量、按鈕變量、表單變量)以及各節點屬性優化,遵循以使用者爲中心的優化原則,將整個流程的操作變得簡單、快捷,實現0基礎短時間可自由編輯流程模板。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章