1. 程式人生 > >【升級篇】JBPM4.4過渡到Activiti

【升級篇】JBPM4.4過渡到Activiti

簡單介紹一下Activiti背景

Activiti的出現:

Activiti的創始人Tom BaeyensJBPM的創始人,由於與合作伙伴在JBPM的未來架構上產生意見分歧,Tom Baeyens2010年離開了JBoss並加入Alfresco公司。Tom Baeyens的離開使得JBPM5完全放棄了JBPM4的架構,基於Drools Flow重新開發。而在2010年的5月,Tom Baeyens釋出了第一個Activiti版本(5.0alphal),由此看來,Activiti更像是JBPM4的延續,也許是為了讓其看起來更像JBPM4的延續,Activiti團隊直接將Activiti的第一個版本定義為

5.0

選擇Activiti還是JBPM

對於我們來說,JBPM5Activiti同樣支援BPMN2.0規範,但是實際上JBPM5已經推翻了JBPM3JBPM4的架構,使用了Drools Flow作為工作流架構,這對於原來使用JBPM3JBPM4的使用者來說是非常鬱悶的一件事(從零開始重新學習JBPM5)。而Activiti更像是原來JBPM4的延續,因此對於原來使用JBPM3JBPM4的使用者來說,推薦使用Activiti。但是由於JBoss中有一些優秀的專案,JBPM5與這些專案進行整合具有先天的優勢,因為如何選擇還需要權衡。

Activiti5與jBPM5技術組成對比

序號

技術組成

Activiti

jBPM5

1

資料庫持久層ORM

MyBatis3

Hibernate3

2

持久化標準

JPA規範

3

事務管理

MyBatis機制/Spring事務控制

Bitronix,基於JTA事務管理

4

資料庫連線方式

Jdbc/DataSource

Jdbc/DataSource

5

支援資料庫

Oracle、SQL Server、MySQL等多數資料庫

Oracle、SQL Server、MySQL等多數資料庫

6

設計模式

Command模式、觀察者模式等

7

內部服務通訊

Service間通過API呼叫

基於Apache Mina非同步通訊

8

整合介面

SOAP、Mule、RESTful

訊息通訊

9

支援的流程格式

BPMN2、xPDL、jPDL等

目前僅只支援BPMN2 xml

10

引擎核心

PVM(流程虛擬機器)

Drools

11

技術前身

jBPM3、jBPM4

Drools Flow

12

所屬公司

Alfresco

jBoss.org

Activiti5使用Spring進行引擎配置以及各個Bean的管理,綜合使用IoC和AOP技術,使用CXF作為WebServices實現的基礎,使用MyBatis進行底層資料庫ORM的管理,預先提供Bundle化包能較容易的與OSGi進行整合,通過與MuleESB的整合和對外部服務(Web Service、RESTful等)的介面可以構建全面的SOA應用;

jBPM5使用jBoss.org社群的大多陣列件,以DroolsFlow為核心元件作為流程引擎的核心構成,以Hibernate作為資料持久化ORM實現,採用基於JPA/JTA的可插拔的持久化和事務控制規範,使用Guvnor作為流程管理倉庫,能夠與Seam、Spring、OSGi等整合。

需要指出的是Activiti5是在jBPM3、jBPM4的基礎上發展而來的,是原jBPM的延續,而jBPM5則與之前的jBPM3、jBPM4沒有太大關聯,且捨棄了備受推崇的PVM(流程虛擬機器)思想,轉而選擇jBoss自身產品DroolsFlow作為流程引擎的核心實現,工作流最為重要的“人機互動”任務(類似於審批活動)則由單獨的一塊“Human Task Service”附加到DroolsFlow上實現,任務的查詢、處理等行為通過Apache Mina非同步通訊機制完成。

優劣對比:

從技術組成來看,Activiti最大的優勢是採用了PVM(流程虛擬機器),支援除了BPMN2.0規範之外的流程格式,與外部服務有良好的整合能力,延續了jBPM3、jBPM4良好的社群支援,服務介面清晰,鏈式API更為優雅;劣勢是持久化層沒有遵循JPA規範。

jBPM最大的優勢是採用了ApacheMina非同步通訊技術,採用JPA/JTA持久化方面的標準,以功能齊全的Guvnor作為流程倉庫,有RedHat(jBoss.org被紅帽收購)的專業化支援;但其劣勢也很明顯,對自身技術依賴過緊且目前僅支援BPMN2。

再結合專案(hibernate4.3)來說為什麼從JBPM4.4轉變為使用Activiti

JBPM4.4Hibernate4.3結合出現不相容問題。那麼hibernate3hibernate4有什麼區別?

附:Hibernate3的配置:

<!-- 配置SessionFactory -->  
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"></property>  
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>  

    </bean> 

總結

以上只是將JBPMActiviti簡單進行對比,然後大家可以根據需要選擇,雖然是比較,但不一定要有勝負,只有適合自己的才是最好的,而且無論是JBPM5還是Activiti來說都瞭解不是很深的我們,也沒有太多的發言權,還需要在實踐中慢慢體會。

對於不相容的問題,也是這次我們專案將jbpm轉換為Activiti的主要原因,說到底我們還是要深入理解一下各個框架的原理,對於不相容問題,後續我們可以嘗試重寫方法實現。