Exemple #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="JobRunner"/> class.
        /// </summary>
        public JobRunner(IJobConfiguration configuration, Type jobType, JobLockProvider jobLockProvider, JobHistoryProvider jobHistoryProvider)
        {
            _id                = Guid.NewGuid().ToString("N").Substring(0, 10).ToLower();
            _isBusy            = new Synchronized <bool>();
            _lastResult        = new Synchronized <string>();
            _lastRunStartTime  = new Synchronized <DateTime>();
            _lastRunFinishTime = new Synchronized <DateTime>();
            _lastStatus        = new Synchronized <JobStatus>();
            _nextRunTime       = new Synchronized <DateTime>();
            _status            = new Synchronized <JobStatus>();
            _runLock           = new object();

            _name        = configuration.Name;
            _description = configuration.Description;
            _group       = configuration.Group;
            _interval    = configuration.Interval;
            _isTimeOfDay = configuration.IsTimeOfDay;
            _keepAlive   = configuration.KeepAlive;
            _arguments   = configuration.Arguments;

            _jobType            = jobType;
            _jobLockProvider    = jobLockProvider ?? new DefaultJobLockProvider();
            _jobHistoryProvider = jobHistoryProvider;

            _instance = null;
            _timer    = new Timer(OnTimerCallback);

            if (_jobHistoryProvider != null)
            {
                _jobHistoryProvider.RestoreHistory(this);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="JobRunner"/> class.
        /// </summary>
        public JobRunner(IJobConfiguration configuration, Type jobType, JobLockProvider jobLockProvider, JobHistoryProvider jobHistoryProvider)
        {
            _id = Guid.NewGuid().ToString("N").Substring(0, 10).ToLower();
            _isBusy = new Synchronized<bool>();
            _lastResult = new Synchronized<string>();
            _lastRunStartTime = new Synchronized<DateTime>();
            _lastRunFinishTime = new Synchronized<DateTime>();
            _lastStatus = new Synchronized<JobStatus>();
            _nextRunTime = new Synchronized<DateTime>();
            _status = new Synchronized<JobStatus>();
            _runLock = new object();

            _name = configuration.Name;
            _description = configuration.Description;
            _group = configuration.Group;
            _interval = configuration.Interval;
            _isTimeOfDay = configuration.IsTimeOfDay;
            _keepAlive = configuration.KeepAlive;
            _arguments = configuration.Arguments;

            _jobType = jobType;
            _jobLockProvider = jobLockProvider ?? new DefaultJobLockProvider();
            _jobHistoryProvider = jobHistoryProvider;

            _instance = null;
            _timer = new Timer(OnTimerCallback);

            if (_jobHistoryProvider != null)
                _jobHistoryProvider.RestoreHistory(this);
        }
Exemple #3
0
        private void AddJobs(IEnumerable <IJobConfiguration> jobs, JobProvider provider)
        {
            if (jobs == null)
            {
                return;
            }

            foreach (var jobConfiguration in jobs)
            {
                Type jobType = Type.GetType(jobConfiguration.Type, false, true);
                if (jobType == null)
                {
                    throw new ConfigurationErrorsException(
                              string.Format("Could not load type '{0}' for job '{1}'.",
                                            jobConfiguration.Type, jobConfiguration.Name));
                }

                JobLockProvider jobLockProvider = _defaultJobLockProvider;

                if (!string.IsNullOrEmpty(jobConfiguration.JobLockProvider))
                {
                    // first try getting from provider collection
                    jobLockProvider = _jobLockProviders[jobConfiguration.JobLockProvider];
                    if (jobLockProvider == null)
                    {
                        // next, try loading type
                        Type lockType = Type.GetType(jobConfiguration.JobLockProvider, false, true);
                        if (lockType == null)
                        {
                            throw new ConfigurationErrorsException(
                                      string.Format("Could not load job lock type '{0}' for job '{1}'.",
                                                    jobConfiguration.JobLockProvider, jobConfiguration.Name));
                        }

                        jobLockProvider = Activator.CreateInstance(lockType) as JobLockProvider;
                    }

                    // if not found in provider collection or couldn't create type.
                    if (jobLockProvider == null)
                    {
                        throw new ConfigurationErrorsException(
                                  string.Format("Could not find job lock provider '{0}' for job '{1}'.", jobConfiguration.JobLockProvider, jobConfiguration.Name));
                    }
                }

                JobHistoryProvider jobHistoryProvider = null;
                if (!string.IsNullOrEmpty(jobConfiguration.JobHistoryProvider))
                {
                    Type historyType = Type.GetType(jobConfiguration.JobHistoryProvider, false, true);
                    if (historyType == null)
                    {
                        throw new ConfigurationErrorsException(
                                  string.Format("Could not load job history type '{0}' for job '{1}'.", jobConfiguration.JobHistoryProvider, jobConfiguration.Name));
                    }

                    jobHistoryProvider = Activator.CreateInstance(historyType) as JobHistoryProvider;
                }

                var j = new JobRunner(jobConfiguration, jobType, jobLockProvider, jobHistoryProvider);
                _jobs.Add(j);

                // keep track of jobs for providers so they can be sync'd later
                if (provider == null)
                {
                    continue;
                }

                JobCollection providerJobs;
                if (!_providerJobs.TryGetValue(provider, out providerJobs))
                {
                    providerJobs = new JobCollection();
                    _providerJobs.Add(provider, providerJobs);
                }
                providerJobs.Add(j);
            }
        }