总览图
部署表单的接口
表单定义可以来自于 form文件,也可以是一个json字符串。
把json字符串放入form文件中
创建一个部署构造器FormDeploymentBuilder
封装一个表单构造命令
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)
CommandExecutor接口
CommandExecutor接口的实现类CommandExecutorImpl
先执行第一个拦截器LogInterceptor,即调用LogInterceptor.execute方法
通过LogInterceptor对象的next属性获取下一个拦截器SpringTransactionInterceptor,然后执行SpringTransactionInterceptor拦截器中的execute方法,依次类推,直到最后一个拦截器CommandInvoker
往操作对列中添加一个操作命令
agenda.planOperation(new Runnable() {
public void run() {
commandContext.setResult(command.execute(commandContext));
}
});
-- command就是上面封装的FormDeploymentBuilderImpl命令
-- 队列是LinkedList集合,每一个元素是一个操作命令线程,等后续从对列中获取元素,直接run就执行任务了
以上就是获取对列中任务并执行的过程,而这个任务就是封装的FormDeploymentBuilderImpl命令,执行完这个命令就FormDeploymentBuilder接口,然后调用deploy方法,
该过程拦截器校验的过程都是一样的,区别在于执行的命令不同,这次执行的命令是DeployCmd
执行完该命令就会在ACT_APP_DEPLOYMENT表生成一个部署记录了
留言与评论(共有 0 条评论) “” |