Activiti
文章平均质量分 88
sadoshi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
activiti学习(二十八)——加签
设计思路加签本质上就是让多实例任务增加一个处理任务和新增处理人。实现其实很简单,无非是增加一个task,另外内置变量里的nrOfInstances、nrOfActiveInstances各加一。实现原创 2020-07-28 19:32:58 · 12099 阅读 · 26 评论 -
activiti学习(二十七)——涉及并行网关的节点跳转
这篇文章不会教大家如何对并行网关后的并行任务进行跳转。关于并行任务的跳转,分享牛大神有他的代码。不过我觉得并行网关分支出来的任务,无论从现实业务还是逻辑实现上,都不应该可以随意跳转。分享牛的跳转逻辑,无非是把并行分支的execution及其对应task都结束,然后跳转到目标节点上。然而这里其实涉及一些问题。从业务上来讲,某个分支流程,它自己是否要跳转到别的节点,不应该影响平行的其他任务节点,除非有明确的业务要求。从实现逻辑的角度来说,当存在多个并行网关多次分支的流程图中,跳转到某个节点时,到底需要提前结原创 2020-07-17 10:44:38 · 3382 阅读 · 6 评论 -
activiti学习(二十六)——流程虚拟机源码分析(五)——并行网关的行为
前言原创 2020-07-15 23:54:54 · 1271 阅读 · 0 评论 -
activiti学习(二十五)——多实例任务节点的跳转(退回、自由跳转功能)
概述相比普通任务节点跳转,多实例任务的跳转要考虑更多的因素,主要是因为多实例任务包含了父execution和子execution,子execution又有其对应的task,另外还有控制多实例任务的内置变量。这几个特殊点是处理多实例任务跳转的难点。关于普通节点跳转的处理,请参考前文《activiti学习(二十二)——常规任务节点跳转(退回、自由跳转功能)》解决思路...原创 2020-07-05 23:20:58 · 6094 阅读 · 13 评论 -
activiti学习(二十四)——自定义行为类
前言前面几篇文章,我们知道每个活动节点,都有对应的行为类。activiti的扩展性极好,我们当然也可以自定义自己的行为类。原创 2020-06-23 17:39:48 · 3915 阅读 · 2 评论 -
activiti学习(二十三)——流程虚拟机源码分析(四)——多实例任务的行为
前言通过《activiti学习(十七)——多实例任务的使用(会签功能)》一文,相信读者已经大概了解多实例任务的含义,以及流程行进中数据库的变化。本文会对流程虚拟机离开多实例任务的过程进行剖析。对象解析阶段在对象解析阶段,多实例任务便需要设置区别于普通任务的行为。我们回顾对象解析阶段源码BpmnParseHandlers.java:public class BpmnParseHandlers {//...... public void parseElement(BpmnPar.原创 2020-06-22 22:31:53 · 2965 阅读 · 0 评论 -
activiti学习(二十二)——常规任务节点跳转(退回、自由跳转功能)
概述通过前面几篇文章的了解,目前我们已经具备足够的知识进行常规userTask的跳转。在“中国式流程”中,驳回、自由跳转等皆是通过这种改方式实现。可以说这也是玩activiti流程比较重要的一环。activiti本身没有提供驳回和自由跳转的api,可能在老外的思维里,流程是不存在倒着走,或者随意跳转的,必须严格按照连线去走。我们必须通过自己手动去实现这样的功能。但是比较头疼的问题包括:如果逐个调用实体管理类修改数据库记录,首先必须彻底摸透流程虚拟机执行情况以及流程运转时数据库变化情况,这个过于复原创 2020-06-09 10:53:08 · 7361 阅读 · 9 评论 -
activiti学习(二十一)——流程虚拟机源码分析(三)——从进入到离开userTask
前言承接上文《activiti学习(二十)——流程虚拟机源码分析(二)——从开始节点离开到下个节点前》,假设execution接下来进入的节点是userTask,本文分析一下进入userTask的准备工作,到执行userTask的行为类,最后客户端调用taskService.complete方法离开userTask的过程。准备工作承接上文,会调用AtomicOperationTransitionCreateScope类:...原创 2020-06-08 11:29:49 · 5793 阅读 · 3 评论 -
activiti学习(二十)——流程虚拟机源码分析(二)——从开始节点离开到下个节点前
《activiti学习(十九)——流程虚拟机源码分析(一)——流程启动源码分析》一文中最后,流程从startEvent节点执行takeAll准备离开。本文我们分析一下从开始节点到下一个节点之前虚拟机做了什么。...原创 2020-06-05 23:46:22 · 2069 阅读 · 0 评论 -
activiti学习(十九)——流程虚拟机源码分析(一)——流程启动源码分析
流程虚拟机运转的主要工作,一个是选择流程走向,沿着连线走到对应的节点;第二个是调用对应节点的行为。不同的节点对应不同的行为,所以各个活动才有不同的功能,例如userTask、serviceTask、parallelGateWay、startEvent等等。本文来分析一下活动的行为类。...原创 2020-05-29 19:05:08 · 2587 阅读 · 1 评论 -
activiti学习(十八)——流程虚拟机主要类的架构
想用activiti玩转中国式流程,单纯依靠普通的XXXService的api是不够的,必须要深入到数据库以及流程虚拟机的层面,修改数据库以及流程虚拟机对象,才能实现加签、减签、驳回、自由跳转之类的操作。另外,由于直接操作数据库很可能会有遗漏或者误操作,因此比较靠谱的方法是调用那些处于“中层”的api。“高层”的api就是XXXService的api,“底层”的是实体管理类的api。要熟悉这些“中层”api,需要看看源码中,activiti是如何调用这些api,这些api具体又做了什么。这样才能比较安全地处原创 2020-05-15 18:43:54 · 1732 阅读 · 0 评论 -
activiti学习(十七)——多实例任务的使用(会签功能)
会签在中国式流程中是非常常见的需求。例如部门领导下发一个文件,需要部门里面每个员工看完之后提交流程以表示已阅。这时候需要使用activiti中的多实例任务。...原创 2020-05-07 12:05:05 · 9754 阅读 · 4 评论 -
activiti学习(十六)——并行网关、排他网关、包含网关
网关和分支是流程图中相当重要的一环。毕竟一个流程不可能是一条直线走到底的,可能需要并行处理,也可能需要根据条件的不同选择对应的路由,网关和分支的作用正是在此。本文主要探索一下这几种网关的常用方法,以及一些特殊情况会发生什么。...原创 2020-05-01 15:14:38 · 10795 阅读 · 0 评论 -
activiti学习(十五)——表达式的使用
本文开始重新回归一些activiti的基本使用。感觉前面太想展开源码和架构方面的探讨,但在这过程中,又涉及到activiti很多基本的用法我没有熟练使用,例如表达式、网关、多实例任务、作业、边界事件等等。导致在探讨源码的时候常常一笔带过,虽然对整体理解没有太大的问题,但是总感觉缺了点什么。所以后续决定也要熟练这些基本功能的使用。毕竟很多业务场景还是需要使用这些功能的。表达式简述activi...原创 2020-04-23 21:16:35 · 9613 阅读 · 0 评论 -
activiti学习(十四)——activiti数据库存储(三)——实体管理类封装mybatis调用原理
上两篇文章主要分析activiti数据库相关初始化、sessionFactory初始化及创建实体管理类的原理。实体管理类封装了activiti底层增删查改操作。上层命令类程序不需要直接去调用mybatis的sqlSession,通过实体管理类间接调用。本文通过例子分析实体管理类是如何调用mybaits的。我们以DeploymentEntityManager为例:public void i...原创 2020-04-21 15:20:54 · 1481 阅读 · 0 评论 -
activiti学习(十三)——activiti数据库存储(二)——SessionFactory架构与抽象工厂模式
看源码多了,从一开始看别人怎么实现,逐渐变成了喜欢研究别人设计的架构,看看别人的思路。activiti中使用了很多不同的设计模式,值得各位学习,日后用在自己的项目中,当然对这方面不感兴趣的请略过。本文主要是针对《activiti学习(十二)——activiti数据库存储(一)——数据连接初始化与mybatis封装》里面SessionFactory的架构进行分析。在那篇文章中,说SessionFac...原创 2020-04-16 11:39:12 · 1028 阅读 · 0 评论 -
activiti学习(十二)——activiti数据库存储(一)——数据连接初始化与mybatis封装原理
上一篇文章中,简述了全局事件监听器的使用,本文则对全局事件监听器的源头——事件转发器进行分析。上一章使用全局监听器时,会发现监听器能捕捉到很多事件。这些事件其实都是事件转发器调用已注册的监听器的onEvent方法实现的。...原创 2020-04-14 17:11:47 · 2857 阅读 · 0 评论 -
activiti学习(十一)——全局事件监听器的基本使用及其原理
在流程运转的过程中,流程引擎会发出很多不同的事件,前面的文章,我们通过执行监听器和任务监听器捕获到对应事件并进行处理。除了这两个监听器以外,activiti从5.15版开始加入了全局事件监听器,这样就不需要在每个活动上去绑定监听器。...原创 2020-04-04 12:55:55 · 9396 阅读 · 3 评论 -
activiti学习(十)——自定义对象解析器
上一篇博文分析了对象解析器的原理。本文来编写一个自定义对象解析器。考虑这样的场景:生产中我们常常在流程的上一环节选择下环节的处理人,然后再提交流程。之后流程运转到下一个环节后,会在对应的处理人名下,即userTask的candidate或assignee是上环节选中的处理人。上述的实现方式可以是这样,对象解析器在解析bpmn阶段,对userTask添加自定义任务监听器,该监听器主要作用是把流程...原创 2020-03-30 21:22:43 · 2196 阅读 · 6 评论 -
activiti学习(九)——对象解析器原理
在《activiti学习(六)——从bpmn文件转化为bpmnModel的过程》提到过,activiti会把bpmn图中的元素转化到bpmnModel中,然后再通过对象解析器,把各元素解析流程虚拟机识别的对象。本章主要讲解这个解析过程。activiti的元素非常多,这里我们仅介绍一下process及内部userTask、sequenceFlow的解析,其他元素请自行研究。简单来讲,流程虚拟机会...原创 2020-03-22 18:43:13 · 3060 阅读 · 3 评论 -
activiti学习(八)——自定义拦截器和命令类
上一章我们activiti的命令、拦截器等进行了剖析。我们已经很很熟悉其执行的原理,本章我们自己动手写拦截器和命令类。原创 2020-03-17 16:25:53 · 2226 阅读 · 0 评论 -
activiti学习(七)——命令模式和职责链模式在activiti中的应用
activiti中很多api的调用,最终会把这个调用封装成一个命令,使用命令模式去调用。另外还会把命令放在调用链上,当调用该命令时会依次调用职责链上的每一个拦截器(Interceptor),例如日志、事务相关拦截器,然后调用指定的命令。本章先对这两种设计模式进行介绍命令模式命令模式其作用是为了对“行为请求者”和“行为实现者”这两者进行解耦。下图是命令模式的UML图。其中HelloComma...原创 2020-03-16 23:18:39 · 2559 阅读 · 0 评论 -
activiti学习(六)——从bpmn文件转化为bpmnModel的过程
在《activiti学习(二)——activiti流程的部署》一文中,提到过activiti会把bpmn文件转化成bpmnModel。本文对将这个过程做介绍。我们从部署的实例入手,根据之前的部署命令deploymentBuilder.deploy()跟踪下去,查看DeploymentBuilderImpl.java:public Deployment deploy() { ret...原创 2020-03-10 19:01:42 · 9258 阅读 · 2 评论 -
activiti学习(五)——执行监听器与任务监听器的基本使用
本章先介绍监听器的基本原理和使用方法。当流程途径连线或者节点的时候,会触发对应的事件类型。监听器在生产中经常会用在几个方面:动态分配节点处理人。通过前一个节点设置的变量,在运行到下一个节点时设置对应的处理人;进行一些业务系统处理。例如发送邮件,或统计流程处理时长(公司按上班时间统计)、业务层面数据处理等等。activiti监听器activiti有两种监听器,分别是任务监听器和...原创 2020-03-09 16:30:35 · 22329 阅读 · 4 评论 -
activiti学习(四)——任务查询与任务提交
上一章流程启动后,根据流程图,会到达用户任务userTask1上。通常实际应用中,流程使用userTask比较多。因此本章就讲讲userTask提交。首先我们新建一个bpmn图,secondBPM.bpmn<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/...原创 2020-03-05 15:56:13 · 2935 阅读 · 0 评论 -
activiti学习(三)——activiti流程引擎的服务、数据库表与流程启动
activiti流程引擎的服务activit流程引擎为用户提供了好几种服务及api,用于查询和操作流程,通过ProcessEngine的getXXXService方法可以获取。现在对几个接下来会用得比较多的进行介绍:RepositoryService:主要用于查询和操作与部署有关的api。在流程部署的章节中,就是通过这个服务进行流程部署的; RuntimeService:流程实例的操作与...原创 2020-03-04 21:18:18 · 3005 阅读 · 0 评论 -
activiti学习(二)——activiti流程的部署
进行了流程引擎的构建和初始化之后,接下来要做的就是把写好的流程文档部署到流程引擎中,后续activiti.cfg.xml的配置如果没有特指的话,一般就用第一章提供的例子。首先画一个bpmn的图,可以通过集成开发环境的插件,也可以直接写xml形式,但是后缀名必须是bpmn或bpmn20.xml,引擎会对后缀名进行检查。这里先写一个xml形式的bpmn图firstBPM.bpmn:<...原创 2020-03-03 17:32:22 · 3289 阅读 · 0 评论 -
activiti学习(一)——activiti流程引擎的配置与初始化操作
前言activiti是影响力比较大的工作流引擎之一。虽然近年来由于发展观念等原因导致开发人员分道扬镳,flowable和camunda的发展势头都很猛,尤其是camunda,很有可能独占未来工作流引擎的鳌头。比较可惜目前市面上关于工作流引擎的教程比较少,flowable和camunda就更少了。而工作流引擎中比较基础的用户api通常很难以满足中国式流程(撤回、跳转等)需求。有幸拜读冀正、张志祥...原创 2020-03-03 15:00:36 · 5508 阅读 · 0 评论
分享