示例#1
0
 public virtual void logAcquisitionFailureJobs(ProcessEngineImpl engine, int numJobs)
 {
     if (engine != null && engine.ProcessEngineConfiguration.MetricsEnabled)
     {
         engine.ProcessEngineConfiguration.MetricsRegistry.markOccurrence(Metrics.JOB_ACQUIRED_FAILURE, numJobs);
     }
 }
示例#2
0
 public virtual void logRejectedExecution(ProcessEngineImpl engine, int numJobs)
 {
     if (engine != null && engine.ProcessEngineConfiguration.MetricsEnabled)
     {
         engine.ProcessEngineConfiguration.MetricsRegistry.markOccurrence(Metrics.JOB_EXECUTION_REJECTED, numJobs);
     }
 }
示例#3
0
        public virtual void testDeleteJobThatWasAlreadyAcquired()
        {
            ClockUtil.CurrentTime = DateTime.Now;

            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("timerOnTask");
            Job             timerJob        = managementService.createJobQuery().processInstanceId(processInstance.Id).singleResult();

            // We need to move time at least one hour to make the timer executable
            ClockUtil.CurrentTime = new DateTime(ClockUtil.CurrentTime.Ticks + 7200000L);

            // Acquire job by running the acquire command manually
            ProcessEngineImpl processEngineImpl = (ProcessEngineImpl)processEngine;
            JobExecutor       jobExecutor       = processEngineImpl.ProcessEngineConfiguration.JobExecutor;
            AcquireJobsCmd    acquireJobsCmd    = new AcquireJobsCmd(jobExecutor);
            CommandExecutor   commandExecutor   = processEngineImpl.ProcessEngineConfiguration.CommandExecutorTxRequired;

            commandExecutor.execute(acquireJobsCmd);

            // Try to delete the job. This should fail.
            try
            {
                managementService.deleteJob(timerJob.Id);
                fail();
            }
            catch (ProcessEngineException)
            {
                // Exception is expected
            }

            // Clean up
            managementService.executeJob(timerJob.Id);
        }
示例#4
0
 public virtual void logAcquisitionAttempt(ProcessEngineImpl engine)
 {
     if (engine.ProcessEngineConfiguration.MetricsEnabled)
     {
         engine.ProcessEngineConfiguration.MetricsRegistry.markOccurrence(Metrics.JOB_ACQUISITION_ATTEMPT);
     }
 }
示例#5
0
        public static void Main(string[] args)
        {
            ProcessEngineImpl processEngine   = (ProcessEngineImpl)ProcessEngines.DefaultProcessEngine;
            CommandExecutor   commandExecutor = processEngine.ProcessEngineConfiguration.CommandExecutorTxRequired;

            commandExecutor.execute(new CommandAnonymousInnerClass());
        }
示例#6
0
        protected internal virtual ProcessEngineImpl buildEngine(ProcessEngineConfigurationImpl engineConfiguration)
        {
            ProcessEngineImpl engine = (ProcessEngineImpl)engineConfiguration.buildProcessEngine();

            processEngines.Add(engine);

            return(engine);
        }
示例#7
0
 public JcaInflowExecuteJobsRunnable(IList <string> jobIds, ProcessEngineImpl processEngine, JcaExecutorServiceConnector connector) : base(jobIds, processEngine)
 {
     this.ra = connector;
     if (method == null)
     {
         loadMethod();
     }
 }
