Activiti學習筆記一

Activiti 開源工做流是也;java

必要的軟件mysql

JDK 6+spring

Eclipse
BPMN插件( Activiti Designer編輯器)的安裝sql

打開 Help -> Install New Software. 在以下面板中 , 點擊 Add 按鈕, 而後填入下列字段:數據庫

· Name: Activiti BPMN 2.0 designeroracle

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

clip_image002

Activiti 流程引擎的配置文件是名爲:activiti.cfg.xml,注意:這與Spring方式建立流程殷勤是同樣的編輯器

ProcessEngineConfigurationide

目前可使用的類:以下:
1. org.activiti.engine.impl.cfg.StandaloneProcessEngineConfigurationsqlserver

單獨運行的流程引擎。Activiti會本身處理事務。默認數據庫只在引擎啓動時檢測(若是Activiti的表或者表結構不正確就會拋出異常)

2.org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration

單元測試時的輔助類。Activiti會本身控制事務。 默認使用H2內存數據庫。數據庫表會在引擎啓動時建立,關閉時刪除。使用它時,不須要其餘配置(除非使用job執行器或郵件功能)。

3. org.activiti.spring.SpringProcessEngineConfiguration:

在Spring環境下使用流程引擎。

4. org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration:

單獨運行流程引擎,並使用JTA事務。

支持的數據庫:

Activiti數據庫類型

JDBC URL實例

備註

h2

jdbc:h2:tcp://localhost/activiti

默認配置的數據庫

mysql

jdbc:mysql://localhost:3306/activiti?autoReconnect=true

使用mysql-connector-java驅動測試

oracle

jdbc:oracle:thin:@localhost:1521:xe

 

postgres

jdbc:postgresql://localhost:5432/activiti

 

db2

jdbc:db2://localhost:50000/activiti

 

mssql

jdbc:sqlserver://localhost:1433/activiti

 

理解數據庫表的命名

Activiti的表都以ACT_開頭。第二部分是表示表的用途的兩個字母標識。用途也和服務的API對應。

1.ACT_RE_* :‘RE’表示Repository。這個前綴的表包含了流程定義和流程靜態資源(圖片,規則,等等)

2. ACT_RU_*:‘RU’表示runtime。這是運行時的表存儲着流程變量,用戶任務,變量,職責(job)等運行時的數據。Activiti只存儲實例執行期間的運行時數據,當流程實例結束時,將刪除這些記錄。這就保證了這些運行時的表小且快。

3.ACT_ID_*:‘ID’表示identity。這些表包含標識的信息,如用戶,用戶組,等;

4.ACT_HI_*:‘history’。就是這些表包含着歷史的相關數據,如結束的流程實例,變量,任務,等;

5.ACT_GE_*:普通數據,各類狀況都使用的數據;

數據庫表結構圖:

clip_image004

clip_image005

名詞解釋:

關鍵對象

Deployment:流程部署對象,部署一個流程是建立。

ProcessDefinitions:流程定義,部署 成功後自動建立。

ProcessInstances:流程實例,啓動流程是建立。

Task:任務,在Activiti中的Task僅值有角色參與的任務,即定義中的UserTask。

Execution:執行計劃,流程實例和流程執行中的全部節點都是Execution,如UserTask、ServiceTask等。

服務接口

clip_image007

clip_image009

ProcessEngine:流程引擎接口,提供流程管理和運做的全部接口。

RuntimeService:運行時服務接口,提供流程啓動服務,運行中流程查詢,運行變量設置和獲取。

TaskService:用戶任務接口(UserTask),提供運行時任務查詢、認領、完成、刪除及變量設置用戶管理等服務。

IdentityService:用戶和組管理接口。

ManagementService流程引擎管理接口。

HistoryService:流程處理查詢接口,包括執行中流程查詢和歷史流程查詢。

Activiti 的使用

流程定義:

流程圖以下:

clip_image011

流程定義以下:

<definitions id="definitions"

targetNamespace="http://activiti.org/bpmn20"

xmlns:activiti="http://activiti.org/bpmn"

xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">

<process id="financialReport" name="Monthly financial report reminder process">

<startEvent id="theStart" />

<sequenceFlow id='flow1' sourceRef='theStart' targetRef='writeReportT ask' />

<userT ask id="writeReportT ask" name="Write monthly financial report" >

<documentation>

Write monthly financial report for publication to shareholders.

</documentation>

<potentialOwner>

<resourceAssignmentExpression>

<formalExpression>accountancy</formalExpression>

</resourceAssignmentExpression>

</potentialOwner>

</userT ask>

<sequenceFlow id='flow2' sourceRef='writeReportT ask' targetRef='verifyReportT ask'/>

<userT ask id="verifyReportT ask" name="Verify monthly financial report" >

<documentation>

Verify monthly financial report composed by the accountancy department.

Thisfinancial report is going to be sent toall the company shareholders.

</documentation>

<potentialOwner>

<resourceAssignmentExpression>

<formalExpression>management</formalExpression>

</resourceAssignmentExpression>

</potentialOwner>

</userT ask>

<sequenceFlow id='flow3' sourceRef='verifyReportT ask' targetRef='theEnd'/>

<endEvent id="theEnd" />

</process>

</definitions>

配置文件

默認文件名稱:activiti.cfg.xml,放在 classpath 下。

內容以下:

<beansxmlns="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">

<bean id="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELA Y=1000"/>

<property name="jdbcDriver"value="org.h2.Driver"/>

<property name="jdbcUsername"value="sa" />

<property name="jdbcPassword"value=""/>

<property name="databaseSchemaUpdate"value="true"/>

<property name="jobExecutorActivate"value="false"/>

<property name="mailServerHost" value="mail.my-corp.com"/>

<property name="mailServerPort"value="5025" />

</bean>

</beans>

結合 Spring

Spring 中定義數據鏈接及事務管理

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName"value="com.mysql.jdbc.Driver" />

<property name="url"

value="jdbc:mysql://localhost:3306/boss?autoReconnect=true&amp;characterEncoding=UTF-8&amp;characterSe

tResults=UTF-8"/>

<property name="username" value="root"/>

<property name="password" value=""/>

</bean>

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

定義 Activiti 配置

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">

<property name="dataSource" ref="dataSource" />

<property name="transactionManager" ref="transactionManager" />

<property name="databaseSchemaUpdate" value="true"/>

<property name="jobExecutorActivate"value="false" />

<property name="mailServerHost" value="mail.xxxx.com"/>

<property name="mailServerPort" value="25" />

<property name="mailServerDefaultFrom"value="hrj@xxxx.com"/>

<property name="mailServerUsername"value="xxxx" />

<property name="mailServerPassword"value="xxxx" />

</bean>

定義流程引擎

<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">

<property name="processEngineConfiguration" ref="processEngineConfiguration"/>

</bean>

定義流程中使用的對象

<bean id="myServiceTask" class="hrj.activiti.MyServiceTask">

<property name="processEngine" ref="processEngine" />

</bean>

<bean id="myActivityBehavior" class="hrj.activiti.MyActivityBehavior">

<property name="processEngine" ref="processEngine" />

</bean>

<bean id="myExecutionListener" class="hrj.activiti.MyExecutionListener">

</bean>

<bean id="valueBean" class="hrj.activiti. ValueBean">

<property name="value"value="張三李四" />

</bean>

建立流程引擎:

1. 根據默認的配置文件建立默認的流程引擎。

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

2. 也能夠經過代碼由ProcessEngineConfiguration建立一個流程引擎,這種方式不須要配置文件,能夠在ProcessEngineConfiguration中設置文件中的全部參數。

ProcessEngine processEngine = ProcessEngineConfiguration

