📄 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;
import org.quartz.utils.Key;
/**
* <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 static final int STATE_NORMAL = 0;
/**
* <p>
* Indicates that the <code>Trigger</code> is in the "paused" state.
* </p>
*/
public static final 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 static final 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 static final 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 static final int STATE_BLOCKED = 4;
/**
* <p>
* Indicates that the <code>Trigger</code> does not exist.
* </p>
*/
public static final int STATE_NONE = -1;
/**
* The default value for priority.
*/
public static final int DEFAULT_PRIORITY = 5;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 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();
private int priority = DEFAULT_PRIORITY;
private transient Key key = null;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -