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流程图为例进行跟踪分析 详细的 ...
随机推荐
- v-if 和 v-show的区别
简单来说,v-if 的初始化较快,但切换代价高:v-show 初始化慢,但切换成本低 1.共同点 都是动态显示DOM元素 2.区别 (1)手段: v-if是动态的向DOM树内添加或者删除DOM元素: ...
- 【bzoj3881】[Coci2015]Divljak AC自动机+树链的并+DFS序+树状数组
题目描述 Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操作有两种形式: “1 P”,Bob往自己的集合里添加了一个字符串P. ...
- linux 命令大全,我去
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- [BZOJ2957] [THU2013集训] 楼房重建
套路套路套路套路套路套路套路套路套路套路... 我只能这么说:一道裸得只剩下套路的水题... 线段树维护单调栈,显然,能够看到的楼房一定是递增的,但不是按高度递增,而是按高度和坐标的比值递增 所以我们 ...
- spark性能调优(四) spark shuffle中JVM内存使用及配置内幕详情
转载:http://www.cnblogs.com/jcchoiling/p/6494652.html 引言 Spark 从1.6.x 开始对 JVM 的内存使用作出了一种全新的改变,Spark 1. ...
- Libre 6007 「网络流 24 题」方格取数 / Luogu 2774 方格取数问题 (网络流,最大流)
Libre 6007 「网络流 24 题」方格取数 / Luogu 2774 方格取数问题 (网络流,最大流) Description 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从 ...
- Spring中 <context:property-placeholder 的使用与解析 .properties 配置文件的加载
转: Spring中property-placeholder的使用与解析 Spring中property-placeholder的使用与解析 我们在基于spring开发应用的时候,一般都会将数据库的配 ...
- springboot整合mybatis中的mapper不影响使用,但是总是提示红线
解决方案: 如图:
- DNS ------ windows执行DNS过程
前言 TCP/IP协议是网络通讯的基础,平常在对TCP/IP协议设置时会涉及到IP地址,子网掩码,默认网关和DNS这几个参数.这里我们主要谈下IP地址和DNS这两个参数之间的关系. 首先计算机在网络中 ...
- CentOS 7 系统root用户忘记密码的重置方法
在一台服务器我们忘记了root的账号或者root账号错误怎么办,我们只有进入到内核里面去修改,具体的操作如下: 1.进入内核 在开机的时候出现下图的界面时 按e键进入内核入下图 2.进入单用户模式 在 ...