目录
前言
一、RepositoryService 是什么?
二、使用步骤
1.产生方式
2.产生DeploymentBuilder
3.部署流程
3.1代码实现
3.2生成的表数据
4.删除流程定义
5.查询流程定义
总结
前言
Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务。
一、RepositoryService 是什么?
RepositoryService 是Acitiviti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。
二、使用步骤
1.产生方式
代码如下(示例):
RepositoryService repositoryService = processEngine.getRepositoryService();
2.产生DeploymentBuilder
DeploymentBuilder:定义流程部署相关参数
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.zip.ZipInputStream;
public class ActivitiRepTest {
RepositoryService repositoryService;
/**
* 默认简化方式: 启动时会默认寻找classpath下面的activiti.cfg.xml文件
*/
@Before
public void initConfigWithDefault() {
//创建流程引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
repositoryService = processEngine.getRepositoryService();
}
/**
* 部署流程 直接加载bpmn文件和图片文件
*/
@Test
public void deployActivitByPath() {
//创建部署对象
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
//加载流程的配置文件和图片
deploymentBuilder.addClasspathResource("diagrams/test.bpmn")
.addClasspathResource("diagrams/test.png")
.name("部署的流程定义名称")
.category("业务分类,可自行定义")
;
deploymentBuilder.deploy();
}
/**
* 部署流程 直接加载bpmn文件和流程图片的压缩文件
*/
@Test
public void deployActivitByFileZip() {
//创建部署对象
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
InputStream inputStream = this.getClass().getResourceAsStream("diagrams/test.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
//加载流程的配置文件和图片
deploymentBuilder.addZipInputStream(zipInputStream)
.name("部署的流程定义名称")
.category("业务分类,可自行定义")
;
deploymentBuilder.deploy();
}
}
3.部署流程
3.1代码实现
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.zip.ZipInputStream;
public class ActivitiRepTest {
RepositoryService repositoryService;
/**
* 默认简化方式: 启动时会默认寻找classpath下面的activiti.cfg.xml文件
*/
@Before
public void initConfigWithDefault() {
//创建流程引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
repositoryService = processEngine.getRepositoryService();
}
/**
* 部署流程 直接加载bpmn文件和图片文件
*/
@Test
public void deployActivitByPath() {
//创建部署对象
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
//加载流程的配置文件和图片
deploymentBuilder.addClasspathResource("diagrams/test.bpmn")
.addClasspathResource("diagrams/test.png")
.name("部署的流程定义名称")
.category("业务分类,可自行定义")
;
deploymentBuilder.deploy();
}
/**
* 部署流程 直接加载bpmn文件和流程图片的压缩文件
*/
@Test
public void deployActivitByFileZip() {
//创建部署对象
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
InputStream inputStream = this.getClass().getResourceAsStream("diagrams/test.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
//加载流程的配置文件和图片
deploymentBuilder.addZipInputStream(zipInputStream)
.name("部署的流程定义名称")
.category("业务分类,可自行定义")
;
deploymentBuilder.deploy();
}
}
3.2生成的表数据
select * from act_re_deployment; -- 工作流部署表
select * from act_ge_bytearray; -- 存储二进制相关文件
select * from act_re_procdef; -- 流程定义数据
其中 act_re_procdef 表中的 RESOURCE_NAME_ 字段 = act_ge_bytearray中NAME_字段
4.删除流程定义
//删除流程定义
repositoryService.deleteDeployment(deploymentId);
5.查询流程定义
/**
* 流程定义的查询(主要涉及表:act_re_procdef)
* id: key:version:随机值
* name: 对应流程文件process节点的name属性
* key: 对应流程文件process节点的id属性
* version: 发布时自动生成的,如果第一次发布的流程,version默认从1开始; 如果当前流程引擎中已经存在相同key的流程,则找到当前key的最高版本号,在最高版本号上加1
*/
@Test
public void queryProcessDefinition() {
List<ProcessDefinition> processDefinitionList = repositoryService.createProcessDefinitionQuery()
//添加查询条件
//.processDefinitionName("流程定义的name")
//.processDefinitionId("流程定义的id")
//.processDefinitionKey("流程定义的key")
//排序
.orderByProcessDefinitionVersion().asc()
//查询结果
//.count() //返回结果集数量
//.listPage(firstResult, maxResults)//分页查询
//.singleResult() //唯一结果
.list();//总的结果集数量
for(ProcessDefinition processDefinition:processDefinitionList){
System.out.println("id:" +processDefinition.getId());
System.out.println("name:" +processDefinition.getName());
System.out.println("key:" +processDefinition.getKey());
System.out.println("version:" +processDefinition.getVersion());
System.out.println("resourceName:" +processDefinition.getDiagramResourceName());
}
}
总结
RepositoryService 核心就是流程文件的部署,删除,查询流程定义。