【Activiti工作流】4.准备开发环境(配置文件)和核心api的介绍

我们上一次已经搭建了Activiti工作流工程的环境,
1.在Eclipse中加入了Activiti插件
2.创建了Activiti工程
3.引入了所需要的jar包
4.创建了加载流程引擎配置,和获取流程引擎实例的类
5.创建了工作流工程需要的数据库
6.使用流程引擎生成了工作流所需要的23张表。


我们加载流程引擎配置,和获取流程引擎实例的类如下:
package junit;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;


public class TestActiviti {
	/**使用代码创建工作流需要的23张表*/
	@Test
	public void createTable(){
		//流程引擎ProcessEngine对象,所有操作都离不开引擎对象
		ProcessEngineConfiguration processEngineConfiguration = 
				ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
		//连接数据库的配置
		processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
		processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/zhucoder2017?useUnicode=true&characterEncoding=utf8");
		processEngineConfiguration.setJdbcUsername("root");
		processEngineConfiguration.setJdbcPassword("1234");
	
		//三个配置
		//1.先删除表,再创建表:processEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP="create-drop"
		//2.不能自动创建表,需要表存在:processEngineConfiguration.DB_SCHEMA_UPDATE_FALSE="false"
		//3.如果表存在,就自动创建表:processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE="true"
		processEngineConfiguration.setDatabaseSchema(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
		//获取工作流的核心对象,ProcessEngine对象
		ProcessEngine processEngine=processEngineConfiguration.buildProcessEngine();
		System.out.println("processEngine:"+processEngine+"Create Success!!");
	}
}

我们这里只是一个测试类,其实真正加载流程引擎,我们是使用配置文件配置,然后利用
spring框架的依赖注入来完成流程引擎的参数配置和实例获取的。

接下来我们来添加并制定配置文件:

1.添加并制定配置文件
在Actiiti5中定制流程必定会操作到数据库,如果都像上面那样写一大段代码会非常麻烦,
所以我们可以把数据库连接配置写入配置文件。
在Activiti5的官方示例中并没有现成的配置文件,所以先得找到Activiti的样例工程。
(Activiti的样例工程下载: http://download.csdn.net/detail/u013517797/9764657)
在activiti-rest\WEB-INF\classes下有activiti-context.xml文件:


我们把该文件拷贝到我们之前创建的Activiti的工程中,放置在src/java/resources下:

重命名为activiti-cfg.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.StandaloneInMemProcessEngineConfiguration">
		<!-- 流程引擎配置对象的相关参数 -->
		<!-- 1.连接数据库的配置 -->
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/zhucoder2017?useUnicode=true&amp;characterEncoding=utf8"/>
		<property name="jdbcUsername" value="root"/>
		<property name="jdbcPassword" value="1234"/>
		<!-- 没有表就创建表 -->
		<property name="databaseSchemaUpdate" value="true"/>
	</bean>


</beans>
上面代码配置ProcessEngineConfiguration对象,主要定义数据库的连接配置和建表策略。


2.配置log4j.properties日志文件
接下来配置log4j.properties日志配置文件
我们把刚刚activiti-rest样例工程的log4j.properties日志文件拷贝到
我们工程的src/java/resources下即可:



里面的配置就是log4j的基础配置:
log4j.rootLogger=INFO, CA

# ConsoleAppender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d{hh\:mm\:ss,SSS} [%t] %-5p %c %x - %m%n

3.重写加载类
我们配置了配置文件,我们就使用加载配置文件的方式获取流程引擎配置对象。
在之前的TestActiviti类中我们创建一个新的方法,来编写该代码:
public void createTable_2(){
	//流程引擎ProcessEngine对象,所有操作都离不开引擎对象
	ProcessEngineConfiguration processEngineConfiguration = 
			ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-cfg.xml");
	//获取工作流的核心对象,ProcessEngine对象
	ProcessEngine processEngine=processEngineConfiguration.buildProcessEngine();
	System.out.println("processEngine:"+processEngine+"Create Success!!");
}

我们使用了createProcessEngineConfigurationFromResource方法,通过加载资源文件
的方式获取流程引擎配置对象,进而使用该对象创建流程引擎实例。

运行之后,由于我们配置了log4j日志,所以在控制台可以看到引擎实例创建成功:


速度也比第一次快,因为23张基础表已经创建过了。


当然上面那个代码可以更简洁,使用“链式编程”直接获取工作流实例:
@Test
public void createTable_2(){
	//获取工作流的核心对象,ProcessEngine对象
	ProcessEngine processEngine = 
			ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-cfg.xml").buildProcessEngine();
	System.out.println("processEngine:"+processEngine+"Create Success!!");
}

引擎对象创建完毕之后,我们就要学习一下Activiti的核心API了。


4.核心API
1.ProcessEngine
说明:
1)在Activiti中最核心的类,其他的类都是由他而来。
2)产生方式:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
在前面看到了两种创建ProcessEngine(流程引擎)的方式,而这里要简化很多,调用ProcessEngines的getDefaultProceeEngine方法时会自动加载classpath下名为activiti.cfg.xml
文件。

记得我们获取流程引擎实例的时候创建了23张表:

