}
@Override
protected void doDispatch(MuleEvent event) throws Exception
{
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();
// make the job name unique per endpoint (MULE-753)
jobDetail.setName(endpoint.getEndpointURI().getAddress() + "-" + event.getId());
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put(QuartzConnector.PROPERTY_JOB_DYNAMIC, Boolean.TRUE);
MuleMessage msg = event.getMessage();
// populate from invocation and outbound scopes only
for (String key : msg.getInvocationPropertyNames())
{
jobDataMap.put(key, msg.getInvocationProperty(key));
}
for (String key : msg.getOutboundPropertyNames())
{
jobDataMap.put(key, msg.getOutboundProperty(key));
}
if (jobConfig instanceof ScheduledDispatchJobConfig)
{
ScheduledDispatchJobConfig scheduledDispatchJobConfig = (ScheduledDispatchJobConfig) jobConfig;
String endpointRef = event.getMuleContext()
.getExpressionManager()
.parse(scheduledDispatchJobConfig.getEndpointRef(), event);
jobDataMap.put("endpointRef", endpointRef);
}
jobDetail.setJobDataMap(jobDataMap);
Job job = null;
// work out what we're actually calling
Object payload = event.getMessage().getPayload();
if(jobConfig instanceof CustomJobConfig)
{
job = ((CustomJobConfig) jobConfig).getJob();
}
else if(jobConfig instanceof CustomJobFromMessageConfig)
{
job = ((CustomJobFromMessageConfig) jobConfig).getJob(msg);
//rewrite the jobConfig to the real Jobconfig on the message
jobConfig = ((CustomJobFromMessageConfig) jobConfig).getJobConfig(msg);
}
jobDataMap.put(QuartzConnector.PROPERTY_JOB_CONFIG, jobConfig);
jobDetail.setJobClass(jobConfig.getJobClass());
// If there has been a job created or found then we default to a customJob configuration
if (job != null)
{
jobDataMap.put(QuartzConnector.PROPERTY_JOB_OBJECT, job);
jobDetail.setJobClass(CustomJob.class);
}
// The payload will be ignored by the CustomJob - don't know why we need it here
//RM: The custom job may want the message and the Job type may not be delegating job
jobDataMap.put(QuartzConnector.PROPERTY_PAYLOAD, payload);
Trigger trigger;
String cronExpression = jobDataMap.getString(QuartzConnector.PROPERTY_CRON_EXPRESSION);
String repeatInterval = jobDataMap.getString(QuartzConnector.PROPERTY_REPEAT_INTERVAL);
String repeatCount = jobDataMap.getString(QuartzConnector.PROPERTY_REPEAT_COUNT);
String startDelay = jobDataMap.getString(QuartzConnector.PROPERTY_START_DELAY);
String groupName = jobConfig.getGroupName();
String jobGroupName = jobConfig.getJobGroupName();
if (groupName == null)
{
groupName = QuartzConnector.DEFAULT_GROUP_NAME;
}