Activiti源码跟踪之流程部署
2017-09-07 21:51
501 查看
部署涉及到的表:ACT_GE_BYTEARRAY、ACT_RE_MODEL、ACT_RE_PROCDEF
参考:http://www.jianshu.com/p/0aeb725c1c9a
1、流程部署调用:
![](https://img-blog.csdn.net/20170907215953641?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg2NzY5OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
RepositoryServiceImpl的createDeployment方法返回DeploymentBuilder对象,该对象是一个部署管理接口,含有deploy()等方法。
DeploymentBuilderImpl的deploy方法调用repositoryService的deploy方法:
2、RepositoryServiceImpl的deploy方法通过命令模式调用
3、DeployCmd.execute():
部署使用DeploymentEntity对象。
deployment.setNew(true):第一次部署
insertDeployment(deployment):insert的是DeploymentEntity对象,存入表
deploymentSettings进行设置参数
deploy(deployment, deploymentSettings):部署
重点看下部署的方法:BpmnDeployer.deploy(deployment, deploymentSettings):方法很长,涉及到对Bpmn解析,对ProcessDefinitionEntity对象赋值,生成processDefinitionId并insert入库等一系列操作。其中最后几行代码:
分别将processDefinition放入DeploymentCache和ProcessDefinitionInfoCache
因为流程定义的数据不会改变,为了避免每次使用流程定义时都访问数据库,所以在流程进行部署之后,生成的流程定义会放在缓存中。
参考:http://www.jianshu.com/p/0aeb725c1c9a
1、流程部署调用:
RepositoryService.createDeployment().deploy();
RepositoryServiceImpl的createDeployment方法返回DeploymentBuilder对象,该对象是一个部署管理接口,含有deploy()等方法。
public DeploymentBuilder createDeployment() { return commandExecutor.execute(new Command<DeploymentBuilder>() { @Override public DeploymentBuilder execute(CommandContext commandContext) { return new DeploymentBuilderImpl(RepositoryServiceImpl.this); } }); }
DeploymentBuilderImpl的deploy方法调用repositoryService的deploy方法:
public Deployment deploy() { return repositoryService.deploy(this); }
2、RepositoryServiceImpl的deploy方法通过命令模式调用
LogInterceptor、
SpringTransactionInterceptor、
CommandContextInterceptor拦截器之后,最后
CommandContextInterceptor会调用DeployCmd.execute()方法
public Deployment deploy(DeploymentBuilderImpl deploymentBuilder) { return commandExecutor.execute(new DeployCmd<Deployment>(deploymentBuilder)); }
3、DeployCmd.execute():
部署使用DeploymentEntity对象。
public Deployment execute(CommandContext commandContext) { ...... deployment.setNew(true); // Save the data commandContext .getDeploymentEntityManager() .insertDeployment(deployment); if (commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) { commandContext.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent( ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, deployment)); } // Deployment settings Map<String, Object> deploymentSettings = new HashMap<String, Object>(); deploymentSettings.put(DeploymentSettings.IS_BPMN20_XSD_VALIDATION_ENABLED, deploymentBuilder.isBpmn20XsdValidationEnabled()); deploymentSettings.put(DeploymentSettings.IS_PROCESS_VALIDATION_ENABLED, deploymentBuilder.isProcessValidationEnabled()); // Actually deploy commandContext .getProcessEngineConfiguration() .getDeploymentManager() .deploy(deployment, deploymentSettings); ...... }
deployment.setNew(true):第一次部署
insertDeployment(deployment):insert的是DeploymentEntity对象,存入表
deploymentSettings进行设置参数
deploy(deployment, deploymentSettings):部署
重点看下部署的方法:BpmnDeployer.deploy(deployment, deploymentSettings):方法很长,涉及到对Bpmn解析,对ProcessDefinitionEntity对象赋值,生成processDefinitionId并insert入库等一系列操作。其中最后几行代码:
public void deploy(DeploymentEntity deployment, Map<String, Object> deploymentSettings) { 4000 ...... // Add to cache DeploymentManager deploymentManager = processEngineConfiguration.getDeploymentManager(); deploymentManager.getProcessDefinitionCache().add(processDefinition.getId(), processDefinition); addDefinitionInfoToCache(processDefinition, processEngineConfiguration, commandContext); ...... }
分别将processDefinition放入DeploymentCache和ProcessDefinitionInfoCache
因为流程定义的数据不会改变,为了避免每次使用流程定义时都访问数据库,所以在流程进行部署之后,生成的流程定义会放在缓存中。
相关文章推荐
- 跟踪activiti创建流程引擎源码
- 四、Activiti 部署的三种方式与部署查询流程查询源码
- activiti部署含中文的流程失败
- activiti部署流程定义时出错:INSERT INTO ACT_GE_BYTEARRAY,修改数据库编码
- Activiti基础教程--04管理流程定义(流程定义部署ZIP/classpath)、查看(获取流程定义图图片)、删除,不能修改
- Activiti基础教程--04管理流程定义(流程定义部署ZIP/classpath)、查看(获取流程定义图图片)、删除,不能修改
- activiti web流程设计器 工作流的 整合视频教程 SSM和独立部署
- activiti 部署流程定义(InputStream) 流程变量设置 及获取流程变量、查询流程变量历史表
- Activiti 流程启动及节点流转源码分析
- activiti - 流程跟踪图
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
- Activiti系列:带有serviceTask的或者定时启动任务的流程部署失败的原因分析
- 跟踪源码运行流程---SpringMVC学习笔记(四)
- activiti部署流程中文乱码解决方法
- activiti web流程设计器 工作流的 整合视频教程 SSM和独立部署
- activiti自定义流程之整合(四):整合自定义表单部署流程定义
- activiti web流程设计器 工作流的 整合视频教程 SSM和独立部署
- activiti学习--04流程定义:流程定义组成+部署流程定义+查询流程定义+删除流程定义+删除流程定义+查询最新版本的流程定+查询最新版本的流程定义
- activiti web流程设计器 工作流的 整合视频教程 SSM和独立部署
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署