Search in sources :

Example 21 with JobDetail

use of org.quartz.JobDetail in project openhab1-addons by openhab.

the class JobScheduler method schedule.

/**
     * Schedules a job by trigger.
     */
private void schedule(String jobName, Class<? extends Job> job, Trigger trigger, JobDataMap jobDataMap) {
    try {
        JobDetail jobDetail = newJob(job).withIdentity(jobName, JOB_GROUP).usingJobData(jobDataMap).build();
        scheduler.scheduleJob(jobDetail, trigger);
    } catch (SchedulerException ex) {
        logger.error(ex.getMessage(), ex);
    }
}
Also used : JobDetail(org.quartz.JobDetail) SchedulerException(org.quartz.SchedulerException)

Example 22 with JobDetail

use of org.quartz.JobDetail in project openhab1-addons by openhab.

the class OceanicBinding method execute.

@Override
protected void execute() {
    if (isProperlyConfigured()) {
        Scheduler sched = null;
        try {
            sched = StdSchedulerFactory.getDefaultScheduler();
        } catch (SchedulerException e) {
            logger.error("An exception occurred while getting a reference to the Quartz Scheduler");
        }
        // reset the contextMap before rebuilding it
        for (String serialPort : serialDevices.keySet()) {
            Set<String> itemNames = contextMap.get(serialPort);
            if (itemNames != null) {
                contextMap.clear();
            }
        }
        for (OceanicBindingProvider provider : providers) {
            for (String itemName : provider.getItemNames()) {
                String serialPort = provider.getSerialPort(itemName);
                SerialDevice serialDevice = serialDevices.get(serialPort);
                boolean serialDeviceReady = true;
                if (serialDevice == null) {
                    serialDevice = new SerialDevice(serialPort);
                    try {
                        serialDevice.initialize();
                    } catch (InitializationException e) {
                        logger.error("Could not open serial port " + serialPort + ": " + e.getMessage());
                        serialDeviceReady = false;
                    } catch (Throwable e) {
                        logger.error("Could not open serial port " + serialPort + ": " + e.getMessage());
                        serialDeviceReady = false;
                    }
                    if (serialDeviceReady) {
                        serialDevice.setEventPublisher(eventPublisher);
                        serialDevices.put(serialPort, serialDevice);
                    }
                }
                Set<String> itemNames = contextMap.get(serialPort);
                if (itemNames == null) {
                    itemNames = new HashSet<String>();
                    contextMap.put(serialPort, itemNames);
                }
                itemNames.add(itemName);
                if (serialDeviceReady) {
                    // set up the polling jobs
                    boolean jobExists = false;
                    // enumerate each job group
                    try {
                        for (String group : sched.getJobGroupNames()) {
                            // enumerate each job in group
                            if (group.equals("Oceanic-" + provider.toString())) {
                                for (JobKey jobKey : sched.getJobKeys(jobGroupEquals(group))) {
                                    if (jobKey.getName().equals(itemName + "-" + provider.getValueSelector(itemName).toString())) {
                                        jobExists = true;
                                        break;
                                    }
                                }
                            }
                        }
                    } catch (SchedulerException e1) {
                        logger.error("An exception occurred while querying the Quartz Scheduler ({})", e1.getMessage());
                    }
                    if (!jobExists && OceanicValueSelector.getValueSelector(provider.getValueSelector(itemName), ValueSelectorType.GET) != null) {
                        // set up the Quartz jobs
                        JobDataMap map = new JobDataMap();
                        map.put("SerialPort", serialPort);
                        map.put("ValueSelector", OceanicValueSelector.getValueSelector(provider.getValueSelector(itemName), ValueSelectorType.GET));
                        map.put("Binding", this);
                        JobDetail job = newJob(OceanicBinding.PollJob.class).withIdentity(itemName + "-" + provider.getValueSelector(itemName).toString(), "Oceanic-" + provider.toString()).usingJobData(map).build();
                        Trigger trigger = newTrigger().withIdentity(itemName + "-" + provider.getValueSelector(itemName).toString(), "Oceanic-" + provider.toString()).startNow().withSchedule(simpleSchedule().repeatForever().withIntervalInSeconds(provider.getPollingInterval(itemName))).build();
                        try {
                            logger.debug("Adding a poll job {} for {}", job.getKey(), itemName);
                            sched.scheduleJob(job, trigger);
                        } catch (SchedulerException e) {
                            logger.error("An exception occurred while scheduling a Quartz Job");
                        }
                    }
                    // kill the Quartz jobs that we do not need anymore
                    try {
                        for (String group : sched.getJobGroupNames()) {
                            // enumerate each job in group
                            if (group.equals("Oceanic-" + provider.toString())) {
                                for (JobKey jobKey : sched.getJobKeys(jobGroupEquals(group))) {
                                    if (findFirstMatchingBindingProvider(jobKey.getName().split("-")[0]) == null) {
                                        logger.debug("Removing a poll job {} for {}", jobKey, itemName);
                                        sched.deleteJob(jobKey);
                                    }
                                }
                            }
                        }
                    } catch (SchedulerException e1) {
                        logger.error("An exception occurred while querying the Quartz Scheduler ({})", e1.getMessage());
                    }
                }
            }
        }
        // close down the serial ports that do not have any Items anymore associated to them
        for (String serialPort : serialDevices.keySet()) {
            SerialDevice serialDevice = serialDevices.get(serialPort);
            Set<String> itemNames = contextMap.get(serialPort);
            if (itemNames == null || itemNames.size() == 0) {
                contextMap.remove(serialPort);
                logger.debug("Closing the serial port {}", serialPort);
                serialDevice.close();
                serialDevices.remove(serialPort);
            }
        }
    }
}
Also used : JobDataMap(org.quartz.JobDataMap) SchedulerException(org.quartz.SchedulerException) Scheduler(org.quartz.Scheduler) OceanicBindingProvider(org.openhab.binding.oceanic.OceanicBindingProvider) JobKey(org.quartz.JobKey) JobDetail(org.quartz.JobDetail) Trigger(org.quartz.Trigger) TriggerBuilder.newTrigger(org.quartz.TriggerBuilder.newTrigger)

