in src/main/groovy/quartz/QuartzGrailsPlugin.groovy [218:274]
def scheduleJob(GrailsJobClass jobClass, ApplicationContext ctx, boolean hasHibernate) {
Scheduler scheduler = ctx.quartzScheduler
if (scheduler) {
def fullName = jobClass.fullName
// Creates job details
JobDetailFactoryBean jdfb = new JobDetailFactoryBean()
jdfb.jobClass = jobClass
jdfb.afterPropertiesSet()
JobDetail jobDetail = jdfb.object
// adds the job to the scheduler, and associates triggers with it
scheduler.addJob(jobDetail, true)
def hasJdbcStore = grailsApplication.config.getProperty('quartz.jdbcStore')?.toBoolean()
if (hasJdbcStore == null) {
hasJdbcStore = true
}
// The session listener if is needed
if (hasHibernate && (jobClass.sessionRequired || hasJdbcStore)) {
SessionBinderJobListener listener = ctx.getBean(SessionBinderJobListener.NAME)
if (listener != null) {
ListenerManager listenerManager = scheduler.getListenerManager()
KeyMatcher<JobKey> matcher = KeyMatcher.keyEquals(jobDetail.key)
if (listenerManager.getJobListener(listener.getName()) == null) {
listenerManager.addJobListener(listener, matcher)
} else {
listenerManager.addJobListenerMatcher(listener.getName(), matcher)
}
} else {
log.error("The SessionBinderJobListener has not been initialized.")
}
}
// Creates and schedules triggers
jobClass.triggers.each { name, Expando descriptor ->
CustomTriggerFactoryBean factory = new CustomTriggerFactoryBean()
factory.triggerClass = descriptor.triggerClass
factory.triggerAttributes = descriptor.triggerAttributes
factory.jobDetail = jobDetail
factory.afterPropertiesSet()
Trigger trigger = factory.object
TriggerKey key = trigger.key
log.debug("Scheduling $fullName with trigger $key: ${trigger}")
if (scheduler.getTrigger(key) != null) {
scheduler.rescheduleJob(key, trigger)
} else {
scheduler.scheduleJob(trigger)
}
log.debug("Job ${fullName} scheduled")
}
} else {
log.error("Failed to schedule job details and job triggers: scheduler not found.")
}
//}
}