分别有RE/RU/ID/HI/GE开头的表,其中
A.'RE'表示repository, 这个前缀的表包含了
流程定义和流程静态资源 (图片,规则,等等)。
B.'RU'表示runtime。 这些运行时的表,包含流程实例,任务,
变量,异步任务,等运行中的数据。 
C.'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
D.'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
E.'GE'表示通用数据, 用于不同场景下,如存放资源文件。


同理,我们processEngine流程引擎实例,可以获取3个service,分别处理
开头为RE/RU/ID/HI/GE的表:
3)可以产生RepositoryService
是Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。
A.产生方式
RepositoryService repositoryService=processEngine.getRepositoryService();


B.可以产生DeploymentBuilder,用来定义流程部署的相关参数
DeploymentBuilder deploymentBuilder=repositoryService.createDeployment();


C.删除流程定义
repositoryService.deleteDeployment(deploymentId);


4)可以产生RuntimeService
是activiti的流程执行服务类。可以从这个服务类中获取很多关于流程执行相关的信息。
产生方式:
RuntimeService runtimeService=processEngine.getRuntimeService();


5)可以产生TaskService
是activiti的任务服务类。可以从这个类中获取任务的信息。
产生方式:
TaskService taskService=processEngine.getTaskService();


6)可以产生HistoryService
是activiti的查询历史信息的类。在一个流程执行完成后,这个对象为我们
提供查询历史信息。
产生方式:
HistoryService historyService=processEngine.getHistoryService();


其它的Service的产生方式类似,这里不再赘述。



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


具体API的使用我们在之后的工程实例中带领大家学习。

附录-Activiti开发的整个流程:

转载请注明出处:http://blog.csdn.net/acmman/article/details/57423054

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
Activiti工作流的课件整体、讲师: 刘洋 内容如下: 1:工作流的概念 1 2:工作流的执行过程 1 3:Activiti介绍 1 3.1:工作流引擎 2 3.2:BPMN 2 3.3:数据库(先学后看) 2 3.4:activiti.cfg.xml(activiti配置文件) 4 3.5:logging.properties(日志处理) 5 4:准备环境 6 4.1:activiti5 软件环境 6 4.2:相关资源下载 6 4.3:安装流程设计器(eclipse插件) 6 4.4:对流程设计器的使用说明 10 4.5:准备Activiti5开发环境 11 5:核心API 12 5.1:ProcessEngine 13 5.2:RepositoryService 13 5.3:RuntimeService 14 5.4:TaskService 14 5.5:HistoryService 14 5.6:ProcessDefinition 14 5.7:ProcessInstance 14 5.8:Execution 14 6:HelloWorld程序(模拟流程的执行) 16 6.1:流程图: 16 6.2:部署流程定义 16 6.3:启动流程实例 17 6.4:查看我的个人任务 17 6.5:完成我的个人任务 17 7:管理流程定义 18 7.1:设计流程定义文档 18 7.2:部署流程定义(classpath路径加载文件) 19 7.3:部署流程定义(zip格式文件) 20 7.4:查看流程定义 21 7.5:删除流程定义 22 7.6:获取流程定义文档的资源(查看流程图附件) 22 7.7:附加功能:查询最新版本的流程定义 23 7.8:附加功能:删除流程定义(删除key相同的所有不同版本的流程定义) 23 7.9:总结 24 8:流程实例、任务的执行 25 8.1:流程图 25 8.2:部署流程定义 26 8.3:启动流程实例 26 8.4:查询我的个人任务 26 8.5:办理任务 27 8.6:查询流程状态(判断流程正在执行,还是结束) 28 8.7:附加功能:查询历史任务(后面讲) 28 8.8:附加功能:查询历史流程实例(后面讲) 29 8.9:总结 29 9:流程变量 30 9.1:流程图 30 9.2:部署流程定义 31 9.3:启动流程实例 32 9.4:设置流程变量 32 9.5:获取流程变量 33 9.6:模拟流程变量的设置和获取的场景 34 9.7:查询历史的流程变量 35 9.8:流程变量的支持的类型 35 9.9:总结 35 10:流程执行历史记录 36 10.1:查询历史流程实例 36 10.2:查询历史活动 37 10.3:查询历史任务 37 10.4:查询历史流程变量 37 10.5:总结 38 11:连线 38 11.1:流程图 38 11.2:部署流程定义+启动流程实例 39 11.3:查询我的个人任务 40 11.4:完成任务 40 11.5:总结 40 12:排他网关(ExclusiveGateWay) 41 12.1:流程图 41 12.2:部署流程定义+启动流程实例 42 12.3:查询我的个人任务 42 12.4:完成我的个人任务 43 13:并行网关(parallelGateWay) 44 13.1:流程图 44 13.2:部署流程定义+启动流程实例 45 13.3:查询我的个人任务 45 13.4:完成我的个人任务 45 14:开始活动节点 46 14.1:流程图 46 14.2:部署流程定义+启动流程实例+查询流程实例+查询历史流程实例 47 14.3:总结 47 15:接收活动(receiveTask,即等待活动) 47 15.1:流程图 48 15.2:部署流程定义+启动流程实例 48 16:用户任务(userTask,即用户操作的任务) 50 16.1:个人任务 50 16.2:组任务 56 16.3:工作流定义的角色组(了解) 68

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值