Activiti HelloWorld流程实现及原理
来源:互联网 发布:淘宝个人好评率怎么看 编辑:程序博客网 时间:2024/06/05 17:04
用之前装好的eclipse activiti插件画个图
我们先建一个单元测试类HelloWorldProcess
首先第一步,我们要操作流程,必须获取流程引擎实例
//获取默认的流程引擎实例,会自动读取activiti.cfg.xml文件private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
/* * 部署流程定义 */@Testpublic void deploy(){Deployment deploy = processEngine.getRepositoryService()//获取部署相关的service.createDeployment()//创建部署.addClasspathResource("diagrams/HelloWorld.bpmn")//添加资源文件.addClasspathResource("diagrams/HelloWorld.png")//添加资源文件.name("HelloWorld流程")//流程名字.deploy();//部署System.out.println("部署Id:"+deploy.getId());System.out.println("部署name:"+deploy.getName());}
第三步:我们要启动流程实例,这样一个流程才开始
/** * 启动流程实例 */@Testpublic void start(){ProcessInstance pi = processEngine.getRuntimeService()//运行时service.startProcessInstanceByKey("myFirstProcess");//流程定义表的key字段值System.out.println("流程实例Id:"+pi.getId());System.out.println("流程定义的ID:"+pi.getProcessDefinitionId());}
第四步:启动流程后,我们流程会走到helloWorld节点,我们来查看下"高晨曦"这个用户的任务
/** * 查看任务 */@Testpublic void findTask(){List<Task> listTasks = processEngine.getTaskService()//任务相关的service.createTaskQuery()//任务查询.taskAssignee("高晨曦")//指定某个人.list();for(Task task:listTasks){System.out.println("任务ID:"+task.getId()); System.out.println("任务名称:"+task.getName());System.out.println("任务创建时间:"+task.getCreateTime());System.out.println("任务委派人:"+task.getAssignee());System.out.println("流程实例ID:"+task.getProcessInstanceId());}}
第五步:我们来完成helloWorld节点任务,让流程走完
/** * 完成任务 */@Testpublic void completeTask(){processEngine.getTaskService().complete("2504");}
前面仅仅是走流程的代码,我们下面来细讲下原理,数据库的表发生了什么
这里有个很重要的概念,流程定义和流程实例的关系。大家可以把流程定义和流程实例的关系,理解成类和对象的关系
流程定义就是一个模版,流程实例就是通过模版搞出来的具体的可用的东西。
所以后面涉及到的流程定义id name,流程实例id name大家不要晕。先把关系搞清楚。其他的都简单
OK 然后我们来运行deploy方法,部署流程定义,这时候我们的流程定义表会发生一些变化
首先act_re_deployment 流程定义部署表,插入了一条数据
然后act_re_prodef 流程定义表也会有插入一条数据
这里有流程定义id name key version等重要信息,后面可以通过接口来获取这些数据。
还有一个act_ge_bytearray表 用来存资源信息
我们可以看到,把两个资源文件都存了 包括名称 以及文件内容
以上是部署流程定义 数据库表里发生的事情
然后我们继续 ,下面来启动流程实例
运行start方法
启动流程,数据库流程运行表也会发生相应的变化
首先是运行时流程任务表:act_ru_task;插入了一条任务数据
这个表很重要,ID_是任务id 数据2504 PROC_INST_ID_是流程实例ID 2501 以及Name 创建时间等
接下来是act_ru_execution 运行时流程执行表
这里存的流程执行相关信息
接下来是act_ru_identitylink 是于执行主体相关信息表
当然我们这里是用具体的用户去执行的,至于group组的概念,后面再说·
流程实例启动完,接下来就到了helloWorld任务节点
我们这时候可以来查看下"高晨曦"任务
运行findTask方法,控制台输出
说明这个用户有任务可以执行
我们继续走流程 执行completeTask方法
执行完后,流程其实就已经走完了。
这时候我们再运行findTask,啥都没有输入,已经没有任务了
OK 流程执行完,数据库表会发生什么变化呢?
首先ru开头的运行时候所有表的数据都没了,因为现在流程都走完了。不需要那些数据了
然后在hi开头的表里,存了不少数据,主要是用来归档查询用的
act_hi_taskinst 历史流程实例任务表加了一条任务数据
act_hi_procinst 历史流程实例实例表加了一条流程实例相关信息的数据(包括开始时间,结束时间等等信息)
act_hi_identitylink 历史流程实例参数者的表加了一条数据
act_hi_actinst 历史活动节点表加了三条流程活动节点信息的数据(每个流程实例具体的执行活动节点的信息)
- Activiti HelloWorld流程实现及原理
- Activiti HelloWorld实现
- 【Activiti 进阶一】简单流程实例helloworld
- Activiti工作流概念及入门案例HelloWorld
- activiti实现的请假流程
- Activiti——HelloWorld-模拟流程执行(三)
- Java HelloWorld实现及Java运行原理介绍
- 二级域名原理、实现流程及程序
- Filter实现原理及内部流程
- 【Activiti工作流】5.Activiti入门程序HelloWorld演示流程的执行(上)
- 【Activiti工作流】6.Activiti入门程序HelloWorld演示流程的执行(下)
- activiti 流程定义部署及查询
- Activiti基础介绍-helloworld
- Activiti基础教程--03(HelloWorld)
- Activiti基础教程--03(HelloWorld)
- 1.activiti工作流-helloworld
- activiti HelloWorld 入门demo
- Activiti 工作流 HelloWorld 02
- 内存溢出 out of memory与内存泄露 memory leak
- 位操作-leetcode 338 Counting Bits
- 安装Python
- 解决 Communications link failure due to underlying exception
- java的4种代码块
- Activiti HelloWorld流程实现及原理
- java8 in action 学习笔记 一
- POJ 2504 Bounding box 笔记
- Android 内存分析命令
- 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式
- js对象、数字深拷贝方式(转)
- hdu 3911 线段树的区间合并
- Websphere7.0修改JVM的内存设置 http://download.csdn.net/detail/zhaolong1990ok/5268650
- python3 网络爬虫(二)利用get请求获取网页的动态加载数据