Flowable工作流引擎部署表单源码分析

总览图

Flowable工作流引擎部署表单源码分析

部署表单的接口

Flowable工作流引擎部署表单源码分析

表单定义可以来自于 form文件,也可以是一个json字符串。

  • json字符串
  • form文件

把json字符串放入form文件中

创建一个部署构造器FormDeploymentBuilder

Flowable工作流引擎部署表单源码分析

封装一个表单构造命令

new Command() {
    public FormDeploymentBuilder execute(CommandContext commandContext) {
        return new FormDeploymentBuilderImpl();
    }
});

-- Command 是一个接口
-- FormDeploymentBuilder是一个接口 作为范型传入Command接口中
-- execute是Command接口的一个方法 方法体是创建一个FormDeploymentBuilderImpl类(FormDeploymentBuilder接口的实现类)的对象

命令执行器

this.commandExecutor.execute(new Command(..))

通过命令执行器commandExecutor去执行命令,在流程引擎初始化的时候(initCommandInterceptors方法),会将这几个拦截器串联起来(LogInterceptor、SpringTransactionInterceptor、CommandContextInterceptor、TransactionContextInterceptor、BpmnOverrideContextInterceptor、CommandInvokerInterceptor)

Flowable工作流引擎部署表单源码分析

CommandExecutor接口

Flowable工作流引擎部署表单源码分析

CommandExecutor接口的实现类CommandExecutorImpl

Flowable工作流引擎部署表单源码分析

先执行第一个拦截器LogInterceptor,即调用LogInterceptor.execute方法

Flowable工作流引擎部署表单源码分析

Flowable工作流引擎部署表单源码分析

通过LogInterceptor对象的next属性获取下一个拦截器SpringTransactionInterceptor,然后执行SpringTransactionInterceptor拦截器中的execute方法,依次类推,直到最后一个拦截器CommandInvoker

Flowable工作流引擎部署表单源码分析

往操作对列中添加一个操作命令

agenda.planOperation(new Runnable() {
    public void run() {
       commandContext.setResult(command.execute(commandContext));
    }
});

-- command就是上面封装的FormDeploymentBuilderImpl命令

-- 队列是LinkedList集合,每一个元素是一个操作命令线程,等后续从对列中获取元素,直接run就执行任务了
Flowable工作流引擎部署表单源码分析

以上就是获取对列中任务并执行的过程,而这个任务就是封装的FormDeploymentBuilderImpl命令,执行完这个命令就FormDeploymentBuilder接口,然后调用deploy方法,

Flowable工作流引擎部署表单源码分析

该过程拦截器校验的过程都是一样的,区别在于执行的命令不同,这次执行的命令是DeployCmd

Flowable工作流引擎部署表单源码分析

执行完该命令就会在ACT_APP_DEPLOYMENT表生成一个部署记录了

Flowable工作流引擎部署表单源码分析

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章