示例#8
0
        public virtual void run()
        {
            lock (this)
            {
                LOG.startingToAcquireJobs(jobExecutor.Name);

                JobAcquisitionStrategy acquisitionStrategy = initializeAcquisitionStrategy();

                while (!isInterrupted)
                {
                    acquisitionContext.reset();
                    acquisitionContext.AcquisitionTime = DateTimeHelper.CurrentUnixTimeMillis();


                    IEnumerator <ProcessEngineImpl> engineIterator = jobExecutor.engineIterator();

                    try
                    {
                        while (engineIterator.MoveNext())
                        {
                            ProcessEngineImpl currentProcessEngine = engineIterator.Current;
                            if (!jobExecutor.hasRegisteredEngine(currentProcessEngine))
                            {
                                // if engine has been unregistered meanwhile
                                continue;
                            }

                            AcquiredJobs acquiredJobs = acquireJobs(acquisitionContext, acquisitionStrategy, currentProcessEngine);
                            executeJobs(acquisitionContext, currentProcessEngine, acquiredJobs);
                        }
                    }
                    catch (Exception e)
                    {
                        LOG.exceptionDuringJobAcquisition(e);

                        acquisitionContext.AcquisitionException = e;
                    }

                    acquisitionContext.JobAdded = isJobAdded;
                    configureNextAcquisitionCycle(acquisitionContext, acquisitionStrategy);
                    //The clear had to be done after the configuration, since a hint can be
                    //appear in the suspend and the flag shouldn't be cleaned in this case.
                    //The loop will restart after suspend with the isJobAdded flag and
                    //reconfigure with this flag
                    clearJobAddedNotification();

                    long waitTime = acquisitionStrategy.WaitTime;
                    // wait the requested wait time minus the time that acquisition itself took
                    // this makes the intervals of job acquisition more constant and therefore predictable
                    waitTime = Math.Max(0, (acquisitionContext.AcquisitionTime + waitTime) - DateTimeHelper.CurrentUnixTimeMillis());

                    suspendAcquisition(waitTime);
                }

                LOG.stoppedJobAcquisition(jobExecutor.Name);
            }
        }
示例#9
0
        public virtual void LogRejectedExecution(ProcessEngineImpl engine, int numJobs)
        {
            var conf = engine?.ProcessEngineConfiguration as ProcessEngineConfigurationImpl;

            if (conf != null && conf.MetricsEnabled)
            {
                conf.MetricsRegistry.MarkOccurrence(Management.Metrics.JobExecutionRejected, numJobs);
            }
        }
示例#10
0
        public virtual void LogAcquisitionFailureJobs(ProcessEngineImpl engine, int numJobs)
        {
            var conf = engine?.ProcessEngineConfiguration as ProcessEngineConfigurationImpl;

            if (conf != null && conf.MetricsEnabled)
            {
                conf.MetricsRegistry.MarkOccurrence(Management.Metrics.JobAcquiredFailure, numJobs);
            }
        }
示例#11
0
        public virtual void LogAcquisitionAttempt(ProcessEngineImpl engine)
        {
            var conf = engine?.ProcessEngineConfiguration as ProcessEngineConfigurationImpl;

            if (conf != null && conf.MetricsEnabled)
            {
                conf.MetricsRegistry.MarkOccurrence(Management.Metrics.JobAcquisitionAttempt);
            }
        }
示例#12
0
        public virtual void disabledDmn()
        {
            processEngineImpl = createProcessEngineImpl(false);

            // simulate manual schema creation by user
            TestHelper.CreateSchema(processEngineImpl.ProcessEngineConfiguration as ProcessEngineConfigurationImpl);

            // let the engine do their schema operations thing
            (processEngineImpl.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).CommandExecutorSchemaOperations.Execute(new SchemaOperationsProcessEngineBuild());
        }
示例#13
0
        public virtual void schemaCreatedByUserAndDatabaseSchemaUpdateFalse()
        {
            processEngineImpl = createProcessEngineImpl("false", false);
            // simulate manual schema creation by user
            TestHelper.CreateSchema(processEngineImpl.ProcessEngineConfiguration as ProcessEngineConfigurationImpl);

            // let the engine do their schema operations thing
            (processEngineImpl.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).CommandExecutorSchemaOperations.Execute(new SchemaOperationsProcessEngineBuild());

            AssertHistoryLevel();
        }
