This job scheduling system can be integrated with, or used along side virtually any J2EE or J2SE application
Applications can vary from the largest e-commerce system to the smallest stand-alone application.
Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components or EJBs.
The Quartz Scheduler includes many enterprise-class features, such as JTA transactions and clustering.
Here are some key features of "Quartz":
- Job Scheduling:
- At a certain time of day (to the millisecond)
- On certain days of the week
- On certain days of the month
- On certain days of the year
- Not on certain days listed within a registered Calendar (such as business holidays)
- Repeated a specific number of times
- Repeated until a specific time/date
- Repeated indefinitely
- Repeated with a delay interval
- Job Execution:
- Jobs can be any Java class that implements the simple Job interface, leaving infinite possibilities for the work the Jobs can perform.
- Job class instances can be instantiated by Quartz, or by the application's framework.
- When a Trigger occurs, the scheduler notifies zero or more Java objects implementing the JobListener and TriggerListener interfaces (listeners can be simple Java objects, or EJBs, or JMS publishers, etc.). These listeners are also notified after the Job has executed.
- As Jobs are completed, they return a JobCompletionCode which informs the scheduler of success or failure. The JobCompletionCode can also instruct the scheduler of any actions it should take based on the success/fail code - such as immediate re-execution of the Job.
- Job Persistence:
- The design of Quartz includes a JobStore interface that can be implemented to provide various mechanisms for the storage of jobs.
- With the use of the included JDBCJobStore, all Jobs and Triggers configured as "non-volatile" are stored in a relational database via JDBC.
- With the use of the included RAMJobStore, all Jobs and Triggers are stored in RAM and therefore do not persist between program executions - but this has the advantage of not requiring an external database.
- Quartz can participate in JTA transactions, via the use of JobStoreCMT (a subclas of JDBCJobStore).
- Quartz can manage JTA transactions (begin and commit them) around the execution of a Job, so that the work the Job does happens within a JTA transaction.
- Load balancing.
- Listeners & Plug-Ins:
- Applications can catch scheduling events to monitor or control job/trigger behavior by implementing one or more listener interfaces.
- The Plug-In mechanism can be used add functionality to Quartz, such keeping a history of job executions, or loading job and trigger definitions from a file.
- Quartz ships with a number of "factory built" plug-ins and listeners.
- Runtime Environments:
- Quartz can run embedded within another free standing application
- Quartz can be instantiated within an application server (or servlet container), and participate in XA transactions
- Quartz can run as a stand-alone program (within its own Java Virtual Machine), to be used via RMI
- Quartz can be instantiated as a cluster of stand-alone programs (with load-balance and fail-over capabilities)
- Create an EJB3 compliant EJB Job invoker.
- OSGi headers in the MANIFEST.
- Added schedulerStarting() method to SchedulerListener interface.
- Make the Scheduler's ClassLoadHelper available to plugins when they are initialized.
- Added initialize() to ConnectionProvider interface.
- Allow 'triggerless' initial storing of non-durable jobs.
- Override default transaction timeout when beginning new UserTransaction.