private static void ApplicationStopping(IApplicationBuilder app, IHostApplicationLifetime lifetime)
 {
     lifetime.ApplicationStopping.Register((context) =>
     {
         IApplicationBuilder builder     = context as IApplicationBuilder;
         ProcessEngineFactory engineFact = builder.ApplicationServices.GetService <ProcessEngineFactory>();
         engineFact.Destroy();
     }, app, true);
 }
Пример #2
0
        public virtual void Close()
        {
            ProcessEngineFactory.Unregister(this);
            if (asyncExecutor != null && asyncExecutor.Active)
            {
                asyncExecutor.Shutdown();
            }

            commandExecutor.Execute(processEngineConfiguration.SchemaCommandConfig, new SchemaOperationProcessEngineClose());

            if (processEngineConfiguration.ProcessEngineLifecycleListener != null)
            {
                processEngineConfiguration.ProcessEngineLifecycleListener.OnProcessEngineClosed(this);
            }

            processEngineConfiguration.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateGlobalEvent(ActivitiEventType.ENGINE_CLOSED));
        }
Пример #3
0
        public ProcessEngineImpl(ProcessEngineConfigurationImpl processEngineConfiguration)
        {
            this.processEngineConfiguration = processEngineConfiguration;
            this.name = processEngineConfiguration.ProcessEngineName;
            this.repositoryService         = processEngineConfiguration.RepositoryService;
            this.runtimeService            = processEngineConfiguration.RuntimeService;
            this.historicDataService       = processEngineConfiguration.HistoryService;
            this.taskService               = processEngineConfiguration.TaskService;
            this.managementService         = processEngineConfiguration.ManagementService;
            this.dynamicBpmnService        = processEngineConfiguration.DynamicBpmnService;
            this.asyncExecutor             = processEngineConfiguration.AsyncExecutor;
            this.commandExecutor           = processEngineConfiguration.CommandExecutor;
            this.sessionFactories          = processEngineConfiguration.SessionFactories;
            this.transactionContextFactory = processEngineConfiguration.TransactionContextFactory;

            if (processEngineConfiguration.UsingRelationalDatabase && processEngineConfiguration.DatabaseSchemaUpdate is object)
            {
                commandExecutor.Execute(processEngineConfiguration.SchemaCommandConfig, new SchemaOperationsProcessEngineBuild());
            }

            if (name is null)
            {
                log.LogInformation("default activiti ProcessEngine created");
            }
            else
            {
                log.LogInformation($"ProcessEngine {name} created");
            }

            ProcessEngineFactory.RegisterProcessEngine(this);

            if (asyncExecutor != null && asyncExecutor.AutoActivate)
            {
                asyncExecutor.Start();
            }

            if (processEngineConfiguration.ProcessEngineLifecycleListener != null)
            {
                processEngineConfiguration.ProcessEngineLifecycleListener.OnProcessEngineBuilt(this);
            }

            processEngineConfiguration.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateGlobalEvent(ActivitiEventType.ENGINE_CREATED));
        }
Пример #4
0
        public static IProcessEngine UseProcessEngine(this IServiceProvider serviceProvider, IApplicationLifetime applicationLifetime, string processEngineName)
        {
            ProcessEngineServiceProvider.ServiceProvider = serviceProvider;

            if (string.IsNullOrWhiteSpace(processEngineName))
            {
                return(serviceProvider.GetService <IProcessEngine>());
            }

            ProcessEngineConfiguration processEngineConfig = serviceProvider.GetService <ProcessEngineConfiguration>();

            processEngineConfig.ProcessEngineName = processEngineName;

            IProcessEngine engine = processEngineConfig.BuildProcessEngine();

            ProcessEngineFactory.RegisterProcessEngine(engine);

            return(engine);
        }
Пример #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="app"></param>
        /// <returns></returns>
        public static IApplicationBuilder UseProcessEngine(this IApplicationBuilder app, IApplicationLifetime lifetime)
        {
            app.ApplicationServices.EnsureProcessEngineInit();

            app.ApplicationServices.GetService <IOptionsMonitor <ProcessEngineOption> >()
            .OnChange((opts, prop) =>
            {
                if (ProcessEngineOption.HasChanged())
                {
                    ProcessEngineFactory.Instance.Destroy();
                    app.ApplicationServices.EnsureProcessEngineInit();
                }
            });

            lifetime.ApplicationStopping.Register((context) =>
            {
                IApplicationBuilder builder     = context as IApplicationBuilder;
                ProcessEngineFactory engineFact = builder.ApplicationServices.GetService <ProcessEngineFactory>();
                engineFact.Destroy();
            }, app, true);
            return(app);
        }