@Override
protected void doStart() throws MuleException
{
try
{
Scheduler scheduler = connector.getQuartzScheduler();
JobConfig jobConfig = (JobConfig) endpoint.getProperty(QuartzConnector.PROPERTY_JOB_CONFIG);
if (jobConfig == null)
{
throw new IllegalArgumentException(CoreMessages.objectIsNull(QuartzConnector.PROPERTY_JOB_CONFIG).getMessage());
}
JobDetail jobDetail = new JobDetail();
jobDetail.setName(endpoint.getEndpointURI().getAddress());
jobDetail.setJobClass(jobConfig.getJobClass());
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put(QUARTZ_RECEIVER_PROPERTY, this.getReceiverKey());
jobDataMap.put(QUARTZ_CONNECTOR_PROPERTY, this.connector.getName());
jobDataMap.putAll(endpoint.getProperties());
if (jobConfig instanceof EventGeneratorJobConfig)
{
jobDataMap.put(QuartzConnector.PROPERTY_PAYLOAD, ((EventGeneratorJobConfig) jobConfig).getPayload());
}
jobDataMap.put(QuartzConnector.PROPERTY_JOB_CONFIG, jobConfig);
Job job = null;
if (jobConfig instanceof CustomJobConfig)
{
job = ((CustomJobConfig) jobConfig).getJob();
}
// If there has been a job created or found then we default to a custom Job configuration
if (job != null)
{
jobDataMap.put(QuartzConnector.PROPERTY_JOB_OBJECT, job);
jobDetail.setJobClass(jobConfig.getJobClass());
}
jobDetail.setJobDataMap(jobDataMap);
Trigger trigger;
String cronExpression = (String)endpoint.getProperty(QuartzConnector.PROPERTY_CRON_EXPRESSION);
String repeatInterval = (String)endpoint.getProperty(QuartzConnector.PROPERTY_REPEAT_INTERVAL);
String repeatCount = (String)endpoint.getProperty(QuartzConnector.PROPERTY_REPEAT_COUNT);
String startDelay = (String)endpoint.getProperty(QuartzConnector.PROPERTY_START_DELAY);
String groupName = jobConfig.getGroupName();
String jobGroupName = jobConfig.getJobGroupName();
if (groupName == null)
{
groupName = QuartzConnector.DEFAULT_GROUP_NAME;
}
if (jobGroupName == null)
{
jobGroupName = groupName;
}
jobDetail.setGroup(groupName);
if (cronExpression != null)
{
CronTrigger ctrigger = new CronTrigger();
ctrigger.setCronExpression(cronExpression);
trigger = ctrigger;
}
else if (repeatInterval != null)
{
SimpleTrigger strigger = new SimpleTrigger();
strigger.setRepeatInterval(Long.parseLong(repeatInterval));
if (repeatCount != null)
{
strigger.setRepeatCount(Integer.parseInt(repeatCount));
}
else
{
strigger.setRepeatCount(-1);
}
trigger = strigger;
}
else
{
throw new IllegalArgumentException(
QuartzMessages.cronExpressionOrIntervalMustBeSet().getMessage());
}
trigger.setName(endpoint.getEndpointURI().getAddress());
trigger.setGroup(groupName);
trigger.setJobName(endpoint.getEndpointURI().getAddress());
trigger.setJobGroup(jobGroupName);
// Minimize the the time window capturing the start time and scheduling the job.
long start = System.currentTimeMillis();
if (startDelay != null)
{
start += Long.parseLong(startDelay);
}
trigger.setStartTime(new Date(start));
// We need to handle cases when the job has already been persisted
try
{
scheduler.scheduleJob(jobDetail, trigger);
}
catch (ObjectAlreadyExistsException oaee)
{
logger.warn("A quartz Job with name: " + endpoint.getEndpointURI().getAddress() +
" has already been registered. Cannot register again");