Link to work

I am having trouble successfully scheduling a job without getting the error mentioned in the header, in particular: The job (CRAWLS.my_repos) referenced by the trigger does not exist. [See nested exception: org.quartz.JobPersistenceException: The job (CRAWLS.my_repos) referenced by the trigger does not exist.]

Here's a look at the code ... from which everything seems to be in order.

The runJob method ... the main thing to note is that it does not work on this line: m_scheduler.scheduleJob(trigger);The rest of the method exists if the rest is useful.

public void runJob(JobInfo jobInfo, 
        com.lawson.search.spi.common.Properties jobProperties)
{
    try {
        JobDataMap jobDataMap = QuartzUtils.createJobDataMapFromLesProperties(jobProperties);
        if (jobExists(jobInfo)) {
            m_scheduler.triggerJob(jobKey(jobInfo.getName(), jobInfo.getGroup()), jobDataMap);
        } else {
            JobDetail job = QuartzUtils.createJobDetailFromJobInfo(jobInfo);
            Trigger trigger = newTrigger()
                .forJob(job)
                .withIdentity(getImmediateTriggerName(jobInfo))
                .build();
            m_scheduler.scheduleJob(trigger);
        }
    } catch (SchedulerException e) {
        String msg = "runJob: " + jobInfo;
        if (s_log.isDebugEnabled()) {
            s_log.debug(msg, e);
        }
        throw new JobSchedulerException(msg, e);
    }
}

The method createJobDetailFromJobInfo()is simple but important:

static JobDetail createJobDetailFromJobInfo(JobInfo theJobInfo)
{
  JobDetail detail = newJob(QuartzJobAdapter.class)
    .withIdentity(theJobInfo.getName(), theJobInfo.getGroup())
    .storeDurably()
    .build();
  return detail;
}

The only important method that I can think of is a method getImmediateTriggerName()that I think can cause a problem ... but I don't know why.

private String getImmediateTriggerName(JobInfo jobInfo)
{
    return jobInfo.getName() + "#" + jobInfo.getGroup() + ":" + System.currentTimeMillis();
}

Any help would be appreciated.

+4
source share
2 answers

Try to schedule a task with

// Schedule the job with the trigger 
m_scheduler.scheduleJob(job, trigger);

instead

m_scheduler.scheduleJob(trigger);

quartz-scheduler.org:

How-To: 2.1.x How-To: 2.2.x

// Define job instance
JobDetail job1 = newJob(ColorJob.class)
    .withIdentity("job1", "group1")
    .build();

// Define a Trigger that will fire "now", and not repeat
Trigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .startNow()
    .build();

// Schedule the job with the trigger 
sched.scheduleJob(job, trigger);

, JobDetail storeTrigger

if (retrieveJob(newTrigger.getJobKey()) == null) {
    throw new JobPersistenceException("The job ("
            + newTrigger.getJobKey()
            + ") referenced by the trigger does not exist.");
}

// add to triggers array
triggers.add(tw);

....

public JobDetail retrieveJob(JobKey jobKey) {
    synchronized(lock) {
        JobWrapper jw = jobsByKey.get(jobKey);
        return (jw != null) ? (JobDetail)jw.jobDetail.clone() : null;
    }
}

, forJob TriggerBuilder

public TriggerBuilder<T> forJob(JobDetail jobDetail) {
    JobKey k = jobDetail.getKey();
    if(k.getName() == null)
        throw new IllegalArgumentException("The given job has not yet had a name assigned to it.");
    this.jobKey = k;
    return this;
}

m_scheduler.scheduleJob(job, trigger);

, , , , , , .

+6

, , myJobClass.getClass(), , , (.. ... $$ EnhancerByGuice $$ 13 DB15). - Spring.

+1

All Articles