Example 23 with JobDetail

use of org.quartz.JobDetail in project openhab1-addons by openhab.

the class WeatherJobScheduler method scheduleIntervalJob.

/**
     * Schedules the WeatherJob with the specified interval and starts it
     * immediately.
     */
public void scheduleIntervalJob(LocationConfig locationConfig) {
    String jobName = "weatherJob-" + locationConfig.getLocationId();
    int interval = locationConfig.getUpdateInterval() * 60;
    JobDataMap jobDataMap = new JobDataMap();
    jobDataMap.put("locationId", locationConfig.getLocationId());
    try {
        Trigger trigger = newTrigger().withIdentity(jobName + "-Trigger", JOB_GROUP).startNow().withSchedule(simpleSchedule().repeatForever().withIntervalInSeconds(interval)).build();
        JobDetail jobDetail = newJob(WeatherJob.class).withIdentity(jobName, JOB_GROUP).usingJobData(jobDataMap).build();
        scheduler.scheduleJob(jobDetail, trigger);
        logger.info("Starting and scheduling {} with interval of {} minutes", jobName, locationConfig.getUpdateInterval());
    } catch (SchedulerException ex) {
        logger.error(ex.getMessage(), ex);
    }
}
Also used : JobDataMap(org.quartz.JobDataMap) JobDetail(org.quartz.JobDetail) TriggerBuilder.newTrigger(org.quartz.TriggerBuilder.newTrigger) Trigger(org.quartz.Trigger) SchedulerException(org.quartz.SchedulerException)

Example 24 with JobDetail

use of org.quartz.JobDetail in project spring-framework by spring-projects.

the class SchedulerAccessor method registerJobsAndTriggers.

/**
	 * Register jobs and triggers (within a transaction, if possible).
	 */
