
Quartz is an enterprise-class Job Scheduler for use in stand-alone and 
full-blown J2EE Applications.

Quartz is very light-weight, highy scalable, and extremely easy to use within 
your own applications.



* Please read the license agreement (license.txt) that is distributed with this 
package.


================================================================================
Quartz 1.2.3 Release Notes
================================================================================

This is a maintenance release of the Quartz 1.2.x version series, and 
contains primarily bug fixes.


** If you're just moving from Quartz 1.1.x or 1.0.x please pay attention to
the Change List for Quartz 1.2.0 which is included below the Change List for
Quartz 1.2.1


** The included web-application is still considered 'experimental'.
New maintainers for the web-app code are being sought out.



================================================================================
Changes in version 1.2.3  (since version 1.2.3, see 1.2.0 changes further below)
================================================================================

1- Removed obsolete property from the JBoss-Quartz service XML config file.

2- Fixed strange dead-lock issue with certain databases that don't handle
   row locks well (i.e. DB2).

3- Fixed bug in CronTrigger related to repeating triggers accross the 
   boundary of midnight.  This bug was introduced in the 1.2.2 release with the
   fix for the daylight savings related bug.
   
4- Fixed possible IndesOutOfBoundsException in JobStoreSupport when triggers
   are being unpaused.

5- Made small changes to logging levels within JDBC-JobStore.

6- Fixed bug when the Quartz JBoss service is being un-bound.

7- Fixed bug in JobStoreSupport which caused JDBC-JobStore to scan for triggers
   more often than needed.
   
8- Fixed misc. bugs related to the handling of StatefulJobs.

9- 





================================================================================
Quartz 1.2.2 Release Notes
================================================================================

This is a maintenance release of the Quartz 1.2.x version series, and 
contains primarily bug fixes.


** If you're just moving from Quartz 1.1.x or 1.0.x please pay attention to
the Change List for Quartz 1.2.0 which is included below the Change List for
Quartz 1.2.1


** The included web-application is still considered 'experimental'.
New maintainers for the web-app code are being sought out.



================================================================================
Changes in version 1.2.2  (since version 1.2.1, see 1.2.0 changes further below)
================================================================================

1- Fixed a bug when deleting a Job that has a related trigger which in turn has 
   specific TriggerListener(s) registered with it.

2- Fixed another bug in CronTrigger related to "daylight-savings" and certain
   schedules that fire within the midnight to 1 am time range.

3- Misc. small documentation fixes.

4- Improvements for Sybase ASA support.

5- Fixed bug with StatefulJobs and the OracleDelegate.

6- Allow updating a job to be non-durable.

7- Fixed bug in resuming individual trigger's who's trigger group is paused.




================================================================================
Changes in version 1.2.1  (since version 1.2.0, see 1.2.0 changes further below)
================================================================================

1- Fixed a bug related to BLOCKED triggers (triggers of StatefulJobs) when
   in a clustered environment, and expriencing fail-overs.

2- Updated the MySQL and SQL-Server table script files, to resolve a couple 
   small issues with syntax.

3- Fixed bug in SQL statement for updating JobDetails... could cause a
   Job to loose its "durability" setting.
   
4- Fixed bug in cleaning up volatile jobs with JDBC-JobStore.

5- Made SchedulerMetaData serializable.

6- Added table-creation SQL scripts for DB2 version 8.x

7- Fixed a very-hypothetically-potential connection leak in the case where a
   thread monitor-based lock fails fails to release.  But hey, strange things
   can sometimes happen!

8- Made small improvement to class-loading during initialization.

9- System environment properties can now be used to over-ride properties in
   the quartz.properties file.  This may be useful when sharing the same config
   file for instances in a Quartz cluster, when only the instanceID property
   needs to be different.  This new feature only works for when using 
   StdSchedulerFactory and NOT explicitly initializing it with properties
   (i.e. letting it find the properties file itself).

10- Misc fixes to JavaDoc.

11- Fixed a bug in CronTrigger related to "daylight-savings" and Asian 
    time-zones (regions)






================================================================================
Changes in version 1.2.0    (since version 1.1.6)
================================================================================

** Please read the change list carefully, as it affects your configuration! **

NOTE: The first several changes have to do this the structure of Quartz's 
      database tables, when using JDBCJobStore.  You may wish to use 
      "alter table" commands, or to entirely drop your tables and restart...


