public void registerNewJob()

in deltaspike/modules/scheduler/impl/src/main/java/org/apache/deltaspike/scheduler/impl/AbstractQuartzScheduler.java [172:244]


    public void registerNewJob(Class<? extends T> jobClass)
    {
        JobKey jobKey = createJobKey(jobClass);

        try
        {
            Scheduled scheduled = jobClass.getAnnotation(Scheduled.class);

            String description = scheduled.description();

            if ("".equals(scheduled.description()))
            {
                description = jobClass.getName();
            }

            JobDetail jobDetail = this.scheduler.getJobDetail(jobKey);
            Trigger trigger;

            if (jobDetail == null)
            {
                Class<? extends Job> jobClassToAdd = createFinalJobClass(jobClass);
                jobDetail = JobBuilder.newJob(jobClassToAdd)
                        .withDescription(description)
                        .withIdentity(jobKey)
                        .build();

                scheduleNewJob(scheduled, jobKey, jobDetail);
            }
            else if (scheduled.overrideOnStartup())
            {
                List<? extends Trigger> existingTriggers = this.scheduler.getTriggersOfJob(jobKey);

                if (existingTriggers == null || existingTriggers.isEmpty())
                {
                    scheduleNewJob(scheduled, jobKey, jobDetail);
                    return;
                }

                if (existingTriggers.size() > 1)
                {
                    throw new IllegalStateException("multiple triggers found for " + jobKey + " ('" + jobDetail + "')" +
                        ", but aren't supported by @" + Scheduled.class.getName() + "#overrideOnStartup");
                }

                trigger = existingTriggers.iterator().next();

                if (scheduled.cronExpression().startsWith("{") && scheduled.cronExpression().endsWith("}"))
                {
                    this.scheduler.unscheduleJobs(Arrays.asList(trigger.getKey()));

                    scheduleNewJob(scheduled, jobKey, jobDetail);
                }
                else
                {
                    trigger = TriggerBuilder.newTrigger()
                            .withIdentity(trigger.getKey())
                            .withSchedule(CronScheduleBuilder.cronSchedule(scheduled.cronExpression()))
                            .build();

                    this.scheduler.rescheduleJob(trigger.getKey(), trigger);
                }
            }
            else
            {
                Logger.getLogger(AbstractQuartzScheduler.class.getName()).info(
                    jobKey + " exists already and will be ignored.");
            }
        }
        catch (SchedulerException e)
        {
            throw ExceptionUtils.throwAsRuntimeException(e);
        }
    }