protected void registerJobsAndTriggers() throws SchedulerException {
    TransactionStatus transactionStatus = null;
    if (this.transactionManager != null) {
        transactionStatus = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
    }
    try {
        if (this.jobSchedulingDataLocations != null) {
            ClassLoadHelper clh = new ResourceLoaderClassLoadHelper(this.resourceLoader);
            clh.initialize();
            XMLSchedulingDataProcessor dataProcessor = new XMLSchedulingDataProcessor(clh);
            for (String location : this.jobSchedulingDataLocations) {
                dataProcessor.processFileAndScheduleJobs(location, getScheduler());
            }
        }
        // Register JobDetails.
        if (this.jobDetails != null) {
            for (JobDetail jobDetail : this.jobDetails) {
                addJobToScheduler(jobDetail);
            }
        } else {
            // Create empty list for easier checks when registering triggers.
            this.jobDetails = new LinkedList<>();
        }
        // Register Calendars.
        if (this.calendars != null) {
            for (String calendarName : this.calendars.keySet()) {
                Calendar calendar = this.calendars.get(calendarName);
                getScheduler().addCalendar(calendarName, calendar, true, true);
            }
        }
        // Register Triggers.
        if (this.triggers != null) {
            for (Trigger trigger : this.triggers) {
                addTriggerToScheduler(trigger);
            }
        }
    } catch (Throwable ex) {
        if (transactionStatus != null) {
            try {
                this.transactionManager.rollback(transactionStatus);
            } catch (TransactionException tex) {
                logger.error("Job registration exception overridden by rollback exception", ex);
                throw tex;
            }
        }
        if (ex instanceof SchedulerException) {
            throw (SchedulerException) ex;
        }
        if (ex instanceof Exception) {
            throw new SchedulerException("Registration of jobs and triggers failed: " + ex.getMessage(), ex);
        }
        throw new SchedulerException("Registration of jobs and triggers failed: " + ex.getMessage());
    }
    if (transactionStatus != null) {
        this.transactionManager.commit(transactionStatus);
    }
}
Also used : DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) SchedulerException(org.quartz.SchedulerException) XMLSchedulingDataProcessor(org.quartz.xml.XMLSchedulingDataProcessor) Calendar(org.quartz.Calendar) TransactionStatus(org.springframework.transaction.TransactionStatus) ClassLoadHelper(org.quartz.spi.ClassLoadHelper) SchedulerException(org.quartz.SchedulerException) ObjectAlreadyExistsException(org.quartz.ObjectAlreadyExistsException) TransactionException(org.springframework.transaction.TransactionException) JobDetail(org.quartz.JobDetail) Trigger(org.quartz.Trigger) TransactionException(org.springframework.transaction.TransactionException)

Example 25 with JobDetail

use of org.quartz.JobDetail in project camel by apache.

the class QuartzCronTriggerRouteTest method testQuartzCronRoute.

@Test
public void testQuartzCronRoute() throws Exception {
    MockEndpoint mock = getMockEndpoint("mock:result");
    mock.expectedMinimumMessageCount(3);
    assertMockEndpointsSatisfied();
    JobDetail job = mock.getReceivedExchanges().get(0).getIn().getHeader("jobDetail", JobDetail.class);
    assertNotNull(job);
    assertEquals("cron", job.getJobDataMap().get(QuartzConstants.QUARTZ_TRIGGER_TYPE));
    assertEquals("UTC", job.getJobDataMap().get(QuartzConstants.QUARTZ_TRIGGER_CRON_TIMEZONE));
    assertEquals("0/2 * * * * ?", job.getJobDataMap().get(QuartzConstants.QUARTZ_TRIGGER_CRON_EXPRESSION));
}
Also used : JobDetail(org.quartz.JobDetail) MockEndpoint(org.apache.camel.component.mock.MockEndpoint) Test(org.junit.Test)

Aggregations

JobDetail (org.quartz.JobDetail)122 SchedulerException (org.quartz.SchedulerException)56 Trigger (org.quartz.Trigger)47 Scheduler (org.quartz.Scheduler)33 Test (org.junit.Test)30 CronTrigger (org.quartz.CronTrigger)25 JobKey (org.quartz.JobKey)22 SimpleTrigger (org.quartz.SimpleTrigger)21 JobDataMap (org.quartz.JobDataMap)18 TriggerBuilder.newTrigger (org.quartz.TriggerBuilder.newTrigger)14 MockEndpoint (org.apache.camel.component.mock.MockEndpoint)11 TriggerKey (org.quartz.TriggerKey)10 HashMap (java.util.HashMap)8 IOException (java.io.IOException)5 Serializable (java.io.Serializable)5 ArrayList (java.util.ArrayList)5 Date (java.util.Date)5 Command (org.openhab.core.types.Command)5 InetSocketAddress (java.net.InetSocketAddress)4 SocketChannel (java.nio.channels.SocketChannel)4