/// <summary> /// Create a JobExcecutionContext with the given context data. /// </summary> public JobExecutionContext(IScheduler scheduler, TriggerFiredBundle firedBundle, IJob job) { this.scheduler = scheduler; trigger = firedBundle.Trigger; calendar = firedBundle.Calendar; jobDetail = firedBundle.JobDetail; this.job = job; recovering = firedBundle.Recovering; fireTimeUtc = firedBundle.FireTimeUtc; scheduledFireTimeUtc = firedBundle.ScheduledFireTimeUtc; prevFireTimeUtc = firedBundle.PrevFireTimeUtc; nextFireTimeUtc = firedBundle.NextFireTimeUtc; jobDataMap = new JobDataMap(); jobDataMap.PutAll(jobDetail.JobDataMap); jobDataMap.PutAll(trigger.JobDataMap); }
/// <summary> /// serialize /// </summary> /// <param name="data">The data.</param> /// <returns></returns> private byte[] SerializeProperties(JobDataMap data) { byte[] retValue = null; if (null != data) { NameValueCollection properties = ConvertToProperty(data.WrappedMap); retValue = SerializeObject(properties); } return retValue; }
/// <summary> /// Trigger the identified <see cref="IJob" /> (Execute it /// now) - with a volatile trigger. /// </summary> public virtual void TriggerJobWithVolatileTrigger(SchedulingContext ctxt, string jobName, string groupName, JobDataMap data) { ValidateState(); if (groupName == null) { groupName = SchedulerConstants.DefaultGroup; } Trigger trig = new SimpleTrigger(NewTriggerId(), SchedulerConstants.DefaultManualTriggers, jobName, groupName, DateTime.UtcNow, null, 0, TimeSpan.Zero); trig.Volatile = true; trig.ComputeFirstFireTimeUtc(null); if (data != null) { trig.JobDataMap = data; } bool collision = true; while (collision) { try { resources.JobStore.StoreTrigger(ctxt, trig, false); collision = false; } catch (ObjectAlreadyExistsException) { trig.Name = NewTriggerId(); } } NotifySchedulerThread(trig.GetNextFireTimeUtc()); NotifySchedulerListenersScheduled(trig); }
/// <summary> /// Remove the transient data from and then create a serialized <see cref="MemoryStream" /> /// version of a <see cref="JobDataMap" /> and returns the underlying bytes. /// </summary> /// <param name="data">The data.</param> /// <returns>the serialized data as byte array</returns> public virtual byte[] SerializeJobData(JobDataMap data) { if (CanUseProperties) { return SerializeProperties(data); } try { return SerializeObject(data); } catch (SerializationException e) { throw new SerializationException( "Unable to serialize JobDataMap for insertion into " + "database because the value of property '" + GetKeyOfNonSerializableValue(data) + "' is not serializable: " + e.Message); } }