?? trigger.java
字號:
/*
* Copyright 2004-2005 OpenSymphony
*
* 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.
*
*/
/*
* Previously Copyright (c) 2001-2004 James House
*/
package org.quartz;
import java.util.Date;
import java.util.LinkedList;
/**
* <p>
* The base abstract class to be extended by all <code>Trigger</code>s.
* </p>
*
* <p>
* <code>Triggers</code> s have a name and group associated with them, which
* should uniquely identify them within a single <code>{@link Scheduler}</code>.
* </p>
*
* <p>
* <code>Trigger</code>s are the 'mechanism' by which <code>Job</code> s
* are scheduled. Many <code>Trigger</code> s can point to the same <code>Job</code>,
* but a single <code>Trigger</code> can only point to one <code>Job</code>.
* </p>
*
* <p>
* Triggers can 'send' parameters/data to <code>Job</code>s by placing contents
* into the <code>JobDataMap</code> on the <code>Trigger</code>.
* </p>
*
* @see SimpleTrigger
* @see CronTrigger
* @see NthIncludedDayTrigger
* @see TriggerUtils
* @see JobDataMap
* @see JobExecutionContext
*
* @author James House
* @author Sharada Jambula
*/
public abstract class Trigger implements java.io.Serializable, Cloneable,
Comparable {
private static final long serialVersionUID = -3904243490805975570L;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Constants.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that the <code>{@link Trigger}</code>
* has no further instructions.
* </p>
*/
public static final int INSTRUCTION_NOOP = 0;
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that the <code>{@link Trigger}</code>
* wants the <code>{@link org.quartz.JobDetail}</code> to re-execute
* immediately. If not in a 'RECOVERING' or 'FAILED_OVER' situation, the
* execution context will be re-used (giving the <code>Job</code> the
* abilitiy to 'see' anything placed in the context by its last execution).
* </p>
*/
public static final int INSTRUCTION_RE_EXECUTE_JOB = 1;
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that the <code>{@link Trigger}</code>
* should be put in the <code>COMPLETE</code> state.
* </p>
*/
public static final int INSTRUCTION_SET_TRIGGER_COMPLETE = 2;
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that the <code>{@link Trigger}</code>
* wants itself deleted.
* </p>
*/
public static final int INSTRUCTION_DELETE_TRIGGER = 3;
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that all <code>Trigger</code>
* s referencing the same <code>{@link org.quartz.JobDetail}</code> as
* this one should be put in the <code>COMPLETE</code> state.
* </p>
*/
public static final int INSTRUCTION_SET_ALL_JOB_TRIGGERS_COMPLETE = 4;
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that all <code>Trigger</code>
* s referencing the same <code>{@link org.quartz.JobDetail}</code> as
* this one should be put in the <code>ERROR</code> state.
* </p>
*/
public static final int INSTRUCTION_SET_TRIGGER_ERROR = 5;
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that the <code>Trigger</code>
* should be put in the <code>ERROR</code> state.
* </p>
*/
public static final int INSTRUCTION_SET_ALL_JOB_TRIGGERS_ERROR = 6;
/**
* <p>
* Instructs the <code>{@link Scheduler}</code> that upon a mis-fire
* situation, the <code>updateAfterMisfire()</code> method will be called
* on the <code>Trigger</code> to determine the mis-fire instruction.
* </p>
*
* <p>
* In order to see if this instruction fits your needs, you should look at
* the documentation for the <code>getSmartMisfirePolicy()</code> method
* on the particular <code>Trigger</code> implementation you are using.
* </p>
*/
public static final int MISFIRE_INSTRUCTION_SMART_POLICY = 0;
/**
* <p>
* Indicates that the <code>Trigger</code> is in the "normal" state.
* </p>
*/
public final static int STATE_NORMAL = 0;
/**
* <p>
* Indicates that the <code>Trigger</code> is in the "paused" state.
* </p>
*/
public final static int STATE_PAUSED = 1;
/**
* <p>
* Indicates that the <code>Trigger</code> is in the "complete" state.
* </p>
*
* <p>
* "Complete" indicates that the trigger has not remaining fire-times in
* its schedule.
* </p>
*/
public final static int STATE_COMPLETE = 2;
/**
* <p>
* Indicates that the <code>Trigger</code> is in the "error" state.
* </p>
*
* <p>
* A <code>Trigger</code> arrives at the error state when the scheduler
* attempts to fire it, but cannot due to an error creating and executing
* its related job. Often this is due to the <code>Job</code>'s
* class not existing in the classpath.
* </p>
*
* <p>
* When the trigger is in the error state, the scheduler will make no
* attempts to fire it.
* </p>
*/
public final static int STATE_ERROR = 3;
/**
* <p>
* Indicates that the <code>Trigger</code> is in the "blocked" state.
* </p>
*
* <p>
* A <code>Trigger</code> arrives at the blocked state when the job that
* it is associated with is a <code>StatefulJob</code> and it is
* currently executing.
* </p>
*
* @see StatefulJob
*/
public final static int STATE_BLOCKED = 4;
/**
* <p>
* Indicates that the <code>Trigger</code> does not exist.
* </p>
*/
public final static int STATE_NONE = -1;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Data members.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
private String name;
private String group = Scheduler.DEFAULT_GROUP;
private String jobName;
private String jobGroup = Scheduler.DEFAULT_GROUP;
private String description;
private JobDataMap jobDataMap;
private boolean volatility = false;
private String calendarName = null;
private String fireInstanceId = null;
private int misfireInstruction = MISFIRE_INSTRUCTION_SMART_POLICY;
private LinkedList triggerListeners = new LinkedList();
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Constructors.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/**
* <p>
* Create a <code>Trigger</code> with no specified name, group, or <code>{@link org.quartz.JobDetail}</code>.
* </p>
*
* <p>
* Note that the {@link #setName(String)},{@link #setGroup(String)}and
* the {@link #setJobName(String)}and {@link #setJobGroup(String)}methods
* must be called before the <code>Trigger</code> can be placed into a
* {@link Scheduler}.
* </p>
*/
public Trigger() {
// do nothing...
}
/**
* <p>
* Create a <code>Trigger</code> with the given name, and group.
* </p>
*
* <p>
* Note that the {@link #setJobName(String)}and
* {@link #setJobGroup(String)}methods must be called before the <code>Trigger</code>
* can be placed into a {@link Scheduler}.
* </p>
*
* @param group if <code>null</code>, Scheduler.DEFAULT_GROUP will be used.
*
* @exception IllegalArgumentException
* if name is null or empty, or the group is an empty string.
*/
public Trigger(String name, String group) {
setName(name);
setGroup(group);
}
/**
* <p>
* Create a <code>Trigger</code> with the given name, and group.
* </p>
*
* @param group if <code>null</code>, Scheduler.DEFAULT_GROUP will be used.
*
* @exception IllegalArgumentException
* if name is null or empty, or the group is an empty string.
*/
public Trigger(String name, String group, String jobName, String jobGroup) {
setName(name);
setGroup(group);
setJobName(jobName);
setJobGroup(jobGroup);
}
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* Interface.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/**
* <p>
* Get the name of this <code>Trigger</code>.
* </p>
*/
public String getName() {
return name;
}
/**
* <p>
* Set the name of this <code>Trigger</code>.
* </p>
*
* @exception IllegalArgumentException
* if name is null or empty.
*/
public void setName(String name) {
if (name == null || name.trim().length() == 0)
throw new IllegalArgumentException(
"Trigger name cannot be null or empty.");
this.name = name;
}
/**
* <p>
* Get the group of this <code>Trigger</code>.
* </p>
*/
public String getGroup() {
return group;
}
/**
* <p>
* Set the name of this <code>Trigger</code>.
* </p>
*
* @param group if <code>null</code>, Scheduler.DEFAULT_GROUP will be used.
*
* @exception IllegalArgumentException
* if group is an empty string.
*/
public void setGroup(String group) {
if (group != null && group.trim().length() == 0)
throw new IllegalArgumentException(
"Group name cannot be an empty string.");
if(group == null)
group = Scheduler.DEFAULT_GROUP;
this.group = group;
}
/**
* <p>
* Get the name of the associated <code>{@link org.quartz.JobDetail}</code>.
* </p>
*/
public String getJobName() {
return jobName;
}
/**
* <p>
* Set the name of the associated <code>{@link org.quartz.JobDetail}</code>.
* </p>
*
* @exception IllegalArgumentException
* if jobName is null or empty.
*/
public void setJobName(String jobName) {
if (jobName == null || jobName.trim().length() == 0)
throw new IllegalArgumentException(
"Job name cannot be null or empty.");
this.jobName = jobName;
}
/**
* <p>
* Get the name of the associated <code>{@link org.quartz.JobDetail}</code>'s
* group.
* </p>
*/
public String getJobGroup() {
return jobGroup;
}
/**
* <p>
* Set the name of the associated <code>{@link org.quartz.JobDetail}</code>'s
* group.
* </p>
*
* @param group if <code>null</code>, Scheduler.DEFAULT_GROUP will be used.
*
* @exception IllegalArgumentException
* if group is an empty string.
*/
public void setJobGroup(String jobGroup) {
if (jobGroup != null && jobGroup.trim().length() == 0)
throw new IllegalArgumentException(
"Group name cannot be null or empty.");
if(jobGroup == null)
jobGroup = Scheduler.DEFAULT_GROUP;
this.jobGroup = jobGroup;
}
/**
* <p>
* Returns the 'full name' of the <code>Trigger</code> in the format
* "group.name".
* </p>
*/
public String getFullName() {
return group + "." + name;
}
/**
* <p>
* Returns the 'full name' of the <code>Job</code> that the <code>Trigger</code>
* points to, in the format "group.name".
* </p>
*/
public String getFullJobName() {
return jobGroup + "." + jobName;
}
/**
* <p>
* Return the description given to the <code>Trigger</code> instance by
* its creator (if any).
* </p>
*
* @return null if no description was set.
*/
public String getDescription() {
return description;
}
/**
* <p>
* Set a description for the <code>Trigger</code> instance - may be
* useful for remembering/displaying the purpose of the trigger, though the
* description has no meaning to Quartz.
* </p>
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -