Activiti教程
1. activiti介绍
Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。
Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss JBPM的项目架构师,它的特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。
1.1 工作流引擎
ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据,监控和管理流程的运行。
1.2 BPMN
业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)
2. 准备环境
2.1 activiti软件环境
JDK1.6或者更高版本
支持的数据库有:h2,mysql,oracle,mysql,db2等
支持activiti运行的jar包,可以通过maven依赖引入
开发环境为Eclipse3.7或者以上版本,myeclipse为8.6版本
2.2安装流程设计器(eclipse插件)
1)打开Help àInstall New Software àAdd
输入 Name: Activiti Designer
Location: http://activiti.org/designer/update/
输入完成后,单击OK按钮等待下载完成后安装。
安装完成后在菜单选项中会出现activiti的目录选项
2.3 设置eclipse activit插件的画流程图 选项
打开菜单Windows --> Preferences --> Activiti -->Save 下流程图片的生成方式
勾选上Create process definition image when saving the diagram操作,勾选上这个操作后在画流程图后保存eclipse会自动生成对应的流程图片。
2.4 准备开发环境
2.4.1 创建maven web项目,在maven中添加activiti依赖
在eclipse左边工作栏右键New选择创建Maven Project项目,创建一个名为ActivitiTest的项目
点击Finish完成。
右键项目选择Properties,选择Project Facets 勾选上图中的选项,点击Apply,再点击OK
然后将项目转换成web项目,右键项目选择Properties,在Project Facets中做如下勾选,然后点击Appy应用和OK确定
然后右键项目Properties ,选择Deployment Assembly,将test相关目录Remove掉之保留main下面需要发布的内容,如下图
然后点击Appply和OK
然后在pom.xml文件中添加以下依赖
<project
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ActivitiTest</groupId>
<artifactId>ActivitiTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- postgresql数据库驱动包开始 根据数据库选择 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1103-jdbc41</version>
</dependency>
<!-- postgresql数据库驱动包结束 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</project>
更新maven项目下载jar包
2.4.2 初始化数据库
1)src/main/resource目录下创建activiti.cfg.xml文件,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="123456" />
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
jdbcUrl为你电脑数据库的url
jdbcUsername为数据库用户名
jdbcPassword为数据库密码
2)在main/java目录下创建任意目录和类
编写创建activiti数据表方法
public class CreateTable {
/****
* 创建流程表
* */
@Test
public void createTable() {
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
.buildProcessEngine();
System.out.println("------processEngine:" + processEngine);
}
}
然后运行该测试方法,如果运行成功,在数据库中应该会产生25张activiti的相关数据表
2.4.3 activiti表说明
下面是概括了几个常用的数据表
流程部署相关表
act_re_deployement 部署对象表
act_rep_procdef 流程定义表
act_ge_bytearray 资源文件表
act_ge_prperty 主键生成策略表(对于部署对象表的主键ID)
流程实例相关表
act_ru_execution 正在执行的执行对象表(包含执行对象ID和流程实例ID,如果有多个线程可能流程实例ID不一样)
act_hi_procinst 流程实例历史表
act_hi_actinst 存放历史所有完成的任务
Task 任务相关表
act_ru_task 代办任务表 (只对应节点是UserTask的)
act_hi_taskinst 代办任务历史表 (只对应节点是UserTask的)
act_hi_actinst 所有节点活动历史表 (对应流程的所有节点的活动历史,从开始节点一直到结束节点中间的所有节点的活动都会被记录)
流程变量表
act_ru_variable 正在执行的流程变量表
act_hi_variable 流程变量历史表
3.核心API
3.1 ProcessEngine
说明:
1) 在Activiti中最核心的类,其他的类都是由他而来。
2) 产生方式
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
如果是spring配置文件可以配置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" />
</bean>
<bean id="processEngineFactory" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="repositoryService" factory-bean="processEngineFactory" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngineFactory" factory-method="getRuntimeService" />
<bean id="formService" factory-bean="processEngineFactory" factory-method="getFormService" />
<bean id="identityService" factory-bean="processEngineFactory" factory-method="getIdentityService" />
<bean id="taskService" factory-bean="processEngineFactory" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngineFactory" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngineFactory" factory-method="getManagementService" />
<!-- activiti 结束 -->
3)可以产生RepositoryService
RepositoryService repositoryService =processEngine.getRepositoryService();
4) 可以产生 RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
5) 可以产生TaskService
TaskService taskService =processEngine.getTaskService();
各个Service的作用
RepositoryService | 管理流程定义 |
RuntimeService | 执行管理,包括启动,推进,删除流程实例等操作 |
TaskService | 任务管理 |
|
|
3.2 RepositoryService
Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片
该service可以用来删除部署的流程定义。
3.3 RuntimeService
是activiti的流程执行服务类,可以从这个服务类中获取很多关于流程执行的相关的信息。
3.4 TaskService
是activiti的任务服务类。可以从这个类中获取任务的相关信息,如当前正在执行的个人待办和用户组待办任务。
3.5 HistoryService
是activiti的查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,可以跟踪流程实例对应所有待办节点的运行情况。
3.6 ProcessDefinition
流程定义类,可以从这里获得资源文件等。
3.7 ProcessInstance
代表流程定义的执行实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是它的流程任务可以有多个,每个任务对应流程图中相应的流程节点。
4.入门HelloWorld程序
4.1创建流程图方法
点击ActivitiTest项目,在src/main/java目录下创建一个diagrams目录用来存放流程图
在当前项目右键选择Activiti Diagram流程图输入流程图名称HelloWorld,然后点击OK,
在控制面板的右边栏有相关的画图图标操作
其中一个流程必须包含一个开始节点和一个结束节点,结束节点可以有多个。
然后使用StartEvent, UserTask,EndEvent画出下面的流程图,然后用Connection中的SequenceFlow连线连接起来。
4.2创建流程图,如下图