示例#1
0
        public virtual void Run(object state)
        {
            var jobExecutorContext = new JobExecutorContext();

            var currentProcessorJobQueue     = jobExecutorContext.CurrentProcessorJobQueue;
            ICommandExecutor commandExecutor = ((ProcessEngineConfigurationImpl)_processEngine.ProcessEngineConfiguration).CommandExecutorTxRequired;

            _jobIds.ForEach(d =>
            {
                currentProcessorJobQueue.Enqueue(d);
            });

            Context.JobExecutorContext = jobExecutorContext;
            try
            {
                while (!currentProcessorJobQueue.IsEmpty())
                {
                    string nextJobId = currentProcessorJobQueue.Dequeue();
                    if (_jobExecutor.IsActive)
                    {
                        try
                        {
                            ExecuteJob(nextJobId, commandExecutor);
                        }
                        catch (System.Exception t)
                        {
                            Log.ExceptionWhileExecutingJob(nextJobId, t);
                        }
                    }
                    else
                    {
                        try
                        {
                            UnlockJob(nextJobId, commandExecutor);
                        }
                        catch (System.Exception t)
                        {
                            Log.ExceptionWhileUnlockingJob(nextJobId, t);
                        }
                    }
                    currentProcessorJobQueue.TrimExcess();
                }

                // if there were only exclusive jobs then the job executor
                // does a backoff. In order to avoid too much waiting time
                // we need to tell him to check once more if there were any jobs added.
                _jobExecutor.JobWasAdded();
            }
            finally
            {
                Context.RemoveJobExecutorContext();
            }
        }
 public ExclusiveJobAddedNotification(string jobId, JobExecutorContext jobExecutorContext)
 {
     this.JobId = jobId;
     this.JobExecutorContext = jobExecutorContext;
 }