/** Initialize each job. */ protected void initializeJobs(Session jcrSession) { Collection<KKStoreConfig> kkStoreConfigs = HippoModuleConfig.getConfig().getStoresConfig().values(); if (kkStoreConfigs.size() == 0) { log.error("No store config has been found. Please check the konakart:konakart configuration"); return; } // Get the first one. KKStoreConfig kkStoreConfig = kkStoreConfigs.iterator().next(); try { String triggerName = MASS_SYNC_JOB_TRIGGER; String jobName = MASS_SYNC_JOB_ONCE; JobDetail jobDetail = new JobDetail(jobName, MASS_SYNC_JOB_GROUP, Class.forName(kkStoreConfig.getJobClass())); JobDataMap dataMap = new JobDataMap(); jobDetail.setJobDataMap(dataMap); // Create a trigger that fires immediately, and run only once Trigger trigger = new SimpleTrigger(MASS_SYNC_JOB_TRIGGER_ONCE); trigger.setStartTime(new Date(System.currentTimeMillis() + 10000)); if (!triggerExists(trigger)) { resourceScheduler.scheduleJob(jobDetail, trigger); } jobName = MASS_SYNC_JOB; jobDetail = new JobDetail(jobName, MASS_SYNC_JOB_GROUP, Class.forName(kkStoreConfig.getJobClass())); // Create the cron task. The first launch is scheduled after 30 minutes if (StringUtils.isNotEmpty(kkStoreConfig.getCronExpression())) { trigger = new CronTrigger( triggerName, MASS_SYNC_JOB_TRIGGER_GROUP, jobName, MASS_SYNC_JOB_GROUP, kkStoreConfig.getCronExpression()); trigger.setStartTime(new Date(System.currentTimeMillis() + 1000)); if (triggerExists(trigger)) { if (triggerChanged(trigger)) { resourceScheduler.rescheduleJob( MASS_SYNC_JOB_TRIGGER, MASS_SYNC_JOB_TRIGGER_GROUP, trigger); } } else { resourceScheduler.scheduleJob(jobDetail, trigger); } } } catch (ClassNotFoundException e) { log.error("Failed to find the Job class named - " + kkStoreConfig.getJobClass(), e); } catch (ParseException e) { log.error("Failed to parse the cron expression - " + kkStoreConfig.getCronExpression(), e); } catch (SchedulerException e) { log.error("Failed to start the job", e); } }