Activity工作流引擎學習筆記(一)

工作流的概念

  工作流(Workflow),就是“業務過程的部分或整體在計算機應用環境下的自動化”,它主要解決的是“使在多個參與者之間按照某種預定義的規則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現”。

工作流管理系統(Workflow Management System, WfMS)是一個軟件系統,它完成工作量的定義和管理,並按照在系統中預先定義好的工作流規則進行工作流實例的執行。工作流管理系統不是企業的業務系統,而是爲企業的業務系統的運行提供了一個軟件的支撐環境。

  工作流管理聯盟(WfMC,Workflow Management Coalition)給出的關於工作流管理系統的定義是:工作流管理系統是一個軟件系統,它通過執行經過計算的流程定義去支持一批專門設定的業務流程。工作流管理系統被用來定義、管理、和執行工作流程。

工作流管理系統的目標:管理工作的流程以確保工作在正確的時間被期望的人員所執行——在自動化進行的業務過程中插入人工的執行和干預。

  好比我最近參與了一個項目,有一個合同評審的需求,得級級審批,得用到工作流引擎,所以特來學習。

Acticity介紹

  Activiti5是由Alfresco軟件在2010年5月17日發佈的業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。Activiti基於Apache許可的開源BPM平臺,創始人Tom Baeyens是JBoss jBPM的項目架構師,它特色是提供了eclipse插件,開發人員可以通過插件直接繪畫出業務流程圖。


工作流引擎

ProcessEngine對象,這是Activiti工作的核心。負責生成流程運行時的各種實例及數據、監控和管理流程的運行。

BPMN

業務流程建模與標註(Business Process Model and Notation,BPMN) ,描述流程的基本符號,包括這些圖元如何組合成一個業務流程圖(Business Process Diagram)

數據庫(先學後看)

Activiti數據庫支持:

Activiti的後臺是有數據庫的支持,所有的表都以ACT_開頭。 第二部分是表示表的用途的兩個字母標識。 用途也和服務的API對應。
ACT_RE_*: 'RE'表示repository。 這個前綴的表包含了流程定義和流程靜態資源 (圖片,規則,等等)。

ACT_RU_*: 'RU'表示runtime。 這些運行時的表,包含流程實例,任務,變量,異步任務,等運行中的數據。 Activiti只在流程實例執行過程中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表可以一直很小速度很快。

ACT_ID_*: 'ID'表示identity。 這些表包含身份信息,比如用戶,組等等。

ACT_HI_*: 'HI'表示history。 這些表包含歷史數據,比如歷史流程實例, 變量,任務等等。

ACT_GE_*: 通用數據, 用於不同場景下,如存放資源文件。

表結構操作:

資源庫流程規則表

1) act_re_deployment 部署信息表

2) act_re_model   流程設計模型部署表

3) act_re_procdef   流程定義數據表


運行時數據庫表

1) act_ru_execution 運行時流程執行實例表

2) act_ru_identitylink 運行時流程人員表,主要存儲任務節點與參與者的相關信息

3) act_ru_task 運行時任務節點表

4) act_ru_variable 運行時流程變量數據表

歷史數據庫表

1) act_hi_actinst 歷史節點表

2) act_hi_attachment 歷史附件表

3) act_hi_comment 歷史意見表

4) act_hi_identitylink 歷史流程人員表

5) act_hi_detail 歷史詳情表,提供歷史變量的查詢

6) act_hi_procinst 歷史流程實例表

7) act_hi_taskinst 歷史任務實例表

8) act_hi_varinst 歷史變量表


組織機構表

1) act_id_group 用戶組信息表

2) act_id_info 用戶擴展信息表

3) act_id_membership 用戶與用戶組對應信息表

4) act_id_user 用戶信息表

這四張表很常見,基本的組織機構管理,關於用戶認證方面建議還是自己開發一套,組件自帶的功能太簡單,使用中有很多需求難以滿足


通用數據表

1) act_ge_bytearray 二進制數據表

2) act_ge_property 屬性數據表存儲整個流程引擎級別的數據,初始化表結構時,會默認插入三條記錄


logging.properties(日誌處理)

日誌的配置文件,Activiti操作數據庫的時候,整合的日誌文件


準備環境

activiti5 軟件環境

1) JDK1.6或者更高版本

2) 支持的數據庫有:h2, mysql, oracle, postgres, mssql, db2等。

3) 支持activiti5運行的jar包

4) 開發環境爲Eclipse3.7或者以上版本,myeclipse爲8.6版本

相關資源下載

1)JDK可以到sun的官網下載

http://www.oracle.com/technetwork/java/javase/downloads/index.html

2)數據庫,例如:mysql可以在官網上下載。

http://www.mysql.com

3)activiti也可以到Activiti官方網站下載得到。

http://activiti.org/download.html

4)Eclipse3.7或者MyEclipse8.6也可以到相應的網站上獲得下載。


安裝流程設計器(eclipse插件)

