【1】初识activiti
1.1. 工作流与工作流引擎
工作流工作流(workflow)就是工作流程的计算模型,将部分或者全部的工作流程、逻辑让计算机帮你来处理,实现自动化
工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。
1.2. BPMN2.0规范
BPMN --业务流程模型与符号。
BPMN是一套流程建模的标准,主要目标是被所有业务用户容易理解的符号,支持从创建流程轮廓的业务分析到这些流程的最终实现,知道最终用户的管理监控。
通俗一点其实就是一套规范,画流程模型的规范。流程模型包括:流程图、协作图、编排图、会话图
【2】activiti概述
Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。其核心是基于 Java 的超快速、超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员。
Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
【3】activiti的使用
准备
activiti整合eclipse插件
略
插件生成的流程定义图例
一般会生成两个文件,一个png图片,一个bpmn文件
activiti资源包
1) database:里面存放的是Activiti使用到的数据库信息的sql文件
2) docs:毫无疑问,api文档是也。
3) libs:使用Activiti所需要的所有的jar包和源文件。
4) wars:官方给我们提供的示例Demo,通过使用Demo可以更加快速的了解Activiti。
创建activiti数据库(23张表)-方式一,执行sql文件
工作流框架底层需要有数据库支持,activiti5.13版本对应23张表,执行database目录下的一下三个sql文件即可创建
表分类:
1)ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
2)ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
3)ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
4)ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
5)ACT_GE_*: 通用数据, 用于不同场景下。
创建activiti数据库(23张表)-方式二 代码方式
第一步:创建java工程,导入jar包
这里jar包可以在activiti的案例中获取,将wars文件下的案例解压即可,另外记得添加mysql引擎包
第二步:添加配置(activit-context.xml)
<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">
<!-- 流程引擎配置对象 -->
<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:3307/activiti_db"/>
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="123"/>
<property name="databaseSchemaUpdate" value="true"/>
</bean>
<!-- 使用工厂创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
</bean>
</beans>
第三步:创建流程引擎对象,自动建表
第四步:提供流程,部署流程
这里的流程既是bpmn和png文件
就是将流程定义规则保存到数据库
public class ActivitiAPITest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义
* 方式一:加载单个的流程定义文件
* 方式二:加载zip文件
*
* 执行部署流程定义,程序会操作以下三张表
* act_re_deployment(部署表)
* act_re_procdef(流程定义表)
* act_ge_bytearray(二进制表)
* @throws FileNotFoundException
*/
@Test
public void test1() throws FileNotFoundException {
//创建部署构建器对象
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
// 方式一:加载单个的流程定义文件
// deploymentBuilder.addClasspathResource("qjlc.bpmn");
// deploymentBuilder.addClasspathResource("qjlc.png");
// Deployment deployment = deploymentBuilder.deploy();
//
// System.out.println(deployment.getId());
//将zip文件转换为输入流
ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("process.zip"));
// 方式二:加载zip文件
//ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("d:\\process.zip")));
deploymentBuilder.addZipInputStream(zipInputStream );
Deployment deployment = deploymentBuilder.deploy();
System.out.println(deployment.getId());
}
}