示例#14
0
        public override ThreadStart getExecuteJobsRunnable(IList <string> jobIds, ProcessEngineImpl processEngine)
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.container.RuntimeContainerDelegate runtimeContainerDelegate = getRuntimeContainerDelegate();
            RuntimeContainerDelegate runtimeContainerDelegate = RuntimeContainerDelegate;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.container.ExecutorService executorService = runtimeContainerDelegate.getExecutorService();
            ExecutorService executorService = runtimeContainerDelegate.ExecutorService;

            return(executorService.getExecuteJobsRunnable(jobIds, processEngine));
        }
        public virtual void ReadLevelFullfromDb()
        {
            ProcessEngineConfigurationImpl config = Config("true", ProcessEngineConfiguration.HistoryFull);

            // init the db with level=full
            _processEngineImpl = (ProcessEngineImpl)config.BuildProcessEngine();

            var historyLevel =
                config.CommandExecutorSchemaOperations.Execute(new DetermineHistoryLevelCmd(config.HistoryLevels));

            Assert.That(historyLevel, Is.EqualTo(HistoryLevelFields.HistoryLevelFull));
        }
        public virtual void secondEngineCopiesHistoryLevelFromFirst()
        {
            // given
            buildEngine(config("true", ProcessEngineConfiguration.HistoryFull));

            // when
            ProcessEngineImpl processEngineTwo = buildEngine(config("true", ProcessEngineConfiguration.HistoryAuto));

            // then
            Assert.That(processEngineTwo.ProcessEngineConfiguration.History, Is.EqualTo(ProcessEngineConfiguration.HistoryAuto));
            Assert.That((processEngineTwo.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).HistoryLevel, Is.EqualTo(HistoryLevelFields.HistoryLevelFull));
        }
示例#17
0
 public override void executeJobs(IList <string> jobIds, ProcessEngineImpl processEngine)
 {
     try
     {
         threadPoolExecutor.execute(getExecuteJobsRunnable(jobIds, processEngine));
     }
     catch (RejectedExecutionException)
     {
         logRejectedExecution(processEngine, jobIds.Count);
         rejectedJobsHandler.jobsRejected(jobIds, processEngine, this);
     }
 }
示例#18
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void secondEngineCopiesHistoryLevelFromFirst()
        public virtual void secondEngineCopiesHistoryLevelFromFirst()
        {
            // given
            buildEngine(config("true", ProcessEngineConfiguration.HISTORY_FULL));

            // when
            ProcessEngineImpl processEngineTwo = buildEngine(config("true", ProcessEngineConfiguration.HISTORY_AUTO));

            // then
            assertThat(processEngineTwo.ProcessEngineConfiguration.History, @is(ProcessEngineConfiguration.HISTORY_AUTO));
            assertThat(processEngineTwo.ProcessEngineConfiguration.HistoryLevel, @is(org.camunda.bpm.engine.impl.history.HistoryLevel_Fields.HISTORY_LEVEL_FULL));
        }
示例#19
0
 public override void ExecuteJobs(IList <string> jobIds, ProcessEngineImpl processEngine)
 {
     try
     {
         var runnable = GetExecuteJobsRunnable(jobIds, processEngine);
         ThreadPool.QueueUserWorkItem(runnable.Run);
     }
     catch (RejectedExecutionException)
     {
         LogRejectedExecution(processEngine, jobIds.Count);
         RejectedJobsHandler.JobsRejected(jobIds, processEngine, this);
     }
 }
示例#20
0
        public virtual void registerProcessEngine(ProcessEngineImpl processEngine)
        {
            lock (this)
            {
                processEngines.Add(processEngine);

                // when we register the first process engine, start the jobexecutor
                if (processEngines.Count == 1 && isAutoActivate)
                {
                    start();
                }
            }
        }
示例#21
0
        public virtual void unregisterProcessEngine(ProcessEngineImpl processEngine)
        {
            lock (this)
            {
                processEngines.Remove(processEngine);

                // if we unregister the last process engine, auto-shutdown the jobexecutor
                if (processEngines.Count == 0 && isActive)
                {
                    shutdown();
                }
            }
        }