.createProcessEngineConfigurationFromResourceDefault()

.setMailServerHost("gmail.com")

.setJdbcUsername("mickey")

.setJdbcPassword("mouse")

.buildProcessEngine();

3. 由Spring建立流程引擎。

部署流程:

public void deployFlow() throws Exception{

//一、建立核心流程引擎對象ProcessEngine

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

//二、使用ProcessEngine獲取須要的服務對象

RepositoryService repositoryService= processEngine.getRepositoryService();

//三、使用服務對象相關的方法完成操做

//建立發佈配置對象

DeploymentBuilder builder= repositoryService.createDeployment();

//指定發佈的文件

builder.addClasspathResource("HelloWorld.bpmn").addClasspathResource("HelloWorld.png");

//發佈流程

builder.deploy();

}

還能夠經過字符串,zip包,inputStream等方式部署流程。

@Test

public void deployProcessZIP() throws Exception{

// 建立一個發佈配置對象

DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();

// 添加發布的資源文件(「流程規則文件」 和 「流程圖片」)

InputStream in=this.getClass().getResourceAsStream("/leave.zip") ;

ZipInputStream zipInputStream = new ZipInputStream(in);

deploymentBuilder.addZipInputStream(zipInputStream);

//發佈

deploymentBuilder.deploy();

}

啓動流程

@Test

public void startFlow() throws Exception{

//一、建立核心流程引擎對象ProcessEngine

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

//二、建立運行時服務對象

RuntimeService runtimeService=processEngine.getRuntimeService();

//3.使用服務

runtimeService.startProcessInstanceByKey("myProcess");

}

啓動流程使用流程定義中的process id = 「myProcess」,能夠綁定一個Sting類型的businessKey和一個Map類型的流程變量集合

查詢任務

流程定義中,第一個任務是指定 accountancy 角色處理的。

<potentialOwner>

<resourceAssignmentExpression>

<formalExpression>accountancy</formalExpression>

</resourceAssignmentExpression>

</potentialOwner>

取得任務接口

TaskService taskService = processEngine.getTaskService();

查詢流轉到 accountancy 的任務

List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();

領取任務:

若是 fozzie 是 accountancy 下的一個用戶

for (Task task : tasks) {

// fozzie 領取任務

taskService.claim(task.getId(), "fozzie");

}

完成任務:

tasks = taskService.createTaskQuery().taskAssignee("fozzie").list();

for (Task task : tasks) {

//完成任務

taskService.complete(task.getId());

}

查詢:

流程部署查詢:

DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();

List<Deployment> deploymentList = deploymentQuery .list();

流程定義查詢:

ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();

List<ProcessDefinition> processDefinitionList = processDefinitionQuery .orderByProcessDefinitionId().asc().list();

處理中的流程實例查詢:

RuntimeService runtimeService = processEngine.getRuntimeService();

List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().list();

處理完成的流程實例查詢:

HistoricProcessInstanceQuery historicProcessInstanceQuery = processEngine.getHistoryService()

.createHistoricProcessInstanceQuery();

List<HistoricProcessInstance> historicProcessInstanceList =

historicProcessInstanceQuery .finished().orderByProcessInstanceStartTime().asc().list();

流程處理記錄查詢:

僅獲得流程中的UserTask節點

HistoricTaskInstanceQuery historicTaskInstanceQuery = processEngine.getHistoryService()

.createHistoricT askInstanceQuery();

List<HistoricTaskInstance> historicTaskInstanceList = historicT askInstanceQuery .processInstanceId(processInstanceId)

.orderByHistoricActivityInstanceStartTime().asc().list();

查詢流程中全部節點

HistoricActivityInstanceQuery

historicActivityInstanceQuery=processEngine.getHistoryService().createHistoricActivityInstanceQuery();

List<HistoricActivityInstance> historicActivityInstanceList =

historicActivityInstanceQuery .processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().

asc().list();

相關文章
相關標籤/搜索