天天看点

Activiti 流程启动及节点流转源码分析

具体的流程图如下:

Activiti 流程启动及节点流转源码分析

流程图对应的xml文件如下:

Activiti 流程启动及节点流转源码分析

流程启动跟踪分析:

图一:

Activiti 流程启动及节点流转源码分析

图二:

Activiti 流程启动及节点流转源码分析

图三:

Activiti 流程启动及节点流转源码分析

图四:

Activiti 流程启动及节点流转源码分析

以上主要是跟踪分析了,三个节点之间的流转情况。

在流转的时候需要注意以下两个接口:

原子操作(atomicoperation)接口:

注意:

interpretableexecution接口:

单独摘出来的两个方法是图一中:

Activiti 流程启动及节点流转源码分析

上下文、原子操作、执行器实体三者相互调用的关键。

上图的具体调用情况如下:

executionentity类中的:

performoperation函数中调用上下文commandcontext类中的:

performoperation函数调用原子操作(atomicoperation)接口中的void execute(interpretableexecution execution)来处理。

该处的处理分为两种情况:

1、根据atomicoperation接口标识来继续进行流转

(再次调用executionentity类中的performoperation(atomicoperation executionoperation)方法)

比如:

process_start=》process_start_initial=》activity_execute。。。。。。

具体可以参考本文图一到图四的代码跟踪中的标识。

2、根据节点上的activitybehavior类进行不同的处理

Activiti 流程启动及节点流转源码分析

activiti节点(开始、结束、任务、网关等等)都是activity类型的,只是其挂的activitybehavior不同,通过不同的activitybehavior来实现相应的操作。