一.Activiti的简单使用
activiti的运转是基于流程引擎ProcessEngine和数据库的,一共操作23张表,常用的有7张表,主要关于流程部署,流程定义,流程实例,任务,资源,用户和流程变量.
准备工作:导入activiti的jar包,安装Eclipse的插件
RespositoryService(操作流程部署):Deployment对象,ProcessDefinition对象,
1.涉及到的核心API
RuntimeService(操作流程实例):ProcessInterface对象,Execution对象
TaskService(处理流程任务):TaskQuery对象,Task对象
2.配置文件activiti.cxf.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:3306/activity_db" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="admin" />
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
</beans>
3.绘制流程图
利用Eclipse绘制流程图bpmn文件,实际上是xml文件,保存后会自动生成一张png图片,将流程图和png放到classpath路径下.
指定流程名称,任务名称,任务办理人(或多人),任务办理组等
4.编写代码,获取流程引擎
public class ActivitiTest {
//方式一:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//方式二:
public void test1() {
ProcessEngineConfiguration config = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti-context.xml", "processEngineConfiguration");
ProcessEngine processEngine = config.buildProcessEngine();
}
}
以上两种方式都可以获得流程引擎,其中方式一必须要求资源文件名为activiti-context.xml或者activiti.cfg.xml,且必须放在classpath路径下,获得流程引擎的同时会自动到配置的数据库中创建和操作表
5.部署流程,开启流程实例,办理任务
/**
* 部署流程
*/
public void test2() {
RepositoryService repositoryService = processEngine
.getRepositoryService();
DeploymentBuilder deploymentBuilder = repositoryService
.createDeployment();
deploymentBuilder.addClasspathResource("test.bpmn");
deploymentBuilder.addClasspathResource("test.png");
Deployment deployment = deploymentBuilder.deploy();
}
/**
* 开启流程实例
*/
public void test3() {
ProcessInstance processInstance = processEngine.getRuntimeService()
.startProcessInstanceById("test:1:104");
String instanceId = processInstance.getProcessInstanceId();
System.out.println(instanceId);
}
/**
* 查询和办理任务
*/
public void test4() {
//查询任务
TaskQuery taskQuery = processEngine.getTaskService().createTaskQuery();
//添加查询条件
taskQuery.taskAssignee("user");
Task task = taskQuery.singleResult();
//办理任务
processEngine.getTaskService().complete(task.getId());
}
6.Activiti与Spring的整合
框架与spring整合以后,可同过注解的方式在需要流程引擎的层中注入
<!-- 整合activity工作流框架 -->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource"/>
<property name="transactionManager" ref="txManager"/>
<property name="databaseSchemaUpdate" value="true"/>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="repService" factory-method="getRepositoryService" factory-bean="processEngine"/>