Flowable 6.3.1

1.启动部署:

     默认default模式,将所有bpmn组成一个group,group中任何一个bpmn更新,部署时:

         a) 插入act_re_deployment表1条新记录,spring自动部署记录

         b) 插入act_re_procdef表每个bpmn 1条新记录

         c) 插入act_ge_bytearray表每个bpmn 2条记录,存bpmn文件和对应bpmn的png

2.启动工作流:

    1. 通过key从ACT_RE_PROCDEF中获取org.flowable.engine.repository.ProcessDefinition;

          ProcessDefinition.xml ==> selectLatestProcessDefinitionByKey (param:key,processDefinitionKey; 

           value = processDefinitionKey的值);

    2. 得到ProcessDefinition的属性processDefinitionId,deploymentId;

    3. 通过processDefinitionId从processDefinitionCache中获取ProcessDefinitionCacheEntry;

    4. 如果ProcessDefinitionCacheEntry不存在,通过deploymentID

        从ACT_RE_DEPLOYMENT获取org.flowable.engine.impl.persistence.entity.DeploymentEntity;

    5. DeploymentManager.deploy,参数是上一步的DeploymentEntity,将结果放入processDefinitionCache中;

    6. ProcessInstanceHelper.createProcessInstance,参数是processDefinition和startProcessInstance=true;

    7. 从processDefinitionCache中获取对应的org.flowable.bpmn.model.Process;

    8. 根据上一步的process获取流程起始点(initialFlowElement)org.flowable.bpmn.model.FlowElement;

    9. ProcessInstanceHelper.createAndStartProcessInstanceWithInitialFlowElement,

          a). 先生成org.flowable.engine.impl.persistence.entity.ExecutionEntity,生成processInstanceId

          b). ProcessInstanceHelper.startProcessInstance

    10. 插入表中记录

          a). 插入ACT_HI_PROCINST表1条记录

          b). 插入ACT_RU_EXECUTION表2条记录,主流程和第一个节点流程

          c). 插入ACT_RU_JOB表1条记录

    11. 异步job执行流程

          a). 根据上一步中的job的id,查询ACT_RU_JOB表信息,得到Job的executionId

          b). 根据上一步中的executionId,查询ACT_RU_EXECUTION记录,获取当前待执行节点

          c). 执行节点功能

          d). 执行完成后,插入ACT_HI_ACTINST表1条记录,已执行节点执行信息

          e). ACT_RU_JOB表中新增一条记录,记录executionId

          f). ACT_RU_EXECUTION表更新对应executionId和REV_的记录,REV_自增1,ACT_ID_设置为待执行的节点名称

          g). ACT_RU_JOB表中删除已执行的记录

          h). 流程执行完成后,更新ACT_HI_PROCINST的REV_自增1

    12. 异步job执行流程失败

          a). asyncExecutorNumberOfRetries默认为3

          b). asyncExecutorNumberOfRetries设置为0,将job移到ACT_RU_DEADLETTER_JOB,

                在ACT_GE_BYTEARRAY中记录异常,

                ACT_RU_DEADLETTER_JOB.EXCEPTION_STACK_ID_ = ACT_GE_BYTEARRAY.ID_

          c). asyncExecutorNumberOfRetries不为0,将job移动到ACT_RU_TIMER_JOB, 10秒后再执行

          d). 在ACT_GE_BYTEARRAY中记录异常,

                ACT_RU_DEADLETTER_JOB.EXCEPTION_STACK_ID_ = ACT_GE_BYTEARRAY.ID_

          e). 10秒后,将ACT_RU_TIMER_JOB的记录转移到ACT_RU_JOB,删除ACT_RU_TIMER_JOB中记录

          f). 执行job,失败重复3,4,5;知道重试次数超限,执行2

你可能感兴趣的:(Flowable 6.3.1)