private void ScheduleRetryableJob(IJobExecutionContext context, IRetryableJob retryableJob)
        {
            var oldTrigger = context.Trigger;

            // Unschedule old trigger
            _scheduler.UnscheduleJob(oldTrigger.Key);

            // Create and schedule new trigge
            var retryTrigger = new SimpleTriggerImpl(oldTrigger.Key.Name, retryableJob.StartTimeRetryUtc, retryableJob.EndTimeRetryUtc, 0, TimeSpan.Zero);
            _scheduler.ScheduleJob(context.JobDetail, retryTrigger);
        }
        private void ScheduleRetryableJob(JobExecutionContext context, IRetryableJob retryableJob)
        {
            var oldTrigger = context.Trigger;

            // Unschedule old trigger
            _scheduler.UnscheduleJob(oldTrigger.Name, oldTrigger.Group);

            // Create and schedule new trigger
            var retryTrigger = new SimpleTrigger(oldTrigger.Name, oldTrigger.Group, retryableJob.StartTimeRetryUtc, retryableJob.EndTimeRetryUtc, 0, TimeSpan.Zero);

            _scheduler.ScheduleJob(context.JobDetail, retryTrigger);
        }
Esempio n. 3
0
        /// <summary>
        /// Schedules the retryableJob
        /// </summary>
        /// <param name="context">The context</param>
        /// <param name="retryableJob">The job</param>
        private void ScheduleRetryableJob(IJobExecutionContext context, IRetryableJob retryableJob)
        {
            var        oldTrigger      = context.Trigger;
            TriggerKey retryTriggerKey = new TriggerKey(oldTrigger.Key.Name, "RETRY");

            int          waitInterval;
            IntervalUnit intervalUnit;

            int numberRetries = context.JobDetail.JobDataMap.GetIntValueFromString(NumberRetriesJobDataMapKey);

            context.JobDetail.JobDataMap.PutAsString(NumberRetriesJobDataMapKey, ++numberRetries);

            // Check if WaitInterval has been set in JobDataMap
            // If it was set, the value is in Milliseconds and overwrites value in code
            // Otherwise use value defined in code
            object obj = context.JobDetail.JobDataMap.Get(WaitIntervalJobDataMapKey);

            if (null == obj || !Int32.TryParse(obj.ToString(), NumberStyles.Integer, CultureInfo.InvariantCulture, out waitInterval))
            {
                waitInterval = retryableJob.Delay;
                intervalUnit = retryableJob.IntervalUnit;
                logger.DebugFormat("Wait Interval has NOT been spectified in JobDataMap. Reschedule Job {0}.{1} using defaults (wait interval of {2} {3}(s)).", context.JobDetail.Key.Group, context.JobDetail.Key.Name, waitInterval, intervalUnit.ToString());
            }
            else
            {
                intervalUnit = IntervalUnit.Millisecond; // value in JobDataMap is always in Miliseconds
                logger.TraceFormat("Reschedule Job {0}.{1} with a wait interval of {2} {3}(s).", context.JobDetail.Key.Group, context.JobDetail.Key.Name, waitInterval, intervalUnit.ToString());
            }



            // Create and schedule new trigger
            var retryTrigger = TriggerBuilder.Create().ForJob(context.JobDetail).WithIdentity(retryTriggerKey).WithSimpleSchedule(s => s.WithRepeatCount(0)).StartAt(DateBuilder.FutureDate(waitInterval, intervalUnit)).Build();

            if (!_scheduler.CheckExists(retryTriggerKey))
            {
                _scheduler.ScheduleJob(retryTrigger);
            }
            else
            {
                _scheduler.RescheduleJob(retryTriggerKey, retryTrigger);
            }
        }