예제 #1
0
 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);
         }
     }
 }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        //
        //  /**
        //   * 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);
        }
예제 #5
0
        /// <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);
            }
        }
예제 #6
0
        /// <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));
                }
            }
        }
예제 #7
0
        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));
            }
        }
예제 #8
0
        /// <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;
                }
            }
        }
예제 #9
0
        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));
                }
            }
        }
예제 #10
0
        /// <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);
        }