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檔案內容自動生成流程圖)。兩個檔案不是很大,都是以二進位制形式儲存在資料庫中。