ps:強烈建議用eclipse安裝,之前我在我的myeclipse2014上安裝幾次都失敗了,myeclipse都打不開。建議eclipse。我測的是myeclipse neon

安裝方式一

有網絡的情況下,安裝流程設計器步驟如下:

1) 打開 Help -> Install New Software. 在如下面板中:


2) 在如下Install界面板中,點擊Add按鈕


配置新裝插件的地址和名稱

3) 然後填入下列字段

Name: Activiti BPMN 2.0 designer

Location: http://activiti.org/designer/update/

4) 回到Install界面,在面板正中列表中把所有展示出來的項目都勾上:


5) 點擊複選框

在Detail部分記得選中 "Contact all updates sites.." , 因爲它會檢查所有當前安裝所需要的插件並可以被Eclipse下載.

 

6) 安裝完以後,點擊新建工程new->Other…打開面板,如果看到下圖內容:




說明安裝成功了!


安裝方式二

沒有網絡的情況下,安裝流程設計器步驟如下:

1) 解壓

2) 把壓縮包中的內容放入eclipse根目錄的dropins文件夾下

3) 重啓eclipse,點擊新建工程new->Other…打開面板,如果看到下圖內容:


也是安裝成功了(第二種遇到不少的問題,還是建議大家在有網的環境下,使用第一種方式進行安裝)

對流程設計器的使用說明

打開菜單Windows->Preferences->Activiti->Save下流程流程圖片的生成方式:



雖然流程引擎在單獨部署bpmn文件時會自動生成圖片,但在實際開發過程中,自動生成的圖片會導致和BPMN中的座標有出入,在實際項目中展示流程當前位置圖會有問題。

所在完成以上配置後,會由我們自己來管理流程圖片。在發佈流程時把流程規則文件和流程圖片一起上傳就行了。


準備Activiti5開發環境

添加Activiti5jar

activiti-5.13->wars目錄下是一些示例項目,解壓activiti-rest項目,導入activiti-rest目錄中WEB-INF\lib下所有包(很多)。添加到classpath中。

由於我們使用的是Mysql數據庫,Mysql數據庫的鏈接驅動Activiti官方包中並沒有提供,需要我們自己導入。手動導入mysql-connector-java.jar,添加到classpath下。


初始化數據庫

/**
	 * 使用代碼創建工作流需要的23張表
	 */
	@Test
	public void CreateTable(){
		ProcessEngineConfiguration processEngineConfiguration
				= ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
		processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activity_study?useUnicode=true&characterEncoding=utf-8");
		processEngineConfiguration.setJdbcUsername("root");
		processEngineConfiguration.setJdbcPassword("root");
		/**
		 *  public static final String DB_SCHEMA_UPDATE_FALSE = "false"; 不能自動創建表 ,需要表存在
		 *  public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先刪除表再創建表
		 *   public static final String DB_SCHEMA_UPDATE_TRUE = "true";
		 */
		processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
		//工作流的核心對象,ProcessEnginee對象
		ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
		System.out.println("processEngine:"+processEngine);
	}

Activiti中,在創建核心的流程引擎對象時會自動建表。如果程序正常執行,mysql會自動建庫,然後創建23張表。



添加並制定配置文件

Actiiti5中定製流程必定會操作到數據庫,如果都像上面那樣寫一大段代碼會非常麻煩,所以我們可以把數據庫連接配置寫入配置文件。

Activiti5的官方示例中並沒有現成的配置文件,所以先得找到activiti-rest\WEB-INF\classes下有:

 


activiti-context.xml

一個類似spring結構的配置文件,清空內容後改名爲activiti.cfg.xml,用來做流程引擎的相關配置。

按照上面代碼配置ProcessEngineConfiguration對象,主要定義數據庫的連接配置建表策略,配置文件代碼如下:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
	<!-- 
		ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		//連接數據庫的配置
		processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
		processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activity_study?useUnicode=true&characterEncoding=utf8");
		processEngineConfiguration.setJdbcUsername("root");
		processEngineConfiguration.setJdbcPassword("root");
		
		/**
		 	public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自動創建表,需要表存在
  			public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先刪除表再創建表
  			public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自動創建表
		 */
		processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
	 -->
	<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
		<!-- 連接數據的配置 -->
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activity_study?useUnicode=true&characterEncoding=utf8"></property>
		<property name="jdbcUsername" value="root"></property>
		<property name="jdbcPassword" value="root"></property>
		<!-- 沒有表創建表 -->
		<property name="databaseSchemaUpdate" value="true"></property>
	</bean>

</beans>

JAVA代碼如下:

/**
	 * 使用配置文件創建工作流需要的23張表
	 */
	@Test
	public void CreateTable_2(){
		ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
		ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
		System.out.println("processEngine:"+processEngine);
	}

log4j.properties 日誌配置文件

把兩個文件放入resource目錄下即可。



到這裏一個Acitity的項目環境已基本搭建完畢~下篇博客我們正式開始學習。

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