def scheduleJob()

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.")
            }
        //}
    }