Save This Page
Home » quartz-1.6.0 » org » quartz » core » [javadoc | source]
    1   
    2   /* 
    3    * Copyright 2004-2005 OpenSymphony 
    4    * 
    5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
    6    * use this file except in compliance with the License. You may obtain a copy 
    7    * of the License at 
    8    * 
    9    *   http://www.apache.org/licenses/LICENSE-2.0 
   10    *   
   11    * Unless required by applicable law or agreed to in writing, software 
   12    * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
   13    * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
   14    * License for the specific language governing permissions and limitations 
   15    * under the License.
   16    * 
   17    */
   18   
   19   /*
   20    * Previously Copyright (c) 2001-2004 James House
   21    */
   22   package org.quartz.core;
   23   
   24   import java.util.ArrayList;
   25   import java.util.List;
   26   
   27   import org.quartz.spi.JobStore;
   28   import org.quartz.spi.SchedulerPlugin;
   29   import org.quartz.spi.ThreadPool;
   30   
   31   /**
   32    * <p>
   33    * Contains all of the resources (<code>JobStore</code>,<code>ThreadPool</code>,
   34    * etc.) necessary to create a <code>{@link QuartzScheduler}</code> instance.
   35    * </p>
   36    * 
   37    * @see QuartzScheduler
   38    * 
   39    * @author James House
   40    */
   41   public class QuartzSchedulerResources {
   42   
   43       /*
   44        * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   45        * 
   46        * Data members.
   47        * 
   48        * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   49        */
   50   
   51       public static final String CREATE_REGISTRY_NEVER = "never";
   52   
   53       public static final String CREATE_REGISTRY_ALWAYS = "always";
   54   
   55       public static final String CREATE_REGISTRY_AS_NEEDED = "as_needed";
   56   
   57       private String name;
   58   
   59       private String instanceId;
   60   
   61       private String threadName;
   62       
   63       private String rmiRegistryHost = null;
   64   
   65       private int rmiRegistryPort = 1099;
   66   
   67       private int rmiServerPort = -1;
   68   
   69       private String rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER;
   70   
   71       private ThreadPool threadPool;
   72   
   73       private JobStore jobStore;
   74   
   75       private JobRunShellFactory jobRunShellFactory;
   76   
   77       private ArrayList schedulerPlugins = new ArrayList(10);
   78       
   79       private boolean makeSchedulerThreadDaemon = false;
   80   
   81       private String rmiBindName;
   82       
   83       private boolean jmxExport;
   84       
   85       private String jmxObjectName;
   86       
   87       /*
   88        * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   89        * 
   90        * Constructors.
   91        * 
   92        * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   93        */
   94   
   95       /**
   96        * <p>
   97        * Create an instance with no properties initialized.
   98        * </p>
   99        */
  100       public QuartzSchedulerResources() {
  101           // do nothing...
  102       }
  103   
  104       /*
  105        * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  106        * 
  107        * Interface.
  108        * 
  109        * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  110        */
  111   
  112       /**
  113        * <p>
  114        * Get the name for the <code>{@link QuartzScheduler}</code>.
  115        * </p>
  116        */
  117       public String getName() {
  118           return name;
  119       }
  120   
  121       /**
  122        * <p>
  123        * Set the name for the <code>{@link QuartzScheduler}</code>.
  124        * </p>
  125        * 
  126        * @exception IllegalArgumentException
  127        *              if name is null or empty.
  128        */
  129       public void setName(String name) {
  130           if (name == null || name.trim().length() == 0) {
  131               throw new IllegalArgumentException(
  132                       "Scheduler name cannot be empty.");
  133           }
  134   
  135           this.name = name;
  136           
  137           if (threadName == null) {
  138               // thread name not already set, use default thread name
  139               setThreadName(name + "_QuartzSchedulerThread");
  140           }        
  141       }
  142   
  143       /**
  144        * <p>
  145        * Get the instance Id for the <code>{@link QuartzScheduler}</code>.
  146        * </p>
  147        */
  148       public String getInstanceId() {
  149           return instanceId;
  150       }
  151   
  152       /**
  153        * <p>
  154        * Set the name for the <code>{@link QuartzScheduler}</code>.
  155        * </p>
  156        * 
  157        * @exception IllegalArgumentException
  158        *              if name is null or empty.
  159        */
  160       public void setInstanceId(String instanceId) {
  161           if (instanceId == null || instanceId.trim().length() == 0) {
  162               throw new IllegalArgumentException(
  163                       "Scheduler instanceId cannot be empty.");
  164           }
  165   
  166           this.instanceId = instanceId;
  167       }
  168   
  169       public static String getUniqueIdentifier(String schedName,
  170               String schedInstId) {
  171           return schedName + "_$_" + schedInstId;
  172       }
  173   
  174       public String getUniqueIdentifier() {
  175           return getUniqueIdentifier(name, instanceId);
  176       }
  177   
  178       /**
  179        * <p>
  180        * Get the host name of the RMI Registry that the scheduler should export
  181        * itself to.
  182        * </p>
  183        */
  184       public String getRMIRegistryHost() {
  185           return rmiRegistryHost;
  186       }
  187   
  188       /**
  189        * <p>
  190        * Set the host name of the RMI Registry that the scheduler should export
  191        * itself to.
  192        * </p>
  193        */
  194       public void setRMIRegistryHost(String hostName) {
  195           this.rmiRegistryHost = hostName;
  196       }
  197   
  198       /**
  199        * <p>
  200        * Get the port number of the RMI Registry that the scheduler should export
  201        * itself to.
  202        * </p>
  203        */
  204       public int getRMIRegistryPort() {
  205           return rmiRegistryPort;
  206       }
  207   
  208       /**
  209        * <p>
  210        * Set the port number of the RMI Registry that the scheduler should export
  211        * itself to.
  212        * </p>
  213        */
  214       public void setRMIRegistryPort(int port) {
  215           this.rmiRegistryPort = port;
  216       }
  217   
  218   
  219       /**
  220        * <p>
  221        * Get the port number the scheduler server will be bound to.
  222        * </p>
  223        */
  224       public int getRMIServerPort() {
  225           return rmiServerPort;
  226       }
  227   
  228       /**
  229        * <p>
  230        * Set the port number the scheduler server will be bound to.
  231        * </p>
  232        */
  233       public void setRMIServerPort(int port) {
  234           this.rmiServerPort = port;
  235       }
  236       
  237       /**
  238        * <p>
  239        * Get the setting of whether or not Quartz should create an RMI Registry,
  240        * and if so, how.
  241        * </p>
  242        */
  243       public String getRMICreateRegistryStrategy() {
  244           return rmiCreateRegistryStrategy;
  245       }
  246   
  247       /**
  248        * <p>
  249        * Get the name for the <code>{@link QuartzSchedulerThread}</code>.
  250        * </p>
  251        */
  252       public String getThreadName() {
  253           return threadName;
  254       }
  255   
  256       /**
  257        * <p>
  258        * Set the name for the <code>{@link QuartzSchedulerThread}</code>.
  259        * </p>
  260        * 
  261        * @exception IllegalArgumentException
  262        *              if name is null or empty.
  263        */
  264       public void setThreadName(String threadName) {
  265           if (threadName == null || threadName.trim().length() == 0) {
  266               throw new IllegalArgumentException(
  267                       "Scheduler thread name cannot be empty.");
  268           }
  269   
  270           this.threadName = threadName;
  271       }    
  272       
  273       /**
  274        * <p>
  275        * Set whether or not Quartz should create an RMI Registry, and if so, how.
  276        * </p>
  277        * 
  278        * @see #CREATE_REGISTRY_ALWAYS
  279        * @see #CREATE_REGISTRY_AS_NEEDED
  280        * @see #CREATE_REGISTRY_NEVER
  281        */
  282       public void setRMICreateRegistryStrategy(String rmiCreateRegistryStrategy) {
  283           if (rmiCreateRegistryStrategy == null
  284                   || rmiCreateRegistryStrategy.trim().length() == 0) {
  285               rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER;
  286           } else if (rmiCreateRegistryStrategy.equalsIgnoreCase("true")) {
  287               rmiCreateRegistryStrategy = CREATE_REGISTRY_AS_NEEDED;
  288           } else if (rmiCreateRegistryStrategy.equalsIgnoreCase("false")) {
  289               rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER;
  290           } else if (rmiCreateRegistryStrategy.equalsIgnoreCase(CREATE_REGISTRY_ALWAYS)) {
  291               rmiCreateRegistryStrategy = CREATE_REGISTRY_ALWAYS;
  292           } else if (rmiCreateRegistryStrategy.equalsIgnoreCase(CREATE_REGISTRY_AS_NEEDED)) {
  293               rmiCreateRegistryStrategy = CREATE_REGISTRY_AS_NEEDED;
  294           } else if (rmiCreateRegistryStrategy.equalsIgnoreCase(CREATE_REGISTRY_NEVER)) {
  295               rmiCreateRegistryStrategy = CREATE_REGISTRY_NEVER;
  296           } else {
  297               throw new IllegalArgumentException(
  298                       "Faild to set RMICreateRegistryStrategy - strategy unknown: '"
  299                               + rmiCreateRegistryStrategy + "'");
  300           }
  301   
  302           this.rmiCreateRegistryStrategy = rmiCreateRegistryStrategy;
  303       }
  304   
  305       /**
  306        * <p>
  307        * Get the <code>{@link ThreadPool}</code> for the <code>{@link QuartzScheduler}</code>
  308        * to use.
  309        * </p>
  310        */
  311       public ThreadPool getThreadPool() {
  312           return threadPool;
  313       }
  314   
  315       /**
  316        * <p>
  317        * Set the <code>{@link ThreadPool}</code> for the <code>{@link QuartzScheduler}</code>
  318        * to use.
  319        * </p>
  320        * 
  321        * @exception IllegalArgumentException
  322        *              if threadPool is null.
  323        */
  324       public void setThreadPool(ThreadPool threadPool) {
  325           if (threadPool == null) {
  326               throw new IllegalArgumentException("ThreadPool cannot be null.");
  327           }
  328   
  329           this.threadPool = threadPool;
  330       }
  331   
  332       /**
  333        * <p>
  334        * Get the <code>{@link JobStore}</code> for the <code>{@link QuartzScheduler}</code>
  335        * to use.
  336        * </p>
  337        */
  338       public JobStore getJobStore() {
  339           return jobStore;
  340       }
  341   
  342       /**
  343        * <p>
  344        * Set the <code>{@link JobStore}</code> for the <code>{@link QuartzScheduler}</code>
  345        * to use.
  346        * </p>
  347        * 
  348        * @exception IllegalArgumentException
  349        *              if jobStore is null.
  350        */
  351       public void setJobStore(JobStore jobStore) {
  352           if (jobStore == null) {
  353               throw new IllegalArgumentException("JobStore cannot be null.");
  354           }
  355   
  356           this.jobStore = jobStore;
  357       }
  358   
  359       /**
  360        * <p>
  361        * Get the <code>{@link JobRunShellFactory}</code> for the <code>{@link QuartzScheduler}</code>
  362        * to use.
  363        * </p>
  364        */
  365       public JobRunShellFactory getJobRunShellFactory() {
  366           return jobRunShellFactory;
  367       }
  368   
  369       /**
  370        * <p>
  371        * Set the <code>{@link JobRunShellFactory}</code> for the <code>{@link QuartzScheduler}</code>
  372        * to use.
  373        * </p>
  374        * 
  375        * @exception IllegalArgumentException
  376        *              if jobRunShellFactory is null.
  377        */
  378       public void setJobRunShellFactory(JobRunShellFactory jobRunShellFactory) {
  379           if (jobRunShellFactory == null) {
  380               throw new IllegalArgumentException(
  381                       "JobRunShellFactory cannot be null.");
  382           }
  383   
  384           this.jobRunShellFactory = jobRunShellFactory;
  385       }
  386   
  387       /**
  388        * <p>
  389        * Add the given <code>{@link org.quartz.spi.SchedulerPlugin}</code> for the 
  390        * <code>{@link QuartzScheduler}</code> to use. This method expects the plugin's
  391        * "initialize" method to be invoked externally (either before or after
  392        * this method is called).
  393        * </p>
  394        */
  395       public void addSchedulerPlugin(SchedulerPlugin plugin) {
  396           schedulerPlugins.add(plugin);
  397       }
  398       
  399       /**
  400        * <p>
  401        * Get the <code>List</code> of all 
  402        * <code>{@link org.quartz.spi.SchedulerPlugin}</code>s for the 
  403        * <code>{@link QuartzScheduler}</code> to use.
  404        * </p>
  405        */
  406       public List getSchedulerPlugins() {
  407           return schedulerPlugins;
  408       }
  409   
  410       /**
  411        * Get whether to mark the Quartz scheduling thread as daemon.
  412        * 
  413        * @see Thread#setDaemon(boolean)
  414        */
  415       public boolean getMakeSchedulerThreadDaemon() {
  416           return makeSchedulerThreadDaemon;
  417       }
  418   
  419       /**
  420        * Set whether to mark the Quartz scheduling thread as daemon.
  421        * 
  422        * @see Thread#setDaemon(boolean)
  423        */
  424       public void setMakeSchedulerThreadDaemon(boolean makeSchedulerThreadDaemon) {
  425           this.makeSchedulerThreadDaemon = makeSchedulerThreadDaemon;
  426       }
  427   
  428       /**
  429        * Get the name under which to bind the QuartzScheduler in RMI.  Will 
  430        * return the value of the uniqueIdentifier property if explict RMI bind 
  431        * name was never set.
  432        * 
  433        * @see #getUniqueIdentifier()
  434        */
  435       public String getRMIBindName() {
  436           return (rmiBindName == null) ? getUniqueIdentifier() : rmiBindName;
  437       }
  438   
  439       /**
  440        * Set the name under which to bind the QuartzScheduler in RMI.  If unset, 
  441        * defaults to the value of the uniqueIdentifier property.
  442        * 
  443        * @see #getUniqueIdentifier()
  444        */
  445       public void setRMIBindName(String rmiBindName) {
  446           this.rmiBindName = rmiBindName;
  447       }
  448   
  449       /**
  450        * Get whether the QuartzScheduler should be registered with the local 
  451        * MBeanServer.
  452        */
  453       public boolean getJMXExport() {
  454           return jmxExport;
  455       }
  456   
  457       /**
  458        * Set whether the QuartzScheduler should be registered with the local 
  459        * MBeanServer.
  460        */
  461       public void setJMXExport(boolean jmxExport) {
  462           this.jmxExport = jmxExport;
  463       }
  464   
  465       /**
  466        * Get the name under which the QuartzScheduler should be registered with 
  467        * the local MBeanServer.  If unset, defaults to the value calculated by 
  468        * <code>generateJMXObjectName<code>.
  469        * 
  470        * @see #generateJMXObjectName(String, String)
  471        */
  472       public String getJMXObjectName() {
  473           return (jmxObjectName == null) ? generateJMXObjectName(name, instanceId) : jmxObjectName;
  474       }
  475   
  476       /**
  477        * Set the name under which the QuartzScheduler should be registered with 
  478        * the local MBeanServer.  If unset, defaults to the value calculated by 
  479        * <code>generateJMXObjectName<code>.
  480        * 
  481        * @see #generateJMXObjectName(String, String)
  482        */
  483       public void setJMXObjectName(String jmxObjectName) {
  484           this.jmxObjectName = jmxObjectName;
  485       }
  486       
  487       /**
  488        * Create the name under which this scheduler should be registered in JMX.
  489        * <p>
  490        * The name is composed as: 
  491        *  quartz:type=QuartzScheduler,name=<i>[schedName]</i>,instance=<i>[schedInstId]</i>
  492        * </p>
  493        */
  494       public static String generateJMXObjectName(String schedName, String schedInstId) {
  495           return "quartz:type=QuartzScheduler" + 
  496               ",name=" + schedName + 
  497               ",instance=" + schedInstId;
  498       }
  499   }

Save This Page
Home » quartz-1.6.0 » org » quartz » core » [javadoc | source]