Flowable源码地址:https://github.com/flowable/flowable-engine
包路径:org.flowable.engine.impl.persistence.entity
DeploymentEntityManager 部署实体管理器接口类
package org.flowable.engine.impl.persistence.entity;
import java.util.List;
import java.util.Map;
import org.flowable.common.engine.impl.persistence.entity.EntityManager;
import org.flowable.engine.impl.DeploymentQueryImpl;
import org.flowable.engine.repository.Deployment;
/**
* @author Joram Barrez
*/
public interface DeploymentEntityManager extends EntityManager<DeploymentEntity> {
// 根据生命周期查询部署
List<Deployment> findDeploymentsByQueryCriteria(DeploymentQueryImpl deploymentQuery);
// 获取部署资源名称
List<String> getDeploymentResourceNames(String deploymentId);
// 根据本地方法查询部署
List<Deployment> findDeploymentsByNativeQuery(Map<String, Object> parameterMap);
// 根据本地方法查询部署数量
long findDeploymentCountByNativeQuery(Map<String, Object> parameterMap);
// 根据生命周期查询部署数量
long findDeploymentCountByQueryCriteria(DeploymentQueryImpl deploymentQuery);
// 移除部署
void deleteDeployment(String deploymentId, boolean cascade);
}
DeploymentEntityManagerImpl 部署实体管理器实现类
package org.flowable.engine.impl.persistence.entity;
import java.util.List;
import java.util.Map;
import org.flowable.bpmn.constants.BpmnXMLConstants;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.EventDefinition;
import org.flowable.bpmn.model.ExtensionElement;
import org.flowable.bpmn.model.Message;
import org.flowable.bpmn.model.MessageEventDefinition;
import org.flowable.bpmn.model.SignalEventDefinition;
import org.flowable.bpmn.model.StartEvent;
import org.flowable.bpmn.model.TimerEventDefinition;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
import org.flowable.common.engine.api.repository.EngineResource;
import org.flowable.common.engine.api.scope.ScopeTypes;
import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.common.engine.impl.util.CollectionUtil;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.delegate.event.impl.FlowableEventBuilder;
import org.flowable.engine.impl.DeploymentQueryImpl;
import org.flowable.engine.impl.ModelQueryImpl;
import org.flowable.engine.impl.ProcessDefinitionQueryImpl;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.context.Context;
import org.flowable.engine.impl.event.EventDefinitionExpressionUtil;
import org.flowable.engine.impl.jobexecutor.TimerEventHandler;
import org.flowable.engine.impl.jobexecutor.TimerStartEventJobHandler;
import org.flowable.engine.impl.persistence.entity.data.DeploymentDataManager;
import org.flowable.engine.impl.util.CorrelationUtil;
import org.flowable.engine.impl.util.CountingEntityUtil;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.flowable.engine.impl.util.TimerUtil;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.Model;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.eventsubscription.api.EventSubscription;
import org.flowable.eventsubscription.api.EventSubscriptionBuilder;
import org.flowable.eventsubscription.service.EventSubscriptionService;
import org.flowable.eventsubscription.service.impl.persistence.entity.MessageEventSubscriptionEntity;
import org.flowable.eventsubscription.service.impl.persistence.entity.SignalEventSubscriptionEntity;
import org.flowable.job.service.TimerJobService;
import org.flowable.job.service.impl.persistence.entity.TimerJobEntity;
/**
* @author Tom Baeyens
* @author Joram Barrez
*/
public class DeploymentEntityManagerImpl
extends AbstractProcessEngineEntityManager<DeploymentEntity, DeploymentDataManager>
implements DeploymentEntityManager {
public DeploymentEntityManagerImpl(ProcessEngineConfigurationImpl processEngineConfiguration, DeploymentDataManager deploymentDataManager) {
super(processEngineConfiguration, deploymentDataManager);
}
@Override
public void insert(DeploymentEntity deployment) {
insert(deployment, false);
for (EngineResource resource : deployment.getResources().values()) {
resource.setDeploymentId(deployment.getId());
getResourceEntityManager().insert((ResourceEntity) resource);
}
}
@Override
public void deleteDeployment(String deploymentId, boolean cascade) {
List<ProcessDefinition> processDefinitions = new ProcessDefinitionQueryImpl().deploymentId(deploymentId).list();
updateRelatedModels(deploymentId);
if (cascade) {
deleteProcessInstancesForProcessDefinitions(processDefinitions);
deleteHistoricTaskEventLogEntriesForProcessDefinitions(processDefinitions);
}
for (ProcessDefinition processDefinition : processDefinitions) {
deleteProcessDefinitionIdentityLinks(processDefinition);
deleteEventSubscriptions(processDefinition);
deleteProcessDefinitionInfo(processDefinition.getId());
removeTimerStartJobs(processDefinition);
// 如果以前的流程定义版本有计时器/信号/消息启动事件,则必须添加该事件
// 仅当当前删除的流程定义是最新版本时,
// 我们回到上一个计时器/信号/消息启动事件
restorePreviousStartEventsIfNeeded(processDefinition);
}
deleteProcessDefinitionForDeployment(deploymentId);
getResourceEntityManager().deleteResourcesByDeploymentId(deploymentId);
delete(findById(deploymentId), false);
}
protected void updateRelatedModels(String deploymentId) {
// 从任何模型中删除部署链接。
// 模型仍然存在,因为模型是部署模型的源,并且具有不同的生命周期
List<Model> models = new ModelQueryImpl().deploymentId(deploymentId).list();
for (Model model : models) {
ModelEntity modelEntity = (ModelEntity) model;
modelEntity.setDeploymentId(null);
getModelEntityManager().updateModel(modelEntity);
}
}
protected void deleteProcessDefinitionIdentityLinks(ProcessDefinition processDefinition) {
engineConfiguration.getIdentityLinkServiceConfiguration().getIdentityLinkService()
.deleteIdentityLinksByProcessDefinitionId(processDefinition.getId());
}
protected void deleteEventSubscriptions(ProcessDefinition processDefinition) {
engineConfiguration.getEventSubscriptionServiceConfiguration().getEventSubscriptionService()
.deleteEventSubscriptionsForProcessDefinition(processDefinition.getId());
}
protected void deleteProcessDefinitionInfo(String processDefinitionId) {
getProcessDefinitionInfoEntityManager().deleteProcessDefinitionInfo(processDefinitionId);
}
protected void deleteProcessDefinitionForDeployment(String deploymentId) {
getProcessDefinitionEntityManager().deleteProcessDefinitionsByDeploymentId(deploymentId);
}
protected void deleteProcessInstancesForProcessDefinitions(List<ProcessDefinition> processDefinitions) {
for (ProcessDefinition processDefinition : processDefinitions) {
getExecutionEntityManager().deleteProcessInstancesByProcessDefinition(processDefinition.getId(), "deleted deployment", true);
}
}
protected void deleteHistoricTaskEventLogEntriesForProcessDefinitions(List<ProcessDefinition> processDefinitions) {
for (ProcessDefinition processDefinition : processDefinitions) {
engineConfiguration.getTaskServiceConfiguration().getHistoricTaskService().deleteHistoricTaskLogEntriesForProcessDefinition(processDefinition.getId());
}
}
...
}