All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.quartz.core.QuartzSchedulerResources Maven / Gradle / Ivy

There is a newer version: 2.5.0
Show newest version

/* 
 * 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.core;

import java.util.ArrayList;
import java.util.List;

import org.quartz.spi.JobStore;
import org.quartz.spi.SchedulerPlugin;
import org.quartz.spi.ThreadExecutor;
import org.quartz.spi.ThreadPool;

/**
 * 

* Contains all of the resources (JobStore,ThreadPool, * etc.) necessary to create a {@link QuartzScheduler} instance. *

* * @see QuartzScheduler * * @author James House */ public class QuartzSchedulerResources { /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Data members. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ public static final String CREATE_REGISTRY_NEVER = "never"; public static final String CREATE_REGISTRY_ALWAYS = "always"; public static final String CREATE_REGISTRY_AS_NEEDED = "as_needed"; private String name; private String instanceId; private String threadName; private String rmiRegistryHost = null; private int rmiRegistryPort = 1099; private int rmiServerPort = -1; private String rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER; private ThreadPool threadPool; private JobStore jobStore; private JobRunShellFactory jobRunShellFactory; private List schedulerPlugins = new ArrayList(10); private boolean makeSchedulerThreadDaemon = false; private boolean threadsInheritInitializersClassLoadContext = false; private String rmiBindName; private boolean jmxExport; private String jmxObjectName; private ThreadExecutor threadExecutor; private boolean runUpdateCheck = true; private long batchTimeWindow = 0; private int maxBatchSize = 1; private boolean interruptJobsOnShutdown = false; private boolean interruptJobsOnShutdownWithWait = false; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Constructors. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /** *

* Create an instance with no properties initialized. *

*/ public QuartzSchedulerResources() { // do nothing... } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * Interface. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /** *

* Get the name for the {@link QuartzScheduler}. *

*/ public String getName() { return name; } /** *

* Set the name for the {@link QuartzScheduler}. *

* * @exception IllegalArgumentException * if name is null or empty. */ public void setName(String name) { if (name == null || name.trim().length() == 0) { throw new IllegalArgumentException( "Scheduler name cannot be empty."); } this.name = name; if (threadName == null) { // thread name not already set, use default thread name setThreadName(name + "_QuartzSchedulerThread"); } } /** *

* Get the instance Id for the {@link QuartzScheduler}. *

*/ public String getInstanceId() { return instanceId; } /** *

* Set the name for the {@link QuartzScheduler}. *

* * @exception IllegalArgumentException * if name is null or empty. */ public void setInstanceId(String instanceId) { if (instanceId == null || instanceId.trim().length() == 0) { throw new IllegalArgumentException( "Scheduler instanceId cannot be empty."); } this.instanceId = instanceId; } public static String getUniqueIdentifier(String schedName, String schedInstId) { return schedName + "_$_" + schedInstId; } public String getUniqueIdentifier() { return getUniqueIdentifier(name, instanceId); } /** *

* Get the host name of the RMI Registry that the scheduler should export * itself to. *

*/ public String getRMIRegistryHost() { return rmiRegistryHost; } /** *

* Set the host name of the RMI Registry that the scheduler should export * itself to. *

*/ public void setRMIRegistryHost(String hostName) { this.rmiRegistryHost = hostName; } /** *

* Get the port number of the RMI Registry that the scheduler should export * itself to. *

*/ public int getRMIRegistryPort() { return rmiRegistryPort; } /** *

* Set the port number of the RMI Registry that the scheduler should export * itself to. *

*/ public void setRMIRegistryPort(int port) { this.rmiRegistryPort = port; } /** *

* Get the port number the scheduler server will be bound to. *

*/ public int getRMIServerPort() { return rmiServerPort; } /** *

* Set the port number the scheduler server will be bound to. *

*/ public void setRMIServerPort(int port) { this.rmiServerPort = port; } /** *

* Get the setting of whether or not Quartz should create an RMI Registry, * and if so, how. *

*/ public String getRMICreateRegistryStrategy() { return rmiCreateRegistryStrategy; } /** *

* Get the name for the {@link QuartzSchedulerThread}. *

*/ public String getThreadName() { return threadName; } /** *

* Set the name for the {@link QuartzSchedulerThread}. *

* * @exception IllegalArgumentException * if name is null or empty. */ public void setThreadName(String threadName) { if (threadName == null || threadName.trim().length() == 0) { throw new IllegalArgumentException( "Scheduler thread name cannot be empty."); } this.threadName = threadName; } /** *

* Set whether or not Quartz should create an RMI Registry, and if so, how. *

* * @see #CREATE_REGISTRY_ALWAYS * @see #CREATE_REGISTRY_AS_NEEDED * @see #CREATE_REGISTRY_NEVER */ public void setRMICreateRegistryStrategy(String rmiCreateRegistryStrategy) { if (rmiCreateRegistryStrategy == null || rmiCreateRegistryStrategy.trim().length() == 0) { rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER; } else if (rmiCreateRegistryStrategy.equalsIgnoreCase("true")) { rmiCreateRegistryStrategy = CREATE_REGISTRY_AS_NEEDED; } else if (rmiCreateRegistryStrategy.equalsIgnoreCase("false")) { rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER; } else if (rmiCreateRegistryStrategy.equalsIgnoreCase(CREATE_REGISTRY_ALWAYS)) { rmiCreateRegistryStrategy = CREATE_REGISTRY_ALWAYS; } else if (rmiCreateRegistryStrategy.equalsIgnoreCase(CREATE_REGISTRY_AS_NEEDED)) { rmiCreateRegistryStrategy = CREATE_REGISTRY_AS_NEEDED; } else if (rmiCreateRegistryStrategy.equalsIgnoreCase(CREATE_REGISTRY_NEVER)) { rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER; } else { throw new IllegalArgumentException( "Faild to set RMICreateRegistryStrategy - strategy unknown: '" + rmiCreateRegistryStrategy + "'"); } this.rmiCreateRegistryStrategy = rmiCreateRegistryStrategy; } /** *

* Get the {@link ThreadPool} for the {@link QuartzScheduler} * to use. *

*/ public ThreadPool getThreadPool() { return threadPool; } /** *

* Set the {@link ThreadPool} for the {@link QuartzScheduler} * to use. *

* * @exception IllegalArgumentException * if threadPool is null. */ public void setThreadPool(ThreadPool threadPool) { if (threadPool == null) { throw new IllegalArgumentException("ThreadPool cannot be null."); } this.threadPool = threadPool; } /** *

* Get the {@link JobStore} for the {@link QuartzScheduler} * to use. *

*/ public JobStore getJobStore() { return jobStore; } /** *

* Set the {@link JobStore} for the {@link QuartzScheduler} * to use. *

* * @exception IllegalArgumentException * if jobStore is null. */ public void setJobStore(JobStore jobStore) { if (jobStore == null) { throw new IllegalArgumentException("JobStore cannot be null."); } this.jobStore = jobStore; } /** *

* Get the {@link JobRunShellFactory} for the {@link QuartzScheduler} * to use. *

*/ public JobRunShellFactory getJobRunShellFactory() { return jobRunShellFactory; } /** *

* Set the {@link JobRunShellFactory} for the {@link QuartzScheduler} * to use. *

* * @exception IllegalArgumentException * if jobRunShellFactory is null. */ public void setJobRunShellFactory(JobRunShellFactory jobRunShellFactory) { if (jobRunShellFactory == null) { throw new IllegalArgumentException( "JobRunShellFactory cannot be null."); } this.jobRunShellFactory = jobRunShellFactory; } /** *

* Add the given {@link org.quartz.spi.SchedulerPlugin} for the * {@link QuartzScheduler} to use. This method expects the plugin's * "initialize" method to be invoked externally (either before or after * this method is called). *

*/ public void addSchedulerPlugin(SchedulerPlugin plugin) { schedulerPlugins.add(plugin); } /** *

* Get the List of all * {@link org.quartz.spi.SchedulerPlugin}s for the * {@link QuartzScheduler} to use. *

*/ public List getSchedulerPlugins() { return schedulerPlugins; } /** * Get whether to mark the Quartz scheduling thread as daemon. * * @see Thread#setDaemon(boolean) */ public boolean getMakeSchedulerThreadDaemon() { return makeSchedulerThreadDaemon; } /** * Set whether to mark the Quartz scheduling thread as daemon. * * @see Thread#setDaemon(boolean) */ public void setMakeSchedulerThreadDaemon(boolean makeSchedulerThreadDaemon) { this.makeSchedulerThreadDaemon = makeSchedulerThreadDaemon; } /** * Get whether to set the class load context of spawned threads to that * of the initializing thread. */ public boolean isThreadsInheritInitializersClassLoadContext() { return threadsInheritInitializersClassLoadContext; } /** * Set whether to set the class load context of spawned threads to that * of the initializing thread. */ public void setThreadsInheritInitializersClassLoadContext( boolean threadsInheritInitializersClassLoadContext) { this.threadsInheritInitializersClassLoadContext = threadsInheritInitializersClassLoadContext; } /** * Get the name under which to bind the QuartzScheduler in RMI. Will * return the value of the uniqueIdentifier property if explict RMI bind * name was never set. * * @see #getUniqueIdentifier() */ public String getRMIBindName() { return (rmiBindName == null) ? getUniqueIdentifier() : rmiBindName; } /** * Set the name under which to bind the QuartzScheduler in RMI. If unset, * defaults to the value of the uniqueIdentifier property. * * @see #getUniqueIdentifier() */ public void setRMIBindName(String rmiBindName) { this.rmiBindName = rmiBindName; } /** * Get whether the QuartzScheduler should be registered with the local * MBeanServer. */ public boolean getJMXExport() { return jmxExport; } /** * Set whether the QuartzScheduler should be registered with the local * MBeanServer. */ public void setJMXExport(boolean jmxExport) { this.jmxExport = jmxExport; } /** * Get the name under which the QuartzScheduler should be registered with * the local MBeanServer. If unset, defaults to the value calculated by * generateJMXObjectName. * * @see #generateJMXObjectName(String, String) */ public String getJMXObjectName() { return (jmxObjectName == null) ? generateJMXObjectName(name, instanceId) : jmxObjectName; } /** * Set the name under which the QuartzScheduler should be registered with * the local MBeanServer. If unset, defaults to the value calculated by * generateJMXObjectName. * * @see #generateJMXObjectName(String, String) */ public void setJMXObjectName(String jmxObjectName) { this.jmxObjectName = jmxObjectName; } /** * Get the ThreadExecutor which runs the QuartzSchedulerThread * * @return */ public ThreadExecutor getThreadExecutor() { return threadExecutor; } /** * Set the ThreadExecutor which runs the QuartzSchedulerThread * * @param threadExecutor */ public void setThreadExecutor(ThreadExecutor threadExecutor) { this.threadExecutor = threadExecutor; } /** * Create the name under which this scheduler should be registered in JMX. *

* The name is composed as: * quartz:type=QuartzScheduler,name=[schedName],instance=[schedInstId] *

*/ public static String generateJMXObjectName(String schedName, String schedInstId) { return "quartz:type=QuartzScheduler" + ",name=" + schedName.replaceAll(":|=|\n", ".") + ",instance=" + schedInstId; } public boolean isRunUpdateCheck() { return runUpdateCheck; } public void setRunUpdateCheck(boolean runUpdateCheck) { this.runUpdateCheck = runUpdateCheck; } public long getBatchTimeWindow() { return batchTimeWindow; } public void setBatchTimeWindow(long batchTimeWindow) { this.batchTimeWindow = batchTimeWindow; } public int getMaxBatchSize() { return maxBatchSize; } public void setMaxBatchSize(int maxBatchSize) { this.maxBatchSize = maxBatchSize; } public boolean isInterruptJobsOnShutdown() { return interruptJobsOnShutdown; } public void setInterruptJobsOnShutdown(boolean interruptJobsOnShutdown) { this.interruptJobsOnShutdown = interruptJobsOnShutdown; } public boolean isInterruptJobsOnShutdownWithWait() { return interruptJobsOnShutdownWithWait; } public void setInterruptJobsOnShutdownWithWait( boolean interruptJobsOnShutdownWithWait) { this.interruptJobsOnShutdownWithWait = interruptJobsOnShutdownWithWait; } }