activiti流程跟踪图算法
流程跟踪图-推导算法
工作中使用activiti实现流程图相关业务,但是上线后遇到问题,偶尔流程图出不来。查阅了一下画流程图的实现,基本上是参见:activiti-流程图颜色变化之一篇。
核心类,参见:ActivitiHistoryGraphBuilder、Graph;
实际上,算法思路是通过act_hi_actinst来查找到走过的历史任务节点,并按开始时间排序。对这些历史节点遍历,分别查找每个节点的进边(FromNode-Edge-ToNode),具体的实现是:ActivitiHistoryGraphBuilder.findPreviousEdge()方法,查找的方式是找到时间最近的上一个节点。利用的原理是:每一个节点,只能有一条进线;
本来一般情况也没问题,但是运行中发现了一些情况,活动的ID偶尔会错序,导致算法出问题,从而流程图出不来。
可以说,这个算法是对特定清醒下的一个子演算,不充分。
实际activiti算法
之前一直不明白act_hi_actinst表中的execution_id_是一个什么意思,还有查询有Query,NativeQuery,今天无意中翻看UserGuide的时候突然发现了它的意义,果然强大!!
remember a process instance consists of a tree of executions
具体意义参见下图:

这个内容在csdn中,进行了一个自问自答activiti怎样根据act_hi_actinst记录获取流程路线
流程存储结构
一个整体的存储逻辑结构如下图所示:
1.Node是一个声明式的接口,表名它的子类是存储结构中的一个元素;
2.Element是Node的一个实现类,存储的是具体实际的activiti元素;
3.PlaceHolder是Node的一个实现类,它是一个占位符,里面用Map存储了分支子线;
Key:executionId;
Value:List<Node> ;
因为元素还可能是占位符,代表分支,所以这里是Node;具体在解析的时候,使用instanceof来进行实际类型检测解析。

activiti流程跟踪图算法的更多相关文章
- 工作流学习——Activiti流程实例、任务管理四步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46646565 ***************************************** ...
- I.MX6 Linux Qt 启动流程跟踪
/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 ...
- 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(三)
题外话: 最近在忙公司的云项目空闲时间不是很多,所以很久没来更新,今天补上一篇! 回顾: 前几篇介绍了一下设计器的界面和Draw2d基础知识,这篇讲解一下本设计器如何扩展Draw2d. 进入主题: 先 ...
- Buildroot 打包文件系统流程跟踪
/********************************************************************************* * Buildroot 打包文件系 ...
- activiti 流程发起人控制
最近做activiti流程发起人的控制,最开始的想法是新建一张表 ,通过控制流程定义id与发起人id进行控制,如果这样每次发布新的流程就必须 重新设置流程发起人,因为通过流程定义不能获取流程模型id, ...
- activiti 流程部署 保存流程图到数据库 保存二进制图片 存储失败
activiti 流程部署 保存流程图到数据库 保存二进制图片 存储失败 具体错误如下 具体 junit测试 结果 :提示如下: 解决方法: 数据库版本不同 无法保存二进制文件到数据库表中!5.5. ...
- Activiti 学习(三)—— Activiti 流程启动并完成
Activiti 流程启动 流程定义部署后,就可以通过工作流管理业务流程了,也就是说前文部署的出差申请流程可以使用了.针对该流程,启动一个流程表示发起一个新的出差申请单,这就相当于 java 类与 j ...
- 从零开始学习和改造activiti流程引擎的13天,自己记录一下
day#1(11.13) 尝试通过spring boot 集成最新版activiti 7,但是苦于官方的文档基本为空,无法完成spring boot的配置,最终按照activiti 6的文档,手工初始 ...
- Activiti 流程启动及节点流转源代码分析
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文主要是以activiti-study中的xiaomage.xml流程图为例进行跟踪分析 详细的 ...
随机推荐
- [转贴] VIM 常用快捷键 --一直记不住
vim 常用快捷键 原帖地址: https://www.cnblogs.com/tianyajuanke/archive/2012/04/25/2470002.html 1.vim ~/.vimrc ...
- SVN for Mac
SVN for Mac https://www.wikihow.com/Install-Subversion-on-Mac-OS-X https://subversion.apache.org/pac ...
- Shell命令——文件目录
Linux只有一个文件系统树,不同的硬件设备可以挂载在不同目录下. 文件或目录有两种表示方式: - 绝对路径:从根目录”/”开始 - 相对路径:从工作目录开始,使用”..”指向父目录,”.”指向当 ...
- JavaFile类和递归
八.File类和递归 8.1 概述 java.io.File 类时文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和产出等操作. 8.2 构造方法 public File(String pa ...
- BZOJ1815 SHOI2006有色图(Polya定理)
置换数量是阶乘级别的,但容易发现本质不同的点的置换数量仅仅是n的整数拆分个数,OEIS(或者写个dp或者暴力)一下会发现不是很大,当n=53时约在3e5左右. 于是暴力枚举点的置换,并且发现根据点的置 ...
- MT【76】直线系
解答 :答案是3,4.
- 认清Android框架 MVC,MVP和MVVM
编者按:现在很多时候,我们都是面向搜索(或 Google 或百度).GitHub 编程,那么,在早期没有互联网的情况下,该如何学习编程,成为一名真正的开发者?亦或是作为一名小白,如何进入互联网编程时代 ...
- BZOJ1185 [HNOI2007]最小矩形覆盖 【旋转卡壳】
题目链接 BZOJ1185 题解 最小矩形一定有一条边在凸包上,枚举这条边,然后旋转卡壳维护另外三个端点即可 计算几何细节极多 维护另外三个端点尽量不在这条边上,意味着左端点尽量靠后,右端点尽量靠前, ...
- 分库分表中间件sharding-jdbc的使用
数据分片产生的背景,可以查看https://shardingsphere.apache.org/document/current/cn/features/sharding/,包括了垂直拆分和水平拆分的 ...
- 前端学习 -- Css -- overflow
子元素默认是存在于父元素的内容区中,理论上讲子元素的最大可以等于父元素内容区大小.如果子元素的大小超过了父元素的内容区,则超过的大小会在父元素以外的位置显示,超出父元素的内容,我们称为溢出的内容.父元 ...