/* * Copyright 2001-2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * */ package org.quartz.impl; import java.util.Date; import java.util.List; import java.util.Set; import javax.management.AttributeList; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import org.quartz.Calendar; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobListener; import org.quartz.Scheduler; import org.quartz.SchedulerContext; import org.quartz.SchedulerException; import org.quartz.SchedulerListener; import org.quartz.SchedulerMetaData; import org.quartz.Trigger; import org.quartz.TriggerListener; import org.quartz.UnableToInterruptJobException; import org.quartz.core.SchedulingContext; import org.quartz.spi.JobFactory; /** * <p> * An implementation of the <code>Scheduler</code> interface that remotely * proxies all method calls to the equivalent call on a given <code>QuartzScheduler</code> * instance, via JMX. * </p> * * <p> * A user must create a subclass to implement the actual connection to the remote * MBeanServer using their application specific connector. * For example <code>{@link org.quartz.ee.jmx.jboss.JBoss4RMIRemoteMBeanScheduler}</code>. * </p> * @see org.quartz.Scheduler * @see org.quartz.core.QuartzScheduler * @see org.quartz.core.SchedulingContext */ public abstract class RemoteMBeanScheduler implements Scheduler { /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Data members. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ private SchedulingContext schedulingContext; private ObjectName schedulerObjectName; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Constructors. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ public RemoteMBeanScheduler() { } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Properties. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /** * Get the name under which the Scheduler MBean is registered on the * remote MBean server. */ protected ObjectName getSchedulerObjectName() { return schedulerObjectName; } /** * Set the name under which the Scheduler MBean is registered on the * remote MBean server. */ public void setSchedulerObjectName(String schedulerObjectName) throws SchedulerException { try { this.schedulerObjectName = new ObjectName(schedulerObjectName); } catch (MalformedObjectNameException e) { throw new SchedulerException("Failed to parse Scheduler MBean name: " + schedulerObjectName, e); } } /** * Set the name under which the Scheduler MBean is registered on the * remote MBean server. */ public void setSchedulerObjectName(ObjectName schedulerObjectName) throws SchedulerException { this.schedulerObjectName = schedulerObjectName; } /** * Set the scheduling context of this proxy. */ public void setSchedulingContext(SchedulingContext schedulingContext) { this.schedulingContext = schedulingContext; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Abstract methods. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /** * Initialize this RemoteMBeanScheduler instance, connecting to the * remote MBean server. */ public abstract void initialize() throws SchedulerException; /** * Get the given attribute of the remote Scheduler MBean. */ protected abstract Object getAttribute( String attribute) throws SchedulerException; /** * Get the given attributes of the remote Scheduler MBean. */ protected abstract AttributeList getAttributes(String[] attributes) throws SchedulerException; /** * Invoke the given operation on the remote Scheduler MBean. */ protected abstract Object invoke( String operationName, Object[] params, String[] signature) throws SchedulerException; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Interface. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /** * <p> * Returns the name of the <code>Scheduler</code>. * </p> */ public String getSchedulerName() throws SchedulerException { return (String)getAttribute("schedulerName"); } /** * <p> * Returns the instance Id of the <code>Scheduler</code>. * </p> */ public String getSchedulerInstanceId() throws SchedulerException { return (String)getAttribute("schedulerInstanceId"); } public SchedulerMetaData getMetaData() throws SchedulerException { AttributeList attributeList = getAttributes( new String[] { "schedulerName", "schedulerInstanceId", "inStandbyMode", "shutdown", "jobStoreClass", "threadPoolClass", "threadPoolSize", "version" }); return new SchedulerMetaData( (String)attributeList.get(0), (String)attributeList.get(1), getClass(), true, isStarted(), ((Boolean)attributeList.get(2)).booleanValue(), ((Boolean)attributeList.get(3)).booleanValue(), (Date)invoke("runningSince", new Object[] {}, new String[] {}), ((Integer)invoke("numJobsExecuted", new Object[] {}, new String[] {})).intValue(), (Class)attributeList.get(4), ((Boolean)invoke("supportsPersistence", new Object[] {}, new String[] {})).booleanValue(), ((Boolean)invoke("isClustered", new Object[] {}, new String[] {})).booleanValue(), (Class)attributeList.get(5), ((Integer)attributeList.get(6)).intValue(), (String)attributeList.get(7)); } /** * <p> * Returns the <code>SchedulerContext</code> of the <code>Scheduler</code>. * </p> */ public SchedulerContext getContext() throws SchedulerException { return (SchedulerContext)getAttribute("schedulerContext"); } /////////////////////////////////////////////////////////////////////////// /// /// Schedululer State Management Methods /// /////////////////////////////////////////////////////////////////////////// /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void start() throws SchedulerException { invoke("start", new Object[] {}, new String[] {}); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void startDelayed(int seconds) throws SchedulerException { invoke("startDelayed", new Object[] {new Integer(seconds)}, new String[] {int.class.getName()}); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void standby() throws SchedulerException { invoke("standby", new Object[] {}, new String[] {}); } /** * Whether the scheduler has been started. * * <p> * Note: This only reflects whether <code>{@link #start()}</code> has ever * been called on this Scheduler, so it will return <code>true</code> even * if the <code>Scheduler</code> is currently in standby mode or has been * since shutdown. * </p> * * @see #start() * @see #isShutdown() * @see #isInStandbyMode() */ public boolean isStarted() throws SchedulerException { return (invoke("runningSince", new Object[] {}, new String[] {}) != null); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public boolean isInStandbyMode() throws SchedulerException { return ((Boolean)getAttribute("inStandbyMode")).booleanValue(); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void shutdown() throws SchedulerException { // Have to get the scheduler name before we actually call shutdown. String schedulerName = getSchedulerName(); invoke("shutdown", new Object[] {}, new String[] {}); SchedulerRepository.getInstance().remove(schedulerName); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void shutdown(boolean waitForJobsToComplete) throws SchedulerException { // Have to get the scheduler name before we actually call shutdown. String schedulerName = getSchedulerName(); invoke( "shutdown", new Object[] { toBoolean(waitForJobsToComplete) }, new String[] { boolean.class.getName() }); SchedulerRepository.getInstance().remove(schedulerName); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public boolean isShutdown() throws SchedulerException { return ((Boolean)getAttribute("shutdown")).booleanValue(); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public List getCurrentlyExecutingJobs() throws SchedulerException { return (List)invoke("getCurrentlyExecutingJobs", new Object[] {}, new String[] {}); } /////////////////////////////////////////////////////////////////////////// /// /// Scheduling-related Methods /// /////////////////////////////////////////////////////////////////////////// /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public Date scheduleJob(JobDetail jobDetail, Trigger trigger) throws SchedulerException { return (Date)invoke( "scheduleJob", new Object[] { schedulingContext, jobDetail, trigger }, new String[] { SchedulingContext.class.getName(), JobDetail.class.getName(), Trigger.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public Date scheduleJob(Trigger trigger) throws SchedulerException { return (Date)invoke( "scheduleJob", new Object[] { schedulingContext, trigger }, new String[] { SchedulingContext.class.getName(), Trigger.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void addJob(JobDetail jobDetail, boolean replace) throws SchedulerException { invoke( "addJob", new Object[] { schedulingContext, jobDetail, toBoolean(replace) }, new String[] { SchedulingContext.class.getName(), JobDetail.class.getName(), boolean.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public boolean deleteJob(String jobName, String groupName) throws SchedulerException { return ((Boolean)invoke( "deleteJob", new Object[] { schedulingContext, jobName, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() })).booleanValue(); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public boolean unscheduleJob(String triggerName, String groupName) throws SchedulerException { return ((Boolean)invoke( "unscheduleJob", new Object[] { schedulingContext, triggerName, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() })).booleanValue(); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public Date rescheduleJob(String triggerName, String groupName, Trigger newTrigger) throws SchedulerException { return (Date)invoke( "unscheduleJob", new Object[] { schedulingContext, triggerName, groupName, newTrigger}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName(), Trigger.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void triggerJob(String jobName, String groupName) throws SchedulerException { triggerJob(jobName, groupName, null); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void triggerJob(String jobName, String groupName, JobDataMap data) throws SchedulerException { invoke( "triggerJob", new Object[] { schedulingContext, jobName, groupName, data}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName(), JobDataMap.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void triggerJobWithVolatileTrigger(String jobName, String groupName) throws SchedulerException { triggerJobWithVolatileTrigger(jobName, groupName, null); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void triggerJobWithVolatileTrigger(String jobName, String groupName, JobDataMap data) throws SchedulerException { invoke( "triggerJobWithVolatileTrigger", new Object[] { schedulingContext, jobName, groupName, data}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName(), JobDataMap.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void pauseTrigger(String triggerName, String groupName) throws SchedulerException { invoke( "pauseTrigger", new Object[] { schedulingContext, triggerName, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void pauseTriggerGroup(String groupName) throws SchedulerException { invoke( "pauseTriggerGroup", new Object[] { schedulingContext, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void pauseJob(String jobName, String groupName) throws SchedulerException { invoke( "pauseJob", new Object[] { schedulingContext, jobName, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void pauseJobGroup(String groupName) throws SchedulerException { invoke( "pauseJobGroup", new Object[] { schedulingContext, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void resumeTrigger(String triggerName, String groupName) throws SchedulerException { invoke( "resumeTrigger", new Object[] { schedulingContext, triggerName, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void resumeTriggerGroup(String groupName) throws SchedulerException { invoke( "resumeTriggerGroup", new Object[] { schedulingContext, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void resumeJob(String jobName, String groupName) throws SchedulerException { invoke( "resumeJob", new Object[] { schedulingContext, jobName, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void resumeJobGroup(String groupName) throws SchedulerException { invoke( "resumeJobGroup", new Object[] { schedulingContext, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void pauseAll() throws SchedulerException { invoke( "pauseAll", new Object[] { schedulingContext}, new String[] { SchedulingContext.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void resumeAll() throws SchedulerException { invoke( "resumeAll", new Object[] { schedulingContext}, new String[] { SchedulingContext.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public String[] getJobGroupNames() throws SchedulerException { return (String[])invoke( "getJobGroupNames", new Object[] { schedulingContext}, new String[] { SchedulingContext.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public String[] getJobNames(String groupName) throws SchedulerException { return (String[])invoke( "getJobNames", new Object[] { schedulingContext, groupName }, new String[] { SchedulingContext.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public Trigger[] getTriggersOfJob(String jobName, String groupName) throws SchedulerException { return (Trigger[])invoke( "getTriggersOfJob", new Object[] { schedulingContext, jobName, groupName }, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public String[] getTriggerGroupNames() throws SchedulerException { return (String[])invoke( "getTriggerGroupNames", new Object[] { schedulingContext}, new String[] { SchedulingContext.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public String[] getTriggerNames(String groupName) throws SchedulerException { return (String[])invoke( "getTriggerNames", new Object[] { schedulingContext, groupName }, new String[] { SchedulingContext.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public JobDetail getJobDetail(String jobName, String jobGroup) throws SchedulerException { return (JobDetail)invoke( "getJobDetail", new Object[] { schedulingContext, jobName, jobGroup }, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public Trigger getTrigger(String triggerName, String triggerGroup) throws SchedulerException { return (Trigger)invoke( "getTrigger", new Object[] { schedulingContext, triggerName, triggerGroup }, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public int getTriggerState(String triggerName, String triggerGroup) throws SchedulerException { return ((Integer)invoke( "getTriggerState", new Object[] { schedulingContext, triggerName, triggerGroup }, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() })).intValue(); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public void addCalendar(String calName, Calendar calendar, boolean replace, boolean updateTriggers) throws SchedulerException { invoke( "addCalendar", new Object[] { schedulingContext, calName, calendar, toBoolean(replace), toBoolean(updateTriggers) }, new String[] { SchedulingContext.class.getName(), String.class.getName(), Calendar.class.getName(), boolean.class.getName(), boolean.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public boolean deleteCalendar(String calName) throws SchedulerException { return ((Boolean)invoke( "getTriggerState", new Object[] { schedulingContext, calName }, new String[] { SchedulingContext.class.getName(), String.class.getName() })).booleanValue(); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public Calendar getCalendar(String calName) throws SchedulerException { return (Calendar)invoke( "getCalendar", new Object[] { schedulingContext, calName }, new String[] { SchedulingContext.class.getName(), String.class.getName() }); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>, * passing the <code>SchedulingContext</code> associated with this * instance. * </p> */ public String[] getCalendarNames() throws SchedulerException { return (String[])invoke( "getCalendarNames", new Object[] { schedulingContext }, new String[] { SchedulingContext.class.getName() }); } /////////////////////////////////////////////////////////////////////////// /// /// Listener-related Methods /// /////////////////////////////////////////////////////////////////////////// /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void addGlobalJobListener(JobListener jobListener) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void addJobListener(JobListener jobListener) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public boolean removeGlobalJobListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public boolean removeJobListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public List getGlobalJobListeners() throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public Set getJobListenerNames() throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public JobListener getGlobalJobListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public JobListener getJobListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void addGlobalTriggerListener(TriggerListener triggerListener) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void addTriggerListener(TriggerListener triggerListener) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public boolean removeGlobalTriggerListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public boolean removeTriggerListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public List getGlobalTriggerListeners() throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public Set getTriggerListenerNames() throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public TriggerListener getGlobalTriggerListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public TriggerListener getTriggerListener(String name) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public void addSchedulerListener(SchedulerListener schedulerListener) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public boolean removeSchedulerListener(SchedulerListener schedulerListener) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * <p> * Calls the equivalent method on the 'proxied' <code>QuartzScheduler</code>. * </p> */ public List getSchedulerListeners() throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } /** * @see org.quartz.Scheduler#getPausedTriggerGroups() */ public Set getPausedTriggerGroups() throws SchedulerException { return (Set)invoke( "getPausedTriggerGroups", new Object[] { schedulingContext }, new String[] { SchedulingContext.class.getName() }); } /** * @see org.quartz.Scheduler#interrupt(java.lang.String, java.lang.String) */ public boolean interrupt(String jobName, String groupName) throws UnableToInterruptJobException { try { return ((Boolean)invoke( "interrupt", new Object[] { schedulingContext, jobName, groupName}, new String[] { SchedulingContext.class.getName(), String.class.getName(), String.class.getName() })).booleanValue(); } catch (SchedulerException se) { throw new UnableToInterruptJobException(se); } } /** * @see org.quartz.Scheduler#setJobFactory(org.quartz.spi.JobFactory) */ public void setJobFactory(JobFactory factory) throws SchedulerException { throw new SchedulerException( "Operation not supported for remote schedulers.", SchedulerException.ERR_UNSUPPORTED_FUNCTION_IN_THIS_CONFIGURATION); } protected Boolean toBoolean(boolean bool) { return (bool) ? Boolean.TRUE : Boolean.FALSE; } }