Activiti5入门--Activiti5项目构建和核心API介绍

上篇介绍了如何安装Activiti的IDE插件,本篇将介绍Activiti项目的构建和核心API。

项目初始化

创建项目

选择菜单File->New->Other…,创建Activiti Project

创建工作流项目

此时,生成一个类似Maven项目结构的Activiti项目,其src/main/resources目录下存在一个名为diagrams的包

导入Activiti项目相关jar包

  1. 选中项目,右键New->Folder,新建lib目录
  2. 将下列jar包复制到lib目录下

    项目所需jar包项目所需jar包mysql相关的jar包

  3. 展开lib目录,选中所有jar包,右键Build Path->Add To Build Path。此时,项目所需的jar就被导入了

生成Activiti相关数据表及其核心对象

src/test/java下创建类TestActiviti,新增测试方法createTable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package junit;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
public class TestActiviti {
/*使用代码创建工作流需要的23张表*/
@Test
public void createTable() {
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("123456");
/*
* public static final String DB_SCHEMA_UPDATE_FALSE = "false"; public 不能自动创建表,需要表存在
* static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop"; 先删除表,再创建表
* public static final String DB_SCHEMA_UPDATE_TRUE = "true"; 如果表不存在,则自动创建表
*/
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 工作流的流程引擎
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine="+processEngine);
}
}

上面这段代码生成了支撑Activiti的23张数据表及其核心对象——流程引擎对象processEngine,其步骤如下

  1. 首先,调用ProcessEngineConfiguration类createStandaloneProcessEngineConfiguration方法生成流程引擎配置对象实例processEngineConfiguration
  2. 接着,通过processEngineConfiguration对象的setJdbcDriversetJdbcUrlsetJdbcUsernamesetJdbcPassword分别设置数据库驱动、地址、用户名、密码
  3. 然后,通过processEngineConfiguration对象的setDatabaseSchemaUpdate方法设置数据表的生成策略。其总共有三种策略,选择其中的一种即可
    • DB_SCHEMA_UPDATE_FALSE,不自动创建表,工作流相关表必须先创建,否则抛异常
    • DB_SCHEMA_UPDATE_CREATE_DROP,每次先删除旧表,再创建新表
    • DB_SCHEMA_UPDATE_TRUE,如果表不存在,则自动创建表,否则,直接使用
  4. 最后,通过processEngineConfiguration对象的buildProcessEngine方法生成核心的流程引擎对象processEngine

Activiti中,在创建核心的流程引擎对象时会自动建表。如果程序正常执行,mysql会自动建库,然后创建23张表。

小结

  1. Activiti工作流框架的核心是流程引擎ProcessEngine,其完整功能的实现还需要创建23张底层的数据库表作为支撑
  2. 在实际情况中,需要先创建ProcessEngineConfiguration对象,设置数据库相关属性及数据库表生成策略,再生成核心的ProcessEngine对象

项目所用到的jar包

下载地址:项目所需jar包

密码:fre5

定义配置文件

在上一节中,学习了使用代码生成数据库表以及获取流程引擎,本节将引入一个配置文件activiti.cfg.xml

继续上一节的项目,在src/main/resources下添加文件activiti.cfg.xml,定义数据库的连接配置和建表策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=utf8">
</property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="123456"></property>
<!-- 没有表,创建表 -->
<property name="databaseSchemaUpdate" value="true" ></property>
</bean>
</beans>

对比上一节中的代码,可以发现,两者的配置是一致的。

TestActiviti中增加测试方法createTable2,获取流程引擎配置对象

1
2
3
4
5
6
@Test
public void createTable2() {
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
System.out.println("processEngine="+processEngine);
}

这样,完整的TestActiviti就如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package junit;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
public class TestActiviti {
/* 使用代码创建工作流需要的23张表 */
@Test
public void createTable() {
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration
.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("123456");
/*
* public static final String DB_SCHEMA_UPDATE_FALSE = "false"; public
* 不能自动创建表,需要表存在 static final String DB_SCHEMA_UPDATE_CREATE_DROP =
* "create-drop"; 先删除表,再创建表 public static final String
* DB_SCHEMA_UPDATE_TRUE = "true"; 如果表不存在,则自动创建表
*/
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 工作流的流程引擎
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine=" + processEngine);
}
@Test
public void createTable2() {
// 加载classpath路径下的配置文件,创建核心流程引擎对象,数据库表若不存在自动创建
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
// 还可以调用ProcessEngines的getDefaultProceeEngine方法,该方法会自动加载classpath下名为activiti.cfg.xml文件创建流程引擎
// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println("processEngine="+processEngine);
}
}

createTable2方法可以看出,通过引入配置文件可以使java代码更加简洁

流程引擎的作用

ProccessEngine是Activiti中最核心的类,其他的类都是由它而来,通过流程引擎,可以创建各个Service,这些Service是调用工作流23张表的服务 ,其分类和作用如下:

服务 作用
RepositoryService 管理流程定义
RuntimeService 执行管理,包括启动、推进、删除流程实例等操作
TaskService 任务管理
HistoryService 历史管理(执行完的数据的管理)
IdentityService 组织机构管理
FormService nguage 一个可选服务,任务表单管理
ManagerService ——

总结

创建流程引擎主要有两种方式

  • 纯代码方式,通过代码创建流程引擎以及生成数据库表
  • 引入配置文件activiti.cfg.xml,通过加载配置文件来创建流程引擎和数据库表