Activiti-5.3工作流引擎-源码解析(流程文档解析)

简介:

前面我们通过BPMN20.xsd和Activiti自定义的XML Schema文件初步了解了业务流程模型的定义,那么现在我们来了解一下流程文档的解析过程,这个过程主要是通过代码解析来完成。

代码解析过程

       就代码解析还是承接《业务流程部署》一篇的“代码10”的片段来说吧。在解析之前我们先来看看Activiti5.3的微内核类图结构

Activiti-5.3工作流引擎-源码解析(流程文档解析) - homeland520 - 好好学习,天天向上

图1 

 

      (一)解析StartEvents

       根据“代码10”的代码片段,我们先看parseStartEvents(scopeElement, parentScope)的解析过程,该解析过程主要是创建startEventActivity实例,并将其放入流程定义processDefinition内。

parseStartEvents执行的主要过程:

  1. 解析并创建startEventActivity实例。
  2. 设置流程定义的初始化节点。
  3. 解析并创建startFormHandler实例。
  4. 设置流程定义的startFormHandler。
  5. 解析Activiti-5.2扩展的initiator属性,并将其设置到流程定义的属性列表里。
  6. 为startEventActivity设置活动行为执行器(NoneStartEventActivityBehavior)。

        上面提到了活动行为执行器,活动行为执行器的作用主要是执行流程转移的。这里我们查看一下activiti5.3流程引擎中的活动行为执行器的类结构图 

Activiti-5.3工作流引擎-源码解析(流程文档解析) - homeland520 - 好好学习,天天向上

 

图2

Activiti-5.3工作流引擎-源码解析(流程文档解析) - homeland520 - 好好学习,天天向上

 图3

Activiti-5.3工作流引擎-源码解析(流程文档解析) - homeland520 - 好好学习,天天向上

图4

Activiti-5.3工作流引擎-源码解析(流程文档解析) - homeland520 - 好好学习,天天向上

 图5

Activiti-5.3工作流引擎-源码解析(流程文档解析) - homeland520 - 好好学习,天天向上

 图6

        从图2-图6我们可以看出活动行为执行器的类结构及其相互关系。

         (二)解析Activities

        现在我们再看parseActivities(scopeElement,parentScope)的解析过程,该解析过程主要解析exclusiveGateway、 parallelGateway、scriptTask、serviceTask、businessRuleTask、task、manualTask、userTask、sendTask、receiveTask、subProcess、callActivity。现在我们一次看上面各种节点的解析过程。

parseExclusiveGateway执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(ExclusiveGatewayActivityBehavior)。
  3. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseParallelGateway执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(ParallelGatewayActivityBehavior)。
  3. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseScriptTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 获取子元素script及其文本内容,获取scriptFormat属性值,默认为juel,获取resultVariable属性值,这步主要是为第3步做准备。
  3. 为activity对象设置活动行为执行器(ScriptTaskActivityBehavior)。
  4. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseServiceTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 分别获取元素属性type、class、expression、delegateExpression、resultVariable、implementation、operationRef的值。
  3. 为activity对象设置活动行为执行器(ScriptTaskActivityBehavior)。
  4. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseBusinessRuleTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 初始化BusinessRuleTaskActivityBehavior实例ruleActivity并为其设置相关属性。
  3. 为activity对象设置活动行为执行器(BusinessRuleTaskActivityBehavior)。
  4. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(TaskActivityBehavior)。
  3. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseManualTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(ManualTaskActivityBehavior)。
  3. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseUserTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 初始化UserTaskActivityBehavior实例userTaskActivity并为其设置相关属性。
  3. 为activity对象设置活动行为执行器(UserTaskActivityBehavior)。
  4. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseSendTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(WebServiceActivityBehavior)。
  3. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseReceiveTask执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(ReceiveTaskActivityBehavior)。
  3. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseSubProcess执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(SubProcessActivityBehavior)。
  3. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseCallActivity执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 初始化CallActivityBehavior实例callActivityBehaviour并为其设置相关属性。
  3. 为activity对象设置活动行为执行器(CallActivityBehavior)。
  4. 解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseIntermediateCatchEvent执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(IntermediateCatchEventActivitiBehaviour)。

(三)解析EndEvents

parseEndEvents执行的主要过程:

  1. 解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。
  2. 为activity对象设置活动行为执行器(NoneEndEventActivityBehavior)。

(四)解析BoundaryEvents

 

(五)解析SequenceFlow

 

(六)解析ExecutionListeners

本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/5213561.html,如需转载请自行联系原作者
相关文章
|
8月前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
556 4
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1385 29
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
域名解析 弹性计算 负载均衡
新手上云教程参考:阿里云服务器租用、域名注册、备案及域名解析流程图文教程
对于想要在阿里云上搭建网站或应用的用户来说,购买阿里云服务器和注册域名,绑定以及备案的流程至关重要。本文将以图文形式为您介绍阿里云服务器购买、域名注册、备案及绑定的全流程,以供参考,帮助用户轻松上手。

热门文章

最新文章

推荐镜像

更多
  • DNS