示例#22
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void schemaCreatedByUserAndDatabaseSchemaUpdateTrue()
        public virtual void schemaCreatedByUserAndDatabaseSchemaUpdateTrue()
        {
            processEngineImpl = createProcessEngineImpl("true", false);
            // simulate manual schema creation by user
            TestHelper.createSchema(processEngineImpl.ProcessEngineConfiguration);

            // let the engine do their schema operations thing
            processEngineImpl.ProcessEngineConfiguration.CommandExecutorSchemaOperations.execute(new SchemaOperationsProcessEngineBuild());

            processEngineImpl.ProcessEngineConfiguration.CommandExecutorSchemaOperations.execute(new HistoryLevelSetupCommand());

            assertHistoryLevel();
        }
示例#23
0
        public virtual void JobsRejected(IList <string> jobIds, ProcessEngineImpl processEngine, JobExecutor jobExecutor)
        {
            var acquireJobsRunnable = jobExecutor.AcquireJobsRunnable;

            if (acquireJobsRunnable is SequentialJobAcquisitionRunnable)
            {
                var context = ((SequentialJobAcquisitionRunnable)acquireJobsRunnable).AcquisitionContext;
                context.SubmitRejectedBatch(processEngine.Name, jobIds);
            }
            else
            {
                jobExecutor.GetExecuteJobsRunnable(jobIds, processEngine).Run(null);
            }
        }
示例#24
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void usesDefaultValueAuditWhenNoValueIsConfigured()
        public virtual void usesDefaultValueAuditWhenNoValueIsConfigured()
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl config = config("true", org.camunda.bpm.engine.ProcessEngineConfiguration.HISTORY_AUTO);
            ProcessEngineConfigurationImpl config = config("true", ProcessEngineConfiguration.HISTORY_AUTO);
            ProcessEngineImpl processEngine       = buildEngine(config);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final System.Nullable<int> level = config.getCommandExecutorSchemaOperations().execute(new org.camunda.bpm.engine.impl.interceptor.Command<int>()
            int?level = config.CommandExecutorSchemaOperations.execute(new CommandAnonymousInnerClass(this));

            assertThat(level, equalTo(org.camunda.bpm.engine.impl.history.HistoryLevel_Fields.HISTORY_LEVEL_AUDIT.Id));

            assertThat(processEngine.ProcessEngineConfiguration.HistoryLevel, equalTo(org.camunda.bpm.engine.impl.history.HistoryLevel_Fields.HISTORY_LEVEL_AUDIT));
        }
        public virtual void usesDefaultValueAuditWhenNoValueIsConfigured()
        {
            //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            //ORIGINAL LINE: final ProcessEngineConfigurationImpl config = config("true", org.Camunda.bpm.Engine.ProcessEngineConfiguration.HISTORY_AUTO);
            ProcessEngineConfigurationImpl config = this.config("true", ProcessEngineConfiguration.HistoryAuto);
            ProcessEngineImpl processEngine       = buildEngine(config);

            //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            //ORIGINAL LINE: final Nullable<int> level = config.GetCommandExecutorSchemaOperations().Execute(new org.Camunda.bpm.Engine.impl.interceptor.Command<Nullable<int>>()
            int?level = config.CommandExecutorSchemaOperations.Execute(new CommandAnonymousInnerClass(this));

            Assert.That(level, Is.EqualTo(HistoryLevelFields.HistoryLevelAudit.Id));

            Assert.That((processEngine.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).HistoryLevel, Is.EqualTo(HistoryLevelFields.HistoryLevelAudit));
        }
        public virtual void UseDefaultLevelAudit()
        {
            ProcessEngineConfigurationImpl config = Config("true", ProcessEngineConfiguration.HistoryAuto);

            // init the db with level=auto -> audit
            _processEngineImpl = (ProcessEngineImpl)config.BuildProcessEngine();
            // the history Level has been overwritten with audit
            Assert.That(config.HistoryLevel, Is.EqualTo(HistoryLevelFields.HistoryLevelAudit));

            // and this is written to the database
            var databaseLevel =
                config.CommandExecutorSchemaOperations.Execute(new DetermineHistoryLevelCmd(config.HistoryLevels));

            Assert.That(databaseLevel, Is.EqualTo(HistoryLevelFields.HistoryLevelAudit));
        }
        public virtual void FailWhenExistingHistoryLevelIsNotRegistered()
        {
            // init the db with custom level
            IHistoryLevel customLevel             = new HistoryLevelAnonymousInnerClass(this);
            ProcessEngineConfigurationImpl config = Config("true", "custom");

            config.SetCustomHistoryLevels(new List <IHistoryLevel> {
                customLevel
            });
            _processEngineImpl = (ProcessEngineImpl)config.BuildProcessEngine();

            //Thrown.Expect(typeof(ProcessEngineException));
            //Thrown.ExpectMessage("The configured history level with id='99' is not registered in this config.");

            config.CommandExecutorSchemaOperations.Execute(new DetermineHistoryLevelCmd(new List <IHistoryLevel>()));
        }
