您的位置:首页 > 其它

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

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

代码解析过程

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



图1

(一)解析StartEvents

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

parseStartEvents执行的主要过程:

解析并创建startEventActivity实例。

设置流程定义的初始化节点。

解析并创建startFormHandler实例。

设置流程定义的startFormHandler。

解析Activiti-5.2扩展的initiator属性,并将其设置到流程定义的属性列表里。

为startEventActivity设置活动行为执行器(NoneStartEventActivityBehavior)。

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



图2



图3



图4



图5



图6

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

(二)解析Activities

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

parseExclusiveGateway执行的主要过程:


解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(ExclusiveGatewayActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseParallelGateway执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(ParallelGatewayActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseScriptTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

获取子元素script及其文本内容,获取scriptFormat属性值,默认为juel,获取resultVariable属性值,这步主要是为第3步做准备。

为activity对象设置活动行为执行器(ScriptTaskActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseServiceTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

分别获取元素属性type、class、expression、delegateExpression、resultVariable、implementation、operationRef的值。

为activity对象设置活动行为执行器(ScriptTaskActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseBusinessRuleTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

初始化BusinessRuleTaskActivityBehavior实例ruleActivity并为其设置相关属性。

为activity对象设置活动行为执行器(BusinessRuleTaskActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(TaskActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseManualTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(ManualTaskActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseUserTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

初始化UserTaskActivityBehavior实例userTaskActivity并为其设置相关属性。

为activity对象设置活动行为执行器(UserTaskActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseSendTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(WebServiceActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseReceiveTask执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(ReceiveTaskActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseSubProcess执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(SubProcessActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseCallActivity执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

初始化CallActivityBehavior实例callActivityBehaviour并为其设置相关属性。

为activity对象设置活动行为执行器(CallActivityBehavior)。

解析并创建ExecutionListener的实例,同时将其设置到actvity实例内。

parseIntermediateCatchEvent执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(IntermediateCatchEventActivitiBehaviour)。

(三)解析EndEvents

parseEndEvents执行的主要过程:

解析并创建ActivityImpl实例activity,创建的过程中主要依赖的属性是“id”,该属性在所有的Activity中不允许重复。

为activity对象设置活动行为执行器(NoneEndEventActivityBehavior)。

(四)解析BoundaryEvents

(五)解析SequenceFlow

(六)解析ExecutionListeners

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: