protected internal virtual void UpdateTimersAndEvents(ParsedDeployment parsedDeployment, IDictionary <IProcessDefinitionEntity, IProcessDefinitionEntity> mapNewToOldProcessDefinitions) { foreach (IProcessDefinitionEntity processDefinition in parsedDeployment.AllProcessDefinitions) { if (mapNewToOldProcessDefinitions.TryGetValue(processDefinition, out var item)) { bpmnDeploymentHelper.UpdateTimersAndEvents(processDefinition, item, parsedDeployment); } } }
/// <summary> /// Saves each process definition. It is assumed that the deployment is new, the definitions /// have never been saved before, and that they have all their values properly set up. /// </summary> protected internal virtual void PersistProcessDefinitionsAndAuthorizations(ParsedDeployment parsedDeployment) { ICommandContext commandContext = Context.CommandContext; IProcessDefinitionEntityManager processDefinitionManager = commandContext.ProcessDefinitionEntityManager; foreach (IProcessDefinitionEntity processDefinition in parsedDeployment.AllProcessDefinitions) { processDefinitionManager.Insert(processDefinition, false); bpmnDeploymentHelper.AddAuthorizationsForNewProcessDefinition(parsedDeployment.GetProcessModelForProcessDefinition(processDefinition), processDefinition); } }
/// <summary> /// Updates all the process definition entities to have the correct resource names. /// </summary> public virtual ParsedDeployment ResourceNamesOnProcessDefinitions(ParsedDeployment value) { foreach (IProcessDefinitionEntity processDefinition in value.AllProcessDefinitions) { string resourceName = value.GetResourceForProcessDefinition(processDefinition).Name; processDefinition.ResourceName = resourceName; processDefinition.Name = value.Deployment.Name; } return(value); }
// // /** // * Creates new diagrams for process definitions if the deployment is new, the process definition in // * question supports it, and the engine is configured to make new diagrams. // * // * When this method creates a new diagram, it also persists it via the ResourceEntityManager // * and adds it to the resources of the deployment. // */ // protected void createAndPersistNewDiagramsIfNeeded(ParsedDeployment parsedDeployment) { // // final ProcessEngineConfigurationImpl processEngineConfiguration = Context.getProcessEngineConfiguration(); // final DeploymentEntity deploymentEntity = parsedDeployment.getDeployment(); // // final ResourceEntityManager resourceEntityManager = processEngineConfiguration.getResourceEntityManager(); // // for (ProcessDefinitionEntity processDefinition : parsedDeployment.getAllProcessDefinitions()) { // if (processDefinitionDiagramHelper.shouldCreateDiagram(processDefinition, deploymentEntity)) { // ResourceEntity resource = processDefinitionDiagramHelper.createDiagramForProcessDefinition( // processDefinition, parsedDeployment.getBpmnParseForProcessDefinition(processDefinition)); // if (resource != null) { // resourceEntityManager.insert(resource, false); // deploymentEntity.addResource(resource); // now we'll find it if we look for the diagram name later. // } // } // } // } /// <summary> /// Updates all the process definition entities to have the correct diagram resource name. Must /// be called after createAndPersistNewDiagramsAsNeeded to ensure that any newly-created diagrams /// already have their resources attached to the deployment. /// </summary> protected internal virtual ParsedDeployment ProcessDefinitionDiagramNames(ParsedDeployment value) { IDictionary <string, IResourceEntity> resources = value.Deployment.GetResources(); foreach (IProcessDefinitionEntity processDefinition in value.AllProcessDefinitions) { string diagramResourceName = ResourceNameUtil.GetProcessDiagramResourceNameFromDeployment(processDefinition, resources); processDefinition.DiagramResourceName = diagramResourceName; } return(value); }
/// <summary> /// Ensures that the process definition is cached in the appropriate places, including the /// deployment's collection of deployed artifacts and the deployment manager's cache, as well /// as caching any ProcessDefinitionInfos. /// </summary> public virtual void UpdateCachingAndArtifacts(ParsedDeployment parsedDeployment) { ICommandContext commandContext = Context.CommandContext; ProcessEngineConfigurationImpl processEngineConfiguration = Context.ProcessEngineConfiguration; IDeploymentCache <ProcessDefinitionCacheEntry> processDefinitionCache = processEngineConfiguration.DeploymentManager.ProcessDefinitionCache; IDeploymentEntity deployment = parsedDeployment.Deployment; foreach (IProcessDefinitionEntity processDefinition in parsedDeployment.AllProcessDefinitions) { BpmnModel bpmnModel = parsedDeployment.GetBpmnModelForProcessDefinition(processDefinition); Process process = parsedDeployment.GetProcessModelForProcessDefinition(processDefinition); ProcessDefinitionCacheEntry cacheEntry = new ProcessDefinitionCacheEntry(processDefinition, bpmnModel, process); processDefinitionCache.Add(processDefinition.Id, cacheEntry); AddDefinitionInfoToCache(processDefinition, processEngineConfiguration, commandContext); // Add to deployment for further usage deployment.AddDeployedArtifact(processDefinition); } }
/// <summary> /// Sets the version on each process definition entity, and the identifier. If the map contains /// an older version for a process definition, then the version is set to that older entity's /// version plus one; otherwise it is set to 1. Also dispatches an ENTITY_CREATED event. /// </summary> protected internal virtual void SetProcessDefinitionVersionsAndIds(ParsedDeployment parsedDeployment, IDictionary <IProcessDefinitionEntity, IProcessDefinitionEntity> mapNewToOldProcessDefinitions) { ICommandContext commandContext = Context.CommandContext; foreach (IProcessDefinitionEntity processDefinition in parsedDeployment.AllProcessDefinitions) { int version = 1; mapNewToOldProcessDefinitions.TryGetValue(processDefinition, out IProcessDefinitionEntity latest); if (latest != null) { version = latest.Version + 1; } processDefinition.Version = version; processDefinition.Id = GetIdForNewProcessDefinition(processDefinition); if (commandContext.ProcessEngineConfiguration.EventDispatcher.Enabled) { commandContext.ProcessEngineConfiguration.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.ENTITY_CREATED, processDefinition)); } } }
public virtual void Deploy(IDeploymentEntity deployment, IDictionary <string, object> deploymentSettings) { log.LogDebug($"Processing deployment {deployment.Name}"); // The ParsedDeployment represents the deployment, the process definitions, and the BPMN // resource, parse, and model associated with each process definition. ParsedDeployment parsedDeployment = parsedDeploymentBuilderFactory.GetBuilderForDeploymentAndSettings(deployment, deploymentSettings).Build(bpmnDeploymentHelper); bpmnDeploymentHelper.VerifyProcessDefinitionsDoNotShareKeys(parsedDeployment.AllProcessDefinitions); bpmnDeploymentHelper.CopyDeploymentValuesToProcessDefinitions(parsedDeployment.Deployment, parsedDeployment.AllProcessDefinitions); bpmnDeploymentHelper.ResourceNamesOnProcessDefinitions(parsedDeployment); // createAndPersistNewDiagramsIfNeeded(parsedDeployment); ProcessDefinitionDiagramNames(parsedDeployment); if (deployment.New) { IDictionary <IProcessDefinitionEntity, IProcessDefinitionEntity> mapOfNewProcessDefinitionToPreviousVersion = GetPreviousVersionsOfProcessDefinitions(parsedDeployment); SetProcessDefinitionVersionsAndIds(parsedDeployment, mapOfNewProcessDefinitionToPreviousVersion); PersistProcessDefinitionsAndAuthorizations(parsedDeployment); UpdateTimersAndEvents(parsedDeployment, mapOfNewProcessDefinitionToPreviousVersion); DispatchProcessDefinitionEntityInitializedEvent(parsedDeployment); } else { MakeProcessDefinitionsConsistentWithPersistedVersions(parsedDeployment); } cachingAndArtifactsManager.UpdateCachingAndArtifacts(parsedDeployment); foreach (IProcessDefinitionEntity processDefinition in parsedDeployment.AllProcessDefinitions) { BpmnModel bpmnModel = parsedDeployment.GetBpmnModelForProcessDefinition(processDefinition); CreateLocalizationValues(processDefinition.Id, bpmnModel.GetProcessById(processDefinition.Key)); } }
/// <summary> /// Loads the persisted version of each process definition and set values on the in-memory /// version to be consistent. /// </summary> protected internal virtual void MakeProcessDefinitionsConsistentWithPersistedVersions(ParsedDeployment parsedDeployment) { foreach (IProcessDefinitionEntity processDefinition in parsedDeployment.AllProcessDefinitions) { IProcessDefinitionEntity persistedProcessDefinition = bpmnDeploymentHelper.GetPersistedInstanceOfProcessDefinition(processDefinition); if (persistedProcessDefinition != null) { processDefinition.Id = persistedProcessDefinition.Id; processDefinition.Version = persistedProcessDefinition.Version; processDefinition.SuspensionState = persistedProcessDefinition.SuspensionState; } } }
protected internal virtual void DispatchProcessDefinitionEntityInitializedEvent(ParsedDeployment parsedDeployment) { ICommandContext commandContext = Context.CommandContext; foreach (IProcessDefinitionEntity processDefinitionEntity in parsedDeployment.AllProcessDefinitions) { if (commandContext.ProcessEngineConfiguration.EventDispatcher.Enabled) { commandContext.ProcessEngineConfiguration.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.ENTITY_INITIALIZED, processDefinitionEntity)); } } }
/// <summary> /// Constructs a map from new ProcessDefinitionEntities to the previous version by key and tenant. /// If no previous version exists, no map entry is created. /// </summary> protected internal virtual IDictionary <IProcessDefinitionEntity, IProcessDefinitionEntity> GetPreviousVersionsOfProcessDefinitions(ParsedDeployment parsedDeployment) { IDictionary <IProcessDefinitionEntity, IProcessDefinitionEntity> result = new Dictionary <IProcessDefinitionEntity, IProcessDefinitionEntity>(); foreach (IProcessDefinitionEntity newDefinition in parsedDeployment.AllProcessDefinitions) { IProcessDefinitionEntity existingDefinition = bpmnDeploymentHelper.GetMostRecentVersionOfProcessDefinition(newDefinition); if (existingDefinition != null) { result[newDefinition] = existingDefinition; } } return(result); }