Activiti流程定义部署、删除
1、部署流程定义
部署流程定义也可以认为是增加流程定义。
首先创建流程引擎对象(公用的方法)
- /**
- * 1.发布流程
- * 会在三张表中产生数据:
- * act_ge_bytearray 产生两条数据
- * act_re_deployment 产生一条数据
- * act_re_procdef 产生一条数据
- */
- public void deploy() throws Exception {
- // 获取仓库服务
- RepositoryService repositoryService = processEngine.getRepositoryService();
- // 创建发布配置对象
- DeploymentBuilder builder = repositoryService.createDeployment();
- // 设置发布信息
- builder
- .name("请假流程")// 添加部署规则的显示别名
- .addClasspathResource("diagrams/Leave2.bpmn")// 添加规则文件
- .addClasspathResource("diagrams/Leave2.png");// 添加规则图片 不添加会自动产生一个图片不推荐
- // 完成发布
- builder.deploy();
- }
方法2:
- public void deployZIP() throws Exception {
- // 获取仓库服务
- RepositoryService repositoryService = processEngine.getRepositoryService();
- // 创建发布配置对象
- DeploymentBuilder builder = repositoryService.createDeployment();
- // 获得上传文件的输入流程
- InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/diagrams.zip");
- ZipInputStream zipInputStream = new ZipInputStream(in);
- // 设置发布信息
- builder
- .name("请假流程")// 添加部署规则的显示别名
- .addZipInputStream(zipInputStream );
- // 完成发布
- builder.deploy();
- }
说明:
1) 首先获得默认的流程引擎,在创建时会自动加载classpath下得activiti.cfg.xml
2) 通过流程引擎获取了一个RepositoryService对象->仓库服务对象
3) 由仓库的服务对象产生一个部署对象配置对象,用来封装部署环境的相关配置。
4) 这是一个链式编程,在部署配置对象中设置显示名,上传规则文件相对classpath的地址。
5) 部署,也是往数据库中存储流程定义的过程。
6) 这一步在数据库中将操作三张表:
a) act_re_deployment
存放流程定义的显示名和部署时间,每部署一次增加一条记录
b) act_re_procdef
存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。
c) act_ge_bytearray
存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。
2、删除流程
删除部署到activiti中的流程定义。
- public void delDeployment() throws Exception {
- // 获取仓库服务对象
- RepositoryService repositoryService = processEngine.getRepositoryService();
- // 删除发布信息
- String deploymentId = "1";
- // 普通删除,如果当前规则下有正在执行的流程,则抛异常
- repositoryService.deleteDeployment(deploymentId);
- // 级联删除,会删除和当前规则相关的所有信息,包括历史
- repositoryService.deleteDeployment(deploymentId, true);
- }
说明:
1) 因为删除的是流程定义,而流程定义的部署是属于仓库服务的,所以应该先得到RepositoryService
2) 如果该流程定义下没有正在运行的流程,则可以用普通删除。如果是有关联的信息,用级联删除。一般情况下用普通删除就可以。由于级联删除涉及的数据比较多,一般只开放给超级管理员使用。
3、查看流程定义
- /**
- * 查看流程定义
- * 流程定义 ProcessDefinition
- * id : {key}:{version}:{随机值}
- * name : 对应流程文件process节点的name属性
- * key : 对应流程文件process节点的id属性
- * version : 发布时自动生成的。如果是第一发布的流程,veresion默认从1开始;如果当前流程引擎中已存在相同key的流程,则找到当前key对应的最高版本号,在最高版本号上加1
- */public void queryProcessDefinition() throws Exception {
- // 获取仓库服务对象
- RepositoryService repositoryService = processEngine.getRepositoryService();
- // 获取流程定义查询对象
- ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
- // 配置查询对象
- processDefinitionQuery
- //添加过滤条件
- // .processDefinitionName(processDefinitionName)
- // .processDefinitionId(processDefinitionId)
- // .processDefinitionKey(processDefinitionKey)
- //分页条件
- // .listPage(firstResult, maxResults)
- //排序条件
- .orderByProcessDefinitionVersion().desc();
- /**
- * 执行查询
- * list : 执行后返回一个集合
- * singelResult 执行后,首先检测结果长度是否为1,如果为一则返回第一条数据;如果不唯一,抛出异常
- * count: 统计符合条件的结果数量
- */
- List<ProcessDefinition> pds = processDefinitionQuery.list();
- // 遍历集合,查看内容
- for (ProcessDefinition pd : pds) {
- System.out.print("id:" + pd.getId() +",");
- System.out.print("name:" + pd.getName() +",");
- System.out.print("key:" + pd.getKey() +",");
- System.out.println("version:" + pd.getVersion());
- }
- }
说明:
1) 因为流程定义的信息存放在仓库中,所以应该获取RepositoryService。
2) 创建流程定义查询对象,可以在ProcessDefinitionQuery上设置查询过滤参数
3) 调用ProcessDefinitionQuery对象的list方法,执行查询,获得符合条件的流程定义列表
4) 由运行结果可以看出:
a) Key和Name的值为:bpmn文件process节点的id和name的属性值
b) key属性被用来区别不同的流程定义。
c) 带有特定key的流程定义第一次部署时,version为1。之后每次部署都会在当前最高版本号上加1
d) Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个自动生成的唯一的数字
e) 重复部署一次,deploymentId的值以一定的形式变化
f) 流程定义(ProcessDefinition)在数据库中没有相应的表对应,只是从act_ge_bytearray表中取出相应的bpmn和png图片,并进行解析。
Activiti流程定义部署、删除的更多相关文章
- Activiti流程定义部署方式
1 bpmn png方式部署 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定义(从cl ...
- (四)Activiti之流程定义部署之ZIP方式和流程定义查询
一.流程定义部署之ZIP方式 上一章节我们使用classpath的方式加载流程定义文件,这里我们使用ZIP的方式. 1.1 用activiti插件生成bpmn和png图片之后,压缩到一个zip格式的压 ...
- 工作流学习——Activiti流程定义管理三步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46602419 ***************************************** ...
- Activiti Exploer工作流控制台使用指南!使用Activiti Explorer定义部署执行工作流
Activiti Explorer简介 Activiti Explorer: Activiti控制台,是一个web应用程序 从Activiti的官方网站下载Activiti的压缩zip文件时,Acti ...
- Activiti 学习(二)—— Activiti 流程定义和部署
概述 在这一节,我们将创建一个 Activit 工作流,并启动这个流程,主要包含以下几个步骤: 定义流程,按照 BPMN 的规范,使用流程定义工具,用流程符号把整个流程描述出来 部署流程,把画好的流程 ...
- Activiti流程定义语言
1.流程(process) bpmn文件一个流程的根元素.一个流程就代表一个工作流. 2.顺序流(sequenceFlow) 顺序流是连接两个流程节点的连线,代表一个节点的出口.流程执行完一个节点后, ...
- Activiti工作流学习(一)部署对象和流程定义
一.前言 前一段时间在工作中,使用了流程审批,对api的调用非常不熟悉,都是调用别人写好的接口在界面上进行显示,基本了解了流程审批的主要步骤,现对流程审批进行学习,主要是调用api进行CRUD操作,感 ...
- Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】
上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]- 管理流程定义 管理流程定义主要涉及到以下的4张表: -- 流程部署相关的表 SEL ...
- 深入了解Activiti工作流流程定义
深入了解Activiti工作流流程定义 2016-03-27| 发布: | 浏览: 2363 |保存PDF 部署流程定义 部署流程定义的流程: 1. 先获取流程引擎对象:在创建时会自动加载 class ...
随机推荐
- Rsync 参数
# rsync -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式 ...
- javascript小技巧-js小技巧收集(转)
本文转载自:http://blog.csdn.net/ocean20/article/details/2498699 每一项都是js中的小技巧,但十分的实用! 1.document.write(&qu ...
- Java 多线程 - 死锁deadlock产生原因+避免方法
ref: java中产生死锁的原因及如何避免 https://blog.csdn.net/m0_38126177/article/details/78587845 java如何避免死锁 http:// ...
- 【JZOJ6293】迷宫
description analysis 有没有想起[\(NOIP2018\)]保卫王国? 设\(tr[t][x][y]\)表示线段树上的\(t\)节点代表的区间,从最左边列的\(x\)行到最右边列\ ...
- VC++ MFC文件的移动复制删除更名遍历操作
1.判断文件是否存在 利用CFile类和CFileStatus类判断 CFileStatus filestatus; if (CFile::GetStatus(_T("d://softist ...
- sass与less的区别?Stylus又是啥?
现在写样式大家基本上都会用上CSS预处理器,而比较流行的预处理器就是这三位老哥了Less.Sass 和 Stylus: 在这之前,我们先了解一点,sass和scss有什么区别? SCSS 是 Sass ...
- sql还原数据库时候改变数据库名
需求:在做图书馆数据整合时候,由于有两个校区,用的是分离开的同一个数据库,数据库名字都一样的,现在我要整合在一起,我的想法是把两个数据库先还原到我本地,用写好的脚本整合到一起.所以,我还原两个数据库时 ...
- a标签 href触发及传值
var d=document.getElementById("exportA");alert(d.href);d.href="${ctx}/templet/tEdasTe ...
- 无法启动此程序,因此计算机中丢失VCRUNTIME140.dll。
在mysql-8.0.12-winx64创建data文件夹 在cmd终端 初始化 MYSQL: mysqld --initialize-insecure MySQL加入Windows服务:mysqld ...
- <每日一题>题目11:以文件夹名称作为参数,返回该文件夹下所有文件的路径
''' 分析: 1.知道文件夹名称(假设是形如:E:\\software\\Notepad++),很显然可以通过OS模块去求 2.OS.listdir(sPath),列出文件夹内所有的文件和文件夹,以 ...