示例#28
0
        public override void executeJobs(IList <string> jobIds, ProcessEngineImpl processEngine)
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.container.RuntimeContainerDelegate runtimeContainerDelegate = getRuntimeContainerDelegate();
            RuntimeContainerDelegate runtimeContainerDelegate = RuntimeContainerDelegate;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.container.ExecutorService executorService = runtimeContainerDelegate.getExecutorService();
            ExecutorService executorService = runtimeContainerDelegate.ExecutorService;

            ThreadStart executeJobsRunnable = getExecuteJobsRunnable(jobIds, processEngine);

            // delegate job execution to runtime container
            if (!executorService.schedule(executeJobsRunnable, false))
            {
                logRejectedExecution(processEngine, jobIds.Count);
                rejectedJobsHandler.jobsRejected(jobIds, processEngine, this);
            }
        }
示例#29
0
        public override void ExecuteJobs(IList <string> jobIds, ProcessEngineImpl processEngine)
        {
            throw new NotImplementedException();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.container.RuntimeContainerDelegate runtimeContainerDelegate = getRuntimeContainerDelegate();
//            var runtimeContainerDelegate = RuntimeContainerDelegate;
////JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
////ORIGINAL LINE: final org.camunda.bpm.container.ExecutorService executorService = runtimeContainerDelegate.getExecutorService();
//            var executorService = runtimeContainerDelegate.ExecutorService;

//            var executeJobsRunnable = GetExecuteJobsRunnable(jobIds, processEngine);

//            // delegate job execution to runtime container
//            if (!executorService.Schedule(executeJobsRunnable, false))
//            {
//                LogRejectedExecution(processEngine, jobIds.Count);
//                rejectedJobsHandler.JobsRejected(jobIds, processEngine, this);
//            }
        }
示例#30
0
        protected internal virtual void ExecuteJobs(JobAcquisitionContext context, ProcessEngineImpl currentProcessEngine, AcquiredJobs acquiredJobs)
        {
            // submit those jobs that were acquired in previous cycles but could not be scheduled for execution
            var additionalJobs = context.AdditionalJobBatchesByEngine.GetValueOrNull(currentProcessEngine.Name);

            if (additionalJobs != null)
            {
                foreach (var jobBatch in additionalJobs)
                {
                    Log.ExecuteJobs(currentProcessEngine.Name, jobBatch);

                    JobExecutor.ExecuteJobs(jobBatch, currentProcessEngine);
                }
            }

            // submit those jobs that were acquired in the current cycle
            foreach (var jobIds in acquiredJobs.JobIdBatches)
            {
                Log.ExecuteJobs(currentProcessEngine.Name, jobIds);

                JobExecutor.ExecuteJobs(jobIds, currentProcessEngine);
            }
        }