流程定义和部署管理——删除流程定义
来源:互联网 发布:网上直销软件 编辑:程序博客网 时间:2024/04/30 15:44
删除流程定义的url类似于:
/workflow/process/delete?deploymentId=${process.deploymentId}
调用的方法也很简单
/** * 删除部署的流程,级联删除流程实例 * * @param deploymentId 流程部署ID */ @RequestMapping(value = "/process/delete") public String delete(@RequestParam("deploymentId") String deploymentId) { repositoryService.deleteDeployment(deploymentId, true); return "redirect:/workflow/process-list"; }
注意第二个参数,是否递归删除
来看一下具体实现:
public void deleteDeployment(String deploymentId, boolean cascade) { this.commandExecutor.execute(new DeleteDeploymentCmd(deploymentId, cascade)); }
public class DeleteDeploymentCmd implements Command<Void>, Serializable{ private static final long serialVersionUID = 1L; protected String deploymentId; protected boolean cascade; public DeleteDeploymentCmd(String deploymentId, boolean cascade) { this.deploymentId = deploymentId; this.cascade = cascade; } public Void execute(CommandContext commandContext) { if (this.deploymentId == null) { throw new ActivitiIllegalArgumentException("deploymentId is null"); } commandContext.getProcessEngineConfiguration().getDeploymentManager().removeDeployment(this.deploymentId, this.cascade); return null; }}
DeploymentManager中
public void removeDeployment(String deploymentId, boolean cascade) { DeploymentEntityManager deploymentEntityManager = Context.getCommandContext().getDeploymentEntityManager(); DeploymentEntity deployment = deploymentEntityManager.findDeploymentById(deploymentId); if (deployment == null) { throw new ActivitiObjectNotFoundException("Could not find a deployment with id '" + deploymentId + "'.", DeploymentEntity.class); } List processDefinitions = new ProcessDefinitionQueryImpl(Context.getCommandContext()).deploymentId(deploymentId).list(); ActivitiEventDispatcher eventDispatcher = Context.getProcessEngineConfiguration().getEventDispatcher(); for (ProcessDefinition processDefinition : processDefinitions) { if (eventDispatcher.isEnabled()) { eventDispatcher.dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_DELETED, processDefinition)); } } deploymentEntityManager.deleteDeployment(deploymentId, cascade); if (eventDispatcher.isEnabled()) { eventDispatcher.dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_DELETED, deployment)); } for (ProcessDefinition processDefinition : processDefinitions) this.processDefinitionCache.remove(processDefinition.getId()); }
DeploymentEntityManager中
public void deleteDeployment(String deploymentId, boolean cascade) { List processDefinitions = getDbSqlSession().createProcessDefinitionQuery().deploymentId(deploymentId).list(); List models = getDbSqlSession().createModelQueryImpl().deploymentId(deploymentId).list(); for (Model model : models) { ModelEntity modelEntity = (ModelEntity)model; modelEntity.setDeploymentId(null); getModelManager().updateModel(modelEntity); } if (cascade) { for (ProcessDefinition processDefinition : processDefinitions) { String processDefinitionId = processDefinition.getId(); getProcessInstanceManager().deleteProcessInstancesByProcessDefinition(processDefinitionId, "deleted deployment", cascade); } } for (ProcessDefinition processDefinition : processDefinitions) { String processDefinitionId = processDefinition.getId(); getIdentityLinkManager().deleteIdentityLinksByProcDef(processDefinitionId); getEventSubscriptionManager().deleteEventSubscriptionsForProcessDefinition(processDefinitionId); } getProcessDefinitionManager().deleteProcessDefinitionsByDeploymentId(deploymentId); for (ProcessDefinition processDefinition : processDefinitions) { List timerStartJobs = Context.getCommandContext().getJobEntityManager().findJobsByConfiguration("timer-start-event", processDefinition.getKey()); if ((timerStartJobs != null) && (timerStartJobs.size() > 0)) { long nrOfVersions = new ProcessDefinitionQueryImpl(Context.getCommandContext()).processDefinitionKey(processDefinition.getKey()).count(); long nrOfProcessDefinitionsWithSameKey = 0L; for (ProcessDefinition p : processDefinitions) { if ((!p.getId().equals(processDefinition.getId())) && (p.getKey().equals(processDefinition.getKey()))) { nrOfProcessDefinitionsWithSameKey += 1L; } } if (nrOfVersions - nrOfProcessDefinitionsWithSameKey <= 1L) { for (Job job : timerStartJobs) { if (Context.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) { Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.JOB_CANCELED, job, null, null, processDefinition.getId())); } ((JobEntity)job).delete(); } } } List findEventSubscriptionsByConfiguration = Context.getCommandContext().getEventSubscriptionEntityManager().findEventSubscriptionsByConfiguration("message", processDefinition.getId(), processDefinition.getTenantId()); for (EventSubscriptionEntity eventSubscriptionEntity : findEventSubscriptionsByConfiguration) { eventSubscriptionEntity.delete(); } } getResourceManager().deleteResourcesByDeploymentId(deploymentId); getDbSqlSession().delete("deleteDeployment", deploymentId); }
ExecutionEntityManager中
public void deleteProcessInstancesByProcessDefinition(String processDefinitionId, String deleteReason, boolean cascade) { List processInstanceIds = getDbSqlSession().selectList("selectProcessInstanceIdsByProcessDefinitionId", processDefinitionId); for (String processInstanceId : processInstanceIds) { deleteProcessInstance(processInstanceId, deleteReason, cascade); } if (cascade) Context.getCommandContext().getHistoricProcessInstanceEntityManager().deleteHistoricProcessInstanceByProcessDefinitionId(processDefinitionId); } public void deleteProcessInstance(String processInstanceId, String deleteReason, boolean cascade) { ExecutionEntity execution = findExecutionById(processInstanceId); if (execution == null) { throw new ActivitiObjectNotFoundException("No process instance found for id '" + processInstanceId + "'", ProcessInstance.class); } CommandContext commandContext = Context.getCommandContext(); commandContext.getTaskEntityManager().deleteTasksByProcessInstanceId(processInstanceId, deleteReason, cascade); execution.deleteCascade(deleteReason); if (cascade) commandContext.getHistoricProcessInstanceEntityManager().deleteHistoricProcessInstanceById(processInstanceId); }
如果递归删除,会删除流程定义,流程实例以及各种历史实例……
0 0
- 流程定义和部署管理——删除流程定义
- 流程定义和部署管理——流程定义列表
- 流程定义和部署管理——运行中的流程
- 流程定义和部署管理——部署
- 流程定义管理 流程部署
- 流程定义和部署管理——激活、挂起
- Jbpm笔记之一 -- 流程定义管理( 部署和定义查询、删除、查看流程图)
- 传智播客oa学习,部署和管理流程定义
- Activiti流程定义部署
- activiti流程定义部署。
- Activiti基础教程--04管理流程定义(流程定义部署ZIP/classpath)、查看(获取流程定义图图片)、删除,不能修改
- Activiti基础教程--04管理流程定义(流程定义部署ZIP/classpath)、查看(获取流程定义图图片)、删除,不能修改
- OA总结—jbpm管理流程定义
- activiti学习--04流程定义:流程定义组成+部署流程定义+查询流程定义+删除流程定义+删除流程定义+查询最新版本的流程定+查询最新版本的流程定义
- Activiti流程定义删除
- activiti 删除流程定义
- java流程管理 之 jbpm流程定义、发布、查看、删除
- Jbpm流程定义的打包和部署
- java之yield(),sleep(),wait()区别详解-备忘笔记
- 黑马程序员—C语言关键字、标识符、注释
- 【HDU 5206】Four Inages Strategy —— 计算几何之空间正方形
- inux命令之nethogs命令流量统计
- POJ 1611The Suspects 并查集问题
- 流程定义和部署管理——删除流程定义
- Failed to instantiate the default view controller for UIMainStoryboardFile
- hdu2713 dp
- 【C语言】请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”
- 基于优盘方式的WINDOWS 7系统安装
- 日拱一卒(五十)
- web_find
- 创业书籍
- 【JAVA学习】1.语言概述+生态圈