1- Added "IS_VOLATILE" column to the following database tables: "TRIGGERS", 
   "JOB_DETAILS". Update tables with commands like the following:

      ALTER TABLE QRTZ_TRIGGERS ADD IS_VOLATILE VARCHAR2(1) 
      ALTER TABLE QRTZ_JOB_DETAILS ADD IS_VOLATILE VARCHAR2(1) 
      
   Any existing rows can be given the initial value of zero ("0") (or "false", 
   depending on the database you use).


2- Added several additional columns to the "FIRED_TRIGGERS" table:

      ALTER TABLE QRTZ_FIRED_TRIGGERS ADD IS_VOLATILE VARCHAR2(1) 
      ALTER TABLE QRTZ_FIRED_TRIGGERS ADD STATE VARCHAR2(16) 
      ALTER TABLE QRTZ_FIRED_TRIGGERS ADD JOB_NAME VARCHAR2(80) 
      ALTER TABLE QRTZ_FIRED_TRIGGERS ADD JOB_GROUP VARCHAR2(80) 
      ALTER TABLE QRTZ_FIRED_TRIGGERS ADD IS_STATEFUL VARCHAR2(1) 
      ALTER TABLE QRTZ_FIRED_TRIGGERS ADD REQUESTS_RECOVERY VARCHAR2(1) 

   Any existing rows must be deleted -- which means those jobs (if any) that 
   were in-progress when you stopped Quartz will get no recovery.   

      
3- Added a few new database tables:

      CREATE TABLE qrtz_paused_trigger_grps(TRIGGER_GROUP  VARCHAR2(80) NOT NULL, PRIMARY KEY (TRIGGER_GROUP));
      CREATE TABLE qrtz_locks(LOCK_NAME  VARCHAR2(40) NULL, PRIMARY KEY (LOCK_NAME));
      CREATE TABLE qrtz_scheduler_state(INSTANCE_NAME VARCHAR2(80) NOT NULL, LAST_CHECKIN_TIME NUMBER(13) NOT NULL, CHECKIN_INTERVAL NUMBER(13) NOT NULL, RECOVERER VARCHAR2(80) NULL, PRIMARY KEY (INSTANCE_NAME));

   The "QRTZ_LOCKS" table needs to be "primed" with the following entries (note 
   that the values of the entries are case sensitive!):

      INSERT INTO qrtz_locks values('TRIGGER_ACCESS');
      INSERT INTO qrtz_locks values('JOB_ACCESS');
      INSERT INTO qrtz_locks values('CALENDAR_ACCESS');
      INSERT INTO qrtz_locks values('STATE_ACCESS');
      INSERT INTO qrtz_locks values('MISFIRE_ACCESS');


4- Re-worked the way paused triggers and fired triggers are handled within 
   JDBCJobStore. (necessitating some of the schema changes above).


5- Removed JDBCJobStore's use of RAMJobStore for the storage of volatile 
   triggers. (necessitating some of the schema changes above).

   
6- Renamed the JobStoreCMT config property "org.quartz.jobStore.nonXADataSource" 
   to "org.quartz.jobStore.nonManagedTXDataSource", and clarified documentation.


7- Removed the need for the "org.quartz.scheduler.xaTransacted" property - it is 
   now assumed if you use JobStoreCMT  (it really never meant "XA-transacted" 
   anyways, it really meant "CMT-transacted").


8- Removed the need to specify the "org.quartz.jobStore.instanceId".  You now 
   only need to set the "org.quartz.scheduler.instanceId" property.  (you 
   previously had to set both).


9- Introduced the "org.quartz.jobStore.isClustered" configuration property for 
   JobStoreTX and JobStoreCMT.  Must be set to "true" if more than one Quartz 
   instance is using the same set of db tables.


10- Introduced the "org.quartz.jobStore.selectWithLockSQL" configuration 
    property for JobStoreTX and JobStoreCMT. This property must be a SQL string 
    that selects a row in the "LOCKS" table and places a lock on it. If not set, 
    the default is "SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE", 
    which works for most databases.  The "{0}" is replaced during run-time with 
    the TABLE_PREFIX that you have configured (usually "QRTZ_").


11- Added new plugin "org.quartz.plugins.management.ShutdownHookPlugin".  If 
    you register this plugin with the scheduler, it will atch when the process 
    dies, and tell Quartz to shutdown.


12- Introduced the "org.quartz.scheduler.wrapJobExecutionInUserTransaction"
    configuration property.  Which should be set to "true" if you want Quartz 
    to start a UserTransaction before calling execute on your job.  The Tx will
    commit after the job's execute method completes, and the JobDataMap is 
    updated (if it is a StatefulJob).  The default value is "false".

13- Re-worked the way misfired jobs are detected and handled - there is now
    a separate thread for doing this.

