1. 程式人生 > >Actviti工作流入門知識 DAY-01

Actviti工作流入門知識 DAY-01

一、什麼是Activiti?

Activiti是工作流框架,是解決企業流程管理的解決方案。那流程是什麼呢?我們先來看一個請假例子。
在這裡插入圖片描述也就是說,這種問題就是一種流式的控制管理,因為裡面沒有包含著回饋,相當於只是一個方向。其實,到這裡,就可以得出Activiti的官方定義:

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

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

三、Activiti的配置檔案

activiti.cfg.xml

Activiti核心配置檔案,配置流程引擎建立工具的基本引數和資料庫連線池引數。

<beans xmlns="http://www.springframework.org/schema/beans"
	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">
	<!-- 建立ProcessEngineConfiguration物件的bean -->
	<bean id="processEngineConfiguration"
		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

		<!-- 配置物件的配置資訊 :連線資料庫,使用MyBatis連線池 -->
		<property name="jdbcUrl"
			value="jdbc:mysql:///activiti?createDatabaseIfNotExist=true" />
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUsername" value="root" />
		<property name="jdbcPassword" value="root" />
		<!--
		 databaseSchemaUpdate: 設定流程引擎啟動和關閉時如何處理資料庫表。 
		false(預設):檢查資料庫表的版本和依賴庫的版本, 如果版本不匹配就丟擲異常。
		true: 構建流程引擎時,執行檢查,如果需要就執行更新。 如果表不存在,就建立。
		create-drop: 構建流程引擎時建立資料庫表,關閉流程引擎時刪除這些表。
		 -->
		<property name="databaseSchemaUpdate" value="true" />
	</bean>
</beans>

四、核心API
4.1ProcessEngine(核心–服務大管家)

直接看ProcessEngine原始碼.面向服務程式設計。

1)在Activiti中最核心的類,其他的類都是由他而來。
2)產生方式:

ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

在前面看到了多種建立ProcessEngine(流程引擎)的方式,而這裡要簡化很多,呼叫ProcessEngines的getDefaultProceeEngine方法時會自動載入classpath下名為activiti.cfg.xml檔案。

3)可以產生RepositoryService

RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

4)可以產生RuntimeService

RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();

5)可以產生TaskService

TaskService taskService = defaultProcessEngine.getTaskService();

五、Activiti流程部署的方法
部署流程定義也可以認為是增加流程定義。

/**
	 * ①:獲取核心物件ProcessEngine
	 * ②:分析需求,通過核心物件獲取對應的"服務例項"
	 * ③:使用服務的方法做事情
	 * 三張表:
	 *   1)act_re_deployment 	部署資訊表:部署一次就有一條記錄
         2)act_re_procdef  	流程定義資料表 :部署一次,就產生一個流程,有一個流程定義資料
		 3)act_ge_bytearray		二進位制資料表:一個流程定義會有有兩個2機制資料:.bpmn和png的資料
	//部署一個流程定義
	 */
	@Test
	public void deployTest() {
	
		// 1、獲取核心物件
		ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
		// 2、分析需求,通過核心物件獲取對應的“服務例項”
		RepositoryService repositoryService = processEngine.getRepositoryService();
		//通過倉庫服務建立一個部署builder
		DeploymentBuilder builder = repositoryService.createDeployment();
		//新增部署的資原始檔:必須新增兩個檔案,png檔案可以不新增,自動新增,但是自動新增後在資料庫看到是亂碼的、在classpath下按照名字載入
		builder.addClasspathResource("MyProcess.bpmn").addClasspathResource("MyProcess.png");
		// 3、使用服務的方法做事情
		//部署
		builder.deploy();
	}

說明:
1)首先獲得預設的流程引擎,在建立時會自動載入classpath下activiti.cfg.xml

2)通過流程引擎獲取了一個RepositoryService物件->倉庫服務物件

3由倉庫的服務物件產生一個部署物件配置物件,用來封裝部署環境的相關配置。

4)可以看出這是一個鏈式程式設計,在部署配置物件中設定顯示名,上傳規則檔案相對classpath的地址。

5)部署,也是往資料庫中儲存流程定義的過程。

6)這一步在資料庫中將操作三張表:
a)act_re_deployment
存放流程定義的顯示名和部署時間,每部署一次增加一條記錄
b)act_re_procdef
存放流程定義的屬性資訊,部署每個新的流程定義都會在這張表中增加一條記錄。
c)act_ge_bytearray

儲存流程定義相關的部署資訊。即流程定義文件的存放地。每部署一次就會增加兩條記錄,一條是關於bpmn規則檔案的,一條是圖片的(如果部署時只指定了bpmn一個檔案,activiti會在部署時解析bpmn檔案內容自動生成流程圖)。兩個檔案不是很大,都是以二進位制形式儲存在資料庫中。