org.quartz.core.QuartzSchedulerResources Maven / Gradle / Ivy
/*
* 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;
}
}