【升級篇】JBPM4.4過渡到Activiti
簡單介紹一下Activiti背景
Activiti的出現:
Activiti的創始人Tom Baeyens是JBPM的創始人,由於與合作伙伴在JBPM的未來架構上產生意見分歧,Tom Baeyens在2010年離開了JBoss並加入Alfresco公司。Tom Baeyens的離開使得JBPM5完全放棄了JBPM4的架構,基於Drools Flow重新開發。而在2010年的5月,Tom Baeyens釋出了第一個Activiti版本(5.0alphal),由此看來,Activiti更像是JBPM4的延續,也許是為了讓其看起來更像JBPM4的延續,Activiti團隊直接將Activiti的第一個版本定義為
選擇Activiti還是JBPM
對於我們來說,JBPM5和Activiti同樣支援BPMN2.0規範,但是實際上JBPM5已經推翻了JBPM3和JBPM4的架構,使用了Drools Flow作為工作流架構,這對於原來使用JBPM3和JBPM4的使用者來說是非常鬱悶的一件事(從零開始重新學習JBPM5)。而Activiti更像是原來JBPM4的延續,因此對於原來使用JBPM3和JBPM4的使用者來說,推薦使用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.4與Hibernate4.3結合出現不相容問題。那麼hibernate3和hibernate4有什麼區別?
附: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>
總結
以上只是將JBPM與Activiti簡單進行對比,然後大家可以根據需要選擇,雖然是比較,但不一定要有勝負,只有適合自己的才是最好的,而且無論是JBPM5還是Activiti來說都瞭解不是很深的我們,也沒有太多的發言權,還需要在實踐中慢慢體會。
對於不相容的問題,也是這次我們專案將jbpm轉換為Activiti的主要原因,說到底我們還是要深入理解一下各個框架的原理,對於不相容問題,後續我們可以嘗試重寫方法實現。