Commits

Anonymous committed b38e572

updates for 1.6 alpha release

git-svn-id: http://svn.opensymphony.com/svn/quartz/trunk@61469f7d36a-ea1c-0410-88ea-9fd03e4c9665

  • Participants
  • Parent commits 02f7c56

Comments (0)

Files changed (82)

docs/wikidocs/AntJob.html

 <html>
     <head>
         <title>Quartz 1 - 
-        Native Ant Job
+        AntJob
          </title>
 	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
         <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="AntJob-AntJob">A JobDetail that Executes a Native Command such as an ANT Build Script</a></h1>
-
-<p><br clear="all" /></p>
-
-<div class="code"><div class="codeHeader"><b>Creating a JobDetail to invoke an ANT Build Script</b></div>
-<div class="codeContent">
-<pre class="code-java">
-<span class="code-object">JobDetail</span> nativeANTJob = <span class="code-keyword">new</span> JobDetail(<span class="code-quote">"AntJob"</span>, <span class="code-quote">"AntGroup"</span>, org.quartz.jobs.NativeJob.class);
-<span class="code-object">JobDataMap</span> jobDataMap = <span class="code-keyword">new</span> JobDataMap();
-jobDataMap.put(org.quartz.jobs.NativeJob.PROP_COMMAND, <span class="code-quote">"ant -f C:\\dev\\build.xml mytarget -Dmy.property=Hello"</span>);
-jobDataMap.put(org.quartz.jobs.NativeJob.PROP_CONSUME_STREAMS, <span class="code-quote">"true"</span>); <span class="code-comment">// Optional: Captures ant output</span>
-nativeANTJob.setJobDataMap(jobDataMap); 
-</pre>
+				    <h1><a name="AntJob-AntJob"></a>AntJob</h1>
+
+<p>A Job executing ANT scripts.</p>
+<table class='confluenceTable'><tbody>
+<tr>
+<td class='confluenceTd'> Author <br clear="all" /> </td>
+<td class='confluenceTd'> Dimitar Marinov </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Quartz Interface <br clear="all" /> </td>
+<td class='confluenceTd'> org.quartz.Job </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Quartz Tested Version(s) <br clear="all" /> </td>
+<td class='confluenceTd'> 1.6 <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Source Code <br clear="all" /> </td>
+<td class='confluenceTd'> <em><a href="http://wiki.opensymphony.com/download/attachments/7480/AntJob.java?version=1" title="AntJob.java attached to AntJob">_AntJob.java_</a></em><br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h2><a name="AntJob-UsageExample%28Optional%29"></a>Usage Example (Optional)</h2>
+
+<div class="code"><div class="codeContent">
+<pre class="code-java">JobDetail job = <span class="code-keyword">new</span> JobDetail();
+job.setGroup(<span class="code-quote">"ANT"</span>);
+job.setName(<span class="code-quote">"Example"</span>);
+job.setJobClass(AntJob.class);
+
+Map dataMap = job.getJobDataMap();
+dataMap.put(<span class="code-quote">"execdir"</span>, <span class="code-quote">"pathToYourAntScripts"</span>);
+dataMap.put(<span class="code-quote">"buildfile"</span>, <span class="code-quote">"yourAntScript.xml"</span>); <span class="code-comment">//<span class="code-keyword">default</span> is build.xml
+</span>dataMap.put(<span class="code-quote">"target"</span>, <span class="code-quote">"targetToExecute"</span>); <span class="code-comment">//<span class="code-keyword">default</span> is script's <span class="code-keyword">default</span> target
+</span>
+<span class="code-comment">//set the 'lib.dir' ant property to './lib'
+</span>dataMap.put(<span class="code-quote">"$P_lib.dir"</span>, <span class="code-quote">"./lib"</span>);
+
+<span class="code-comment">//set the 'debug' ant (user) property to '<span class="code-keyword">true</span>'
+</span>dataMap.put(<span class="code-quote">"$U_debug"</span>, <span class="code-quote">"<span class="code-keyword">true</span>"</span>);</pre>
 </div></div>
+<p>&nbsp;</p>
 
-<p><br clear="all" /></p>
+<p>&nbsp;</p>
 
                     			    </td>
 		    </tr>

docs/wikidocs/AntJob_attachments/AntJob.java

+package org.quartz.jobs;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+/**
+ * A Job executing ANT scripts.<br>
+ * Brief usage example:
+ *
+ * <p><blockquote><pre>
+ * ...
+ *
+ * JobDetail job = new JobDetail();
+ * job.setGroup("ANT");
+ * job.setName("Example");
+ * job.setJobClass(AntJob.class);
+ *
+ * Map dataMap = job.getJobDataMap();
+ * dataMap.put("execdir", "pathToYourAntScripts");
+ * dataMap.put("buildfile", "yourAntScript.xml"); //default is build.xml
+ * dataMap.put("target", "targetToExecute"); //default is script's dafault target
+ *
+ * //set the 'lib.dir' ant property to './lib'
+ * dataMap.put("$P_lib.dir", "./lib");
+ *
+ * //set the 'debug' ant (user) property to 'true'
+ * dataMap.put("$U_debug", "true");
+ *
+ * ...
+ * </pre></blockquote>
+ * <p>
+ *
+ * @author Dimitar Marinov
+ */
+public class AntJob implements Job {
+
+    /**
+     * Creates a new <code>AntJob</code>.
+     */
+    public AntJob() {
+        super();
+    }
+
+    /**
+     * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
+     */
+    public void execute(JobExecutionContext context)
+        throws JobExecutionException {
+
+        JobDataMap dataMap = context.getMergedJobDataMap();
+        String execDir = dataMap.getString("execdir");
+        String buildFileName = dataMap.getString("buildfile");
+        String target = dataMap.getString("target");
+
+        // Create a new project, and perform some default initialization
+        Project project = new Project();
+        try {
+            project.init();
+        } catch (BuildException e) {
+            throw new JobExecutionException(e.getMessage());
+        }
+        
+        // Prepare the buildfile. If none is given, "build.xml" is used.
+        if (buildFileName == null) {
+            buildFileName = "build.xml";
+        }
+        File buildFile = new File(execDir + File.separator + buildFileName);
+        
+        // Set system properties
+        Properties sysProps = System.getProperties();
+        Iterator it = sysProps.entrySet().iterator();
+        while (it.hasNext()) {
+            Map.Entry entry = (Map.Entry) it.next();
+            project.setProperty(entry.getKey().toString(), entry.getValue().toString());
+        }
+        
+        // Loop through the parameter property map
+        it = dataMap.keySet().iterator();
+        while (it.hasNext()) {
+            // Get the property's name and value
+            String propName = (String) it.next();
+            String propValue = dataMap.getString(propName);
+            if (propName.startsWith("$P_")) {
+                project.setProperty(propName.substring(3), propValue);
+            } else if (propName.startsWith("$U_")) {
+                project.setUserProperty(propName.substring(3), propValue);
+            }
+        }
+        
+        try {
+            ProjectHelper.getProjectHelper().parse(project, buildFile);
+            
+            // Set ANT built-in properties
+            project.setProperty("basedir", project.getBaseDir().getPath());
+            project.setProperty("ant.project.name", project.getName());
+            project.setProperty("ant.file", buildFile.getPath());
+            
+            // If no target is specified, run the default one.
+            if (target == null) {
+                target = project.getDefaultTarget();
+            }
+            
+            // Run the target
+            project.executeTarget(target);
+            
+        } catch (BuildException e) {
+            throw new JobExecutionException(e.getMessage());
+        }
+    }
+}

docs/wikidocs/BestPractices.html

 <p><br clear="all" /></p>
 
 
-<h5><a name="BestPractices-JobDataMapTips">JobDataMap Tips</a></h5>
+<h5><a name="BestPractices-JobDataMapTips"></a>JobDataMap Tips</h5>
 
 <p>The <em>JobDataMap</em> that is found on the <em>JobExecutionContext</em> during <em>Job</em> execution serves as a convenience.  It is a merge of the <em>JobDataMap</em> found on the <em>JobDetail</em> and the one found on the <em>Trigger</em>, with the value in the latter overriding any same-named values in the former.</p>
 
 <p>In light of all of the above, we recommend as a best practice the following:  Code within the Job.execute(..) method should generally retrieve values from the <em>JobDataMap</em> on found on the <em>JobExecutionContext</em>, rather than directly from the one on the <em>JobDetail</em>.</p>
 
 
+                                            <div class="tabletitle">
+                            <a name="comments">Comments:</a>
+                        </div>
+                        <table border="0" width="100%">
+                                                        <tr>
+                                <td >
+                                    <a name="comment-4941"></a>
+                                    <font class="smallfont"><p>The last best practice is code that is only in CVS currently.</p></font>
+                                    <div align="left" class="smallfont" style="color: #666666; width: 98%; margin-bottom: 10px;">
+                                        <img src="icons/comment_16.gif" height="16" width="16" border="0" align="absmiddle"/>
+                                        Posted by cwidhelm at Jul 14, 2005 09:05
+                                    </div>
+                                </td>
+                            </tr>
+                                                    </table>
                     			    </td>
 		    </tr>
 	    </table>

docs/wikidocs/BiDailyTrigger.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="BiDailyTrigger-TriggerThatExecutesEvery2Days">Trigger That Executes Every 2 Days</a></h1>
+				    <h1><a name="BiDailyTrigger-TriggerThatExecutesEvery2Days"></a>Trigger That Executes Every 2 Days</h1>
 
 <p><br clear="all" />
 At first glance, you would be tempted to use a CronTrigger. However, if this is truly to be every two days, CronTrigger won't work.  To illustrate this, simply think of how many days are in a typical month (28-31). A cron expression like "0 0 5 2/2 * ?" would give us a trigger that would restart its count at the beginning of every month.  This means that we would would get subsequent firings on July 30 and August 2, which is an interval of three days, not two.</p>

docs/wikidocs/BiWeeklyTrigger.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="BiWeeklyTrigger-TriggerThatExecutesEvery2Weeks">Trigger That Executes Every 2 Weeks</a></h1>
+				    <h1><a name="BiWeeklyTrigger-TriggerThatExecutesEvery2Weeks"></a>Trigger That Executes Every 2 Weeks</h1>
 
 <p><br clear="all" />
 As with a trigger meant to fire every two days, CronTrigger won't work for this schedule. For more details, see <a href="BiDailyTrigger.html" title="BiDailyTrigger">Trigger That Fires Every 2 Days</a>. We'll need to use a SimpleTrigger:</p>

docs/wikidocs/ConfigDataSources.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigDataSources-ConfigureDataSources">Configure DataSources</a></h1>
+				    <h1><a name="ConfigDataSources-ConfigureDataSources"></a>Configure DataSources</h1>
 
 
 <p>If you're using JDBC-Jobstore, you'll be needing a Datasource for its use (or two Datasources, if you're using JobStoreCMT). </p>
 
 <p><br clear="all" /></p>
 
-<h3><a name="ConfigDataSources-QuartzcreatedDatasourcesaredefinedwiththefollowingproperties%3A">Quartz-created Datasources are defined with the following properties:</a></h3>
+<h3><a name="ConfigDataSources-QuartzcreatedDatasourcesaredefinedwiththefollowingproperties%3A"></a>Quartz-created Datasources are defined with the following properties:</h3>
 <p><br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>String</td>
 <td class='confluenceTd'>null</td>
 </tr>
-</table>
+</tbody></table>
 
 
 <p><b>org.quartz.dataSource.NAME.driver</b> <br/>
 org.quartz.dataSource.myDS.maxConnections = 30</pre>
 </div></div>
 
-<h3><a name="ConfigDataSources-ReferencestoApplicationServerDatasourcesaredefinedwiththefollowingproperties%3A">References to Application Server Datasources are defined with the following properties:</a></h3>
+<h3><a name="ConfigDataSources-ReferencestoApplicationServerDatasourcesaredefinedwiththefollowingproperties%3A"></a>References to Application Server Datasources are defined with the following properties:</h3>
 <p><br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>String</td>
 <td class='confluenceTd'>null</td>
 </tr>
-</table>
+</tbody></table>
 
 
 <p><b>org.quartz.dataSource.NAME.jndiURL</b> <br/>
 
 <p><br clear="all" /></p>
 
-<h3><a name="ConfigDataSources-CustomConnectionProviderImplementations">Custom ConnectionProvider Implementations</a></h3>
+<h3><a name="ConfigDataSources-CustomConnectionProviderImplementations"></a>Custom ConnectionProvider Implementations</h3>
 <p><br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>String (clas name)</td>
 <td class='confluenceTd'>null</td>
 </tr>
-</table>
+</tbody></table>
 
 
 <p><b>org.quartz.dataSource.NAME.connectionProvider.class</b> <br/>

docs/wikidocs/ConfigJDBCJobStoreClustering.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigJDBCJobStoreClustering-ClusteringwithJDBCJobStore">Clustering with JDBC-JobStore</a></h1>
+				    <h1><a name="ConfigJDBCJobStoreClustering-ClusteringwithJDBCJobStore"></a>Clustering with JDBC-JobStore</h1>
 
 <p><br clear="all" /></p>
 
 
 <p>Enable clustering by setting the "org.quartz.jobStore.isClustered" property to "true". Each instance in the cluster should use the same copy of the quartz.properties file. Exceptions of this would be to use properties files that are identical, with the following allowable exceptions: Different thread pool size, and different value for the "org.quartz.scheduler.instanceId" property. Each node in the cluster MUST have a unique instanceId, which is easily done (without needing different properties files) by placing "AUTO" as the value of this property.  See the info about the configuration properties of JDBC-JobStore for more information.</p>
 
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='noteMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>Never run clustering on separate machines, unless their clocks are synchronized using some form of time-sync service (daemon) that runs very regularly (the clocks must be within a second of each other). See <a href="http://www.boulder.nist.gov/timefreq/service/its.htm" title="Visit page outside Confluence">&#104;ttp://www.boulder.nist.gov/timefreq/service/its.htm</a> if you are unfamiliar with how to do this.</p></td></tr></table></div></div>
+<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>Never run clustering on separate machines, unless their clocks are synchronized using some form of time-sync service (daemon) that runs very regularly (the clocks must be within a second of each other). See <a href="http://www.boulder.nist.gov/timefreq/service/its.htm" title="Visit page outside Confluence">&#104;ttp://www.boulder.nist.gov/timefreq/service/its.htm</a> if you are unfamiliar with how to do this.</p></td></tr></table>
 
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='noteMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>Never fire-up a non-clustered instance against the same set of tables that any other instance is running against. You may get serious data corruption, and will definitely experience eratic behavior.</p></td></tr></table></div></div>
+<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>Never fire-up a non-clustered instance against the same set of tables that any other instance is running against. You may get serious data corruption, and will definitely experience eratic behavior.</p></td></tr></table>
 
 <div class="code"><div class="codeHeader"><b>Example Properties For A Clustered Scheduler</b></div><div class="codeContent">
 <pre class="code-java">#============================================================================

docs/wikidocs/ConfigJobStoreCMT.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigJobStoreCMT-ConfigureJDBCJobStoreCMT">Configure JDBC-JobStoreCMT</a></h1>
+				    <h1><a name="ConfigJobStoreCMT-ConfigureJDBCJobStoreCMT"></a>Configure JDBC-JobStoreCMT</h1>
 
 
 <p>JDBCJobStore is used to store scheduling information (job, triggers and calendars) within a relational database.  There are actually two seperate JDBCJobStore classes that you can select between, depending on the transactional behaviour you need.  </p>
 
 <p>JobStoreCMT can be tuned with the following properties:
 <br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>false</td>
 </tr>
 <tr>
+<td class='confluenceTd'>org.quartz.jobStore.selectWithLockSQL</td>
+<td class='confluenceTd'>no</td>
+<td class='confluenceTd'>string</td>
+<td class='confluenceTd'>"SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE"</td>
+</tr>
+<tr>
 <td class='confluenceTd'>org.quartz.jobStore.txIsolationLevelSerializable</td>
 <td class='confluenceTd'>no</td>
 <td class='confluenceTd'>boolean</td>
 <td class='confluenceTd'>false</td>
 </tr>
 <tr>
-<td class='confluenceTd'>org.quartz.jobStore.selectWithLockSQL</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>string</td>
-<td class='confluenceTd'>"SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE"</td>
-</tr>
-<tr>
 <td class='confluenceTd'>org.quartz.jobStore.lockHandler.class</td>
 <td class='confluenceTd'>no</td>
 <td class='confluenceTd'>string</td>
 <td class='confluenceTd'>null</td>
 </tr>
-<tr>
-<td class='confluenceTd'>org.quartz.jobStore.makeThreadsDaemons</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>boolean</td>
-<td class='confluenceTd'>false</td>
-</tr>
-<tr>
-<td class='confluenceTd'>org.quartz.jobStore.doubleCheckLockMisfireHandler</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>boolean</td>
-<td class='confluenceTd'>true</td>
-</tr>
-</table>
+</tbody></table>
 
 
 <p><b>org.quartz.jobStore.driverDelegateClass</b> <br/>
 <p><b>org.quartz.jobStore.dontSetNonManagedTXConnectionAutoCommitFalse</b><br/>
 The same as the property <em>org.quartz.jobStore.dontSetAutoCommitFalse</em>, except that it applies to the nonManagedTXDataSource.</p>
 
+<p><b>org.quartz.jobStore.selectWithLockSQL</b><br/>
+Must be a SQL string that selects a row in the "LOCKS" table and places a lock on the row. If not set, the default is <em>"SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE"</em>,  which works for most databases.  The "{0}" is replaced during run-time with the TABLE_PREFIX that you configured above.</p>
+
 <p><b>org.quartz.jobStore.txIsolationLevelSerializable</b><br/>
 A value of "true" tells Quartz to call <em>setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE)</em> on JDBC connections.  This can be helpful to prevent lock timeouts with some databases under high load, and "long-lasting" transactions.</p>
 
 <p><b>org.quartz.jobStore.txIsolationLevelReadCommitted</b><br/>
 When set to "true", this property tells Quartz to call <em>setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED)</em> on the non-managed JDBC connections.  This can be helpful to prevent lock timeouts with some databases (such as DB2) under high load, and "long-lasting" transactions.</p>
 
-<p><b>org.quartz.jobStore.selectWithLockSQL</b><br/>
-Must be a SQL string that selects a row in the "LOCKS" table and places a lock on the row. If not set, the default is <em>"SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE"</em>,  which works for most databases.  The "{0}" is replaced during run-time with the TABLE_PREFIX that you configured above.
-This setting is ignored if <em>org.quartz.jobStore.lockHandler.class</em> is specified.</p>
-
-<p><b>org.quartz.jobStore.lockHandler.class</b><br/>
-Extension point for custom <em>org.quartz.impl.jdbcjobstore.Semaphore</em> implementations.  
-Supports setting bean properties on the lock handler, for example <em>org.quartz.jobStore.lockHandler.transactionManagerJNDIName=javax.transaction.TransactionManager</em>.  
-If no lock handler is specified, then Quartz will use its internal database based lock handler.</p>
-
-<p><b>org.quartz.jobStore.makeThreadsDaemons</b><br/>
-Whether to mark as daemon threads started by this jobstore.  This includes the misfire handler thread and, if clustering is enabled, the cluster manager thread. By default this is "false".</p>
-
-<p><b>org.quartz.jobStore.doubleCheckLockMisfireHandler</b><br/>
-Whether to check to see if there are Triggers that have misfired before actually acquiring the lock to attempt recovery.&nbsp;&nbsp;This should be set to false if the majority of the time there will be misfired Triggers.&nbsp;&nbsp;By default this is "true".</p>
+<p><b>org.quartz.jobStore.lockHandler.class</b> <br/>
+The class name to be used to produce an instance of a org.quartz.impl.jdbcjobstore.Semaphore to be used for locking control on the job store data.  This is an advanced configuration feature, which should not be used by most users.  By default, Quartz will select the most appropriate (pre-bundled) Semaphore implementation to use.  "org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore" <a href="http://jira.opensymphony.com/browse/QUARTZ-497" title="Visit page outside Confluence">QUARTZ-497</a> may be of interest to MS SQL Server users.  "JTANonClusteredSemaphore" which is bundled with Quartz may give improved performance when using JobStoreCMT, though it is an experimental implementation.  See <a href="http://jira.opensymphony.com/browse/QUARTZ-441" title="Visit page outside Confluence">QUARTZ-441</a> and <a href="http://jira.opensymphony.com/browse/QUARTZ-442" title="Visit page outside Confluence">QUARTZ-442</a></p>
 
-                   			    </td>
+                    			    </td>
 		    </tr>
 	    </table>
     </body>

docs/wikidocs/ConfigJobStoreTX.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigJobStoreTX-ConfigureJDBCJobStoreTX">Configure JDBC-JobStoreTX</a></h1>
+				    <h1><a name="ConfigJobStoreTX-ConfigureJDBCJobStoreTX"></a>Configure JDBC-JobStoreTX</h1>
 
 
 <p>JDBCJobStore is used to store scheduling information (job, triggers and calendars) within a relational database.  There are actually two seperate JDBCJobStore classes that you can select between, depending on the transactional behaviour you need.  </p>
 
 <p>JobStoreTX can be tuned with the following properties:
 <br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>false</td>
 </tr>
 <tr>
-<td class='confluenceTd'>org.quartz.jobStore.txIsolationLevelSerializable</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>boolean</td>
-<td class='confluenceTd'>false</td>
-</tr>
-<tr>
-<td class='confluenceTd'>org.quartz.jobStore.useDBLocks</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>boolean</td>
-<td class='confluenceTd'>false</td>
-</tr>
-<tr>
 <td class='confluenceTd'>org.quartz.jobStore.selectWithLockSQL</td>
 <td class='confluenceTd'>no</td>
 <td class='confluenceTd'>string</td>
 <td class='confluenceTd'>"SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE"</td>
 </tr>
 <tr>
-<td class='confluenceTd'>org.quartz.jobStore.lockHandler.class</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>string</td>
-<td class='confluenceTd'>null</td>
-</tr>
-<tr>
-<td class='confluenceTd'>org.quartz.jobStore.makeThreadsDaemons</td>
+<td class='confluenceTd'>org.quartz.jobStore.txIsolationLevelSerializable</td>
 <td class='confluenceTd'>no</td>
 <td class='confluenceTd'>boolean</td>
 <td class='confluenceTd'>false</td>
 </tr>
 <tr>
-<td class='confluenceTd'>org.quartz.jobStore.doubleCheckLockMisfireHandler</td>
+<td class='confluenceTd'>org.quartz.jobStore.lockHandler.class</td>
 <td class='confluenceTd'>no</td>
-<td class='confluenceTd'>boolean</td>
-<td class='confluenceTd'>true</td>
+<td class='confluenceTd'>string</td>
+<td class='confluenceTd'>null</td>
 </tr>
-</table>
-
+</tbody></table>
 
 <p><b>org.quartz.jobStore.driverDelegateClass</b> <br/>
 Driver delegates understand the particular 'dialects' of varies database systems.  Possible choices include:</p>
 The the number of milliseconds the scheduler will 'tolerate' a trigger to pass its next-fire-time by, before being considered "misfired".  The default value (if you don't make an entry of this property in your configuration) is 60000 (60 seconds).</p>
 
 <p><b>org.quartz.jobStore.isClustered</b><br/>
-Set to "true" in order to turn on clustering features. This property must be set to "true" if you are having multiple instances of Quartz use the same set of database tables... otherwise you will experience havoc.  
-If "true", then JobStoreTX will use the internal database based lock handler unless explicitly overriden by <em>org.quartz.jobStore.lockHandler.class</em>.  
-See the configuration docs for clustering for more information.</p>
+Set to "true" in order to turn on clustering features. This property must be set to "true" if you are having multiple instances of Quartz use the same set of database tables... otherwise you will experience havoc.  See the configuration docs for clustering for more information.</p>
 
 <p><b>org.quartz.jobStore.clusterCheckinInterval</b><br/>
 Set the frequency (in milliseconds) at which this instance "checks-in"* with the other instances of the cluster. Affects the quickness of detecting failed instances.</p>
 <p><b>org.quartz.jobStore.dontSetAutoCommitFalse</b><br/>
 Setting this parameter to "true" tells Quartz not to call setAutoCommit(false) on connections obtained from the DataSource(s).  This can be helpful in a few situations, such as if you have a driver that complains if it is called when it is already off.  This property defaults to false, because most drivers require that setAutoCommit(false) is called.</p>
 
+<p><b>org.quartz.jobStore.selectWithLockSQL</b><br/>
+Must be a SQL string that selects a row in the "LOCKS" table and places a lock on the row. 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 configured above.</p>
+
 <p><b>org.quartz.jobStore.txIsolationLevelSerializable</b><br/>
 A value of "true" tells Quartz (when using JobStoreTX or CMT) to call setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) on JDBC connections.  This can be helpful to prevent lock timeouts with some databases under high load, and "long-lasting" transactions.</p>
 
-<p><b>org.quartz.jobStore.useDBLocks</b><br/>
-Set to "true" to force JobStoreTX to use the internal database based lock handler.  
-This value is ignored if a custom lock handler is specified via <em>org.quartz.jobStore.lockHandler.class</em></p>
-
-<p><b>org.quartz.jobStore.selectWithLockSQL</b><br/>
-Must be a SQL string that selects a row in the "LOCKS" table and places a lock on the row. 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 configured above.
-This setting is ignored if <em>org.quartz.jobStore.lockHandler.class</em> is specified, or if both <em>org.quartz.jobStore.useDBLocks</em> and <em>org.quartz.jobStore.isClustered</em> are "false" which means the internal in-memory lock handler is in use.</p>
+<p><b>org.quartz.jobStore.lockHandler.class</b> <br/>
+The class name to be used to produce an instance of a org.quartz.impl.jdbcjobstore.Semaphore to be used for locking control on the job store data.  This is an advanced configuration feature, which should not be used by most users.  By default, Quartz will select the most appropriate (pre-bundled) Semaphore implementation to use.  "org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore" <a href="http://jira.opensymphony.com/browse/QUARTZ-497" title="Visit page outside Confluence">QUARTZ-497</a> may be of interest to MS SQL Server users.  See <a href="http://jira.opensymphony.com/browse/QUARTZ-441" title="Visit page outside Confluence">QUARTZ-441</a>.</p>
 
-<p><b>org.quartz.jobStore.lockHandler.class</b><br/>
-Extension point for custom <em>org.quartz.impl.jdbcjobstore.Semaphore</em> implementations.  
-Supports setting bean properties on the lock handler, for example <em>org.quartz.jobStore.lockHandler.transactionManagerJNDIName=javax.transaction.TransactionManager</em>.  
-If no lock handler is specified, then an internal in-memory or database based lock handler will be chosen as determined by the <em>org.quartz.jobStore.useDBLocks</em> and <em>org.quartz.jobStore.isClustered</em> properties.</p>
 
-<p><b>org.quartz.jobStore.makeThreadsDaemons</b><br/>
-Whether to mark as daemon threads started by this jobstore.  This includes the misfire handler thread and, if clustering is enabled, the cluster manager thread. By default this is "false".</p>
 
-<p><b>org.quartz.jobStore.doubleCheckLockMisfireHandler</b><br/>
-Whether to check to see if there are Triggers that have misfired before actually acquiring the lock to attempt recovery.&nbsp;&nbsp;This should be set to false if the majority of the time there will be misfired Triggers.&nbsp;&nbsp;By default this is "true".</p>
 
                     			    </td>
 		    </tr>

docs/wikidocs/ConfigListeners.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigListeners-ConfiguringGlobalListeners">Configuring Global Listeners</a></h1>
+				    <h1><a name="ConfigListeners-ConfiguringGlobalListeners"></a>Configuring Global Listeners</h1>
 
 <p>Global listeners can be instantiated and configured by StdSchedulerFactory, or your application can do it itself at runtime, and then register the listeners with the scheduler.  "Global" listeners listen to the events of every job/trigger rather than just the jobs/triggers that directly reference them.</p>
 

docs/wikidocs/ConfigMain.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigMain-ConfigureMainSchedulerSettings">Configure Main Scheduler Settings</a></h1>
+				    <h1><a name="ConfigMain-ConfigureMainSchedulerSettings"></a>Configure Main Scheduler Settings</h1>
 
 
-<p>These properties configure tha identification of the scheduler, and various other 'top level' settings.
+<p>These properties configure the identification of the scheduler, and various other 'top level' settings.
 <br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>string (class name)</td>
 <td class='confluenceTd'>org.quartz.simpl.SimpleJobFactory</td>
 </tr>
-<tr>
-<td class='confluenceTd'>org.quartz.scheduler.makeSchedulerThreadDaemon</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>boolean</td>
-<td class='confluenceTd'>false</td>
-</tr>
-</table>
+</tbody></table>
 
 <p><b>org.quartz.scheduler.instanceName</b> <br/>
 Can be any string, and the value has no meaning to the scheduler itself - but rather serves as a mechanism for client code to distinguish schedulers when multiple instances are used within the same program.  If you are using the clustering features, you must use the same name for every instance in the cluster that is 'logically' the same Scheduler.</p>
 
 <p><b>org.quartz.scheduler.instanceId</b> <br/>
-Can be any string, and but must be unique for all schedulers working as if they are the same 'logical' Scheduler within a cluster. You may use the value "AUTO" as the instanceId if you wish the Id to be generated for you.</p>
+Can be any string, but must be unique for all schedulers working as if they are the same 'logical' Scheduler within a cluster. You may use the value "AUTO" as the instanceId if you wish the Id to be generated for you.</p>
 
 <p><b>org.quartz.scheduler.instanceIdGenerator.class</b> <br/>
 Only used if <em>org.quartz.scheduler.instanceId</em> is set to "AUTO".  Defaults to "org.quartz.simpl.SimpleInstanceIdGenerator", which generates an instance id based upon host name and time stamp.</p>
 Can be any String that is a valid name for a java thread. If this property is not specified, the thread will receive the scheduler's name ("org.quartz.scheduler.instanceName") plus an the appended string '_QuartzSchedulerThread'.</p>
 
 <p><b>org.quartz.scheduler.idleWaitTime</b> <br/>
-Is the amount of time in milliseconds that the scheduler will wait before re-queries for available triggers when the scheduler is otherwise idle.  Normally you should not have to 'tune' this parameter, unless you're using XA transactions, and are having problems with delayed firings of triggers that should fire immediately.</p>
+Is the amount of time in milliseconds that the scheduler  will wait before re-queries for available triggers when the scheduler is otherwise idle.  Normally you should not have to 'tune' this parameter, unless you're using XA transactions, and are having problems with delayed firings of triggers that should fire immediately.</p>
 
 <p><b>org.quartz.scheduler.dbFailureRetryInterval</b> <br/>
 Is the amount of time in milliseconds that the scheduler will wait between re-tries when it has detected a loss of connectivity within the JobStore (e.g. to the database). This parameter is obviously not very meaningful when using RamJobStore.</p>
 Represent a name-value pair that will be placed into the "scheduler context" as strings. (see Scheduler.getContext()).  So for example, the setting "org.quartz.context.key.MyKey = MyValue" would perform the equivalent of scheduler.getContext().put("MyKey", "MyValue").
 <br clear="all" /></p>
 
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='noteMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>The Transaction-Related properties should be left out of the config file unless you are using JTA transactions.</p></td></tr></table></div></div>
+<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>The Transaction-Related properties should be left out of the config file unless you are using JTA transactions.</p></td></tr></table>
 
 <p><b>org.quartz.scheduler.userTransactionURL</b> <br/>
-Should be set to the JNDI URL at which Quartz can locate the Application Server's UserTransaction manager.  The default value (if not specified) is "java:comp/UserTransaction" - which works for almost all Application Servers.  Websphere users may need to set this property to "jta/usertransaction".</p>
+Should be set to the JNDI URL at which Quartz can locate the Application Server's UserTransaction manager.  The default value (if not specified) is "java:comp/UserTransaction" - which works for almost all Application Servers.  Websphere users may need to set this property to "jta/usertransaction".  This is only used if Quartz is configured to use JobStoreCMT, and <em>org.quartz.scheduler.wrapJobExecutionInUserTransaction</em> is set to true.</p>
 
 <p><b>org.quartz.scheduler.wrapJobExecutionInUserTransaction</b> <br/>
 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 after the JobDataMap is updated (if it is a StatefulJob).  The default value is "false".</p>
 <p><b>org.quartz.scheduler.jobFactory.class</b><br/>
 The class name of the JobFactory to use.  The default is 'org.quartz.simpl.SimpleJobFactory', you may like to try 'org.quartz.simpl.PropertySettingJobFactory'.  A JobFatcory is responsible for producing instances of JobClasses.  SimpleJobFactory simply calls newInstance() on the class.  PropertySettingJobFactory does as well, but also reflectively sets the job's bean properties using the contents of the JobDataMap.</p>
 
-<p><b>org.quartz.scheduler.makeSchedulerThreadDaemon</b><br/>
-Whether to mark as a daemon the main scheduler thread which scans for triggers to fire as well as its thread group.  By default this is "false".</p>
 
 
                     			    </td>

docs/wikidocs/ConfigPlugins.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigPlugins-ConfigureSchedulerPlugins">Configure Scheduler Plugins</a></h1>
+				    <h1><a name="ConfigPlugins-ConfigureSchedulerPlugins"></a>Configure Scheduler Plugins</h1>
 
 
 <p>Like listeners configuring plugins through the configuration file consists of giving then a name, and then specifying the class name, and any other properties to be set on the instance. The class must have a no-arg constructor, and the properties are set reflectively. Only primitive data type values (including Strings) are supported.</p>
 
 <p>There are several Plugins that come with Quartz, that can be found in the <em>org.quartz.plugins</em> package (and subpackages).  Example of configuring a few of them are as follows:</p>
 
-<h3><a name="ConfigPlugins-SampleconfigurationofLoggingTriggerHistoryPlugin">Sample configuration of Logging Trigger History Plugin</a></h3>
+<h3><a name="ConfigPlugins-SampleconfigurationofLoggingTriggerHistoryPlugin"></a>Sample configuration of Logging Trigger History Plugin</h3>
 
 <p>The logging trigger history plugin catches trigger events (it is also a trigger listener) and logs then with Jakarta Commons-Logging.  See the class's JavaDoc for a list of all the possible parameters.</p>
 
 
 <p><br clear="all" /></p>
 
-<h3><a name="ConfigPlugins-SampleconfigurationofJobInitializationPlugin">Sample configuration of Job Initialization Plugin</a></h3>
+<h3><a name="ConfigPlugins-SampleconfigurationofJobInitializationPlugin"></a>Sample configuration of Job Initialization Plugin</h3>
 
-<p>Job initialization plugin reads a set of jobs and triggers from one or more XML file, and adds them to the scheduler during initialization.  See the class's JavaDoc for more details.</p>
+<p>Job initialization plugin reads a set of jobs and triggers from an XML file, and adds them to the scheduler during initialization.  See the class's JavaDoc for more details.</p>
 
 <div class="code"><div class="codeHeader"><b>Sample configuration of JobInitializationPlugin</b></div><div class="codeContent">
 <pre class="code-java">org.quartz.plugin.jobInitializer.class = \
   org.quartz.plugins.xml.JobInitializationPlugin
-org.quartz.plugin.jobInitializer.fileNames = \
+org.quartz.plugin.jobInitializer.fileName = \
   data/my_job_data.xml
 org.quartz.plugin.jobInitializer.overWriteExistingJobs = <span class="code-keyword">false</span>
-org.quartz.plugin.jobInitializer.failOnFileNotFound = <span class="code-keyword">true</span>
-org.quartz.plugin.jobInitializer.wrapInUserTransaction = <span class="code-keyword">false</span></pre>
+org.quartz.plugin.jobInitializer.failOnFileNotFound = <span class="code-keyword">true</span></pre>
 </div></div>
 
 <p><br clear="all" /></p>
 
-<h3><a name="ConfigPlugins-SampleconfigurationofShutdownHookPlugin">Sample configuration of Shutdown Hook Plugin</a></h3>
+<h3><a name="ConfigPlugins-SampleconfigurationofShutdownHookPlugin"></a>Sample configuration of Shutdown Hook Plugin</h3>
 
 <p>The shutdown-hook plugin catches the event of the JVM terminating, and calls shutdown on the scheduler.</p>
 

docs/wikidocs/ConfigRAMJobStore.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigRAMJobStore-ConfigureRAMJobStore">Configure RAMJobStore</a></h1>
+				    <h1><a name="ConfigRAMJobStore-ConfigureRAMJobStore"></a>Configure RAMJobStore</h1>
 
 
 <p>RAMJobStore is used to store scheduling information (job, triggers and calendars) within memory.  RAMJobStore is fast and lightweight, but all scheduling information is lost when the process terminates.  </p>
 
 <p>RAMJobStore can be tuned with the following properties:
 <br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>int</td>
 <td class='confluenceTd'>60000</td>
 </tr>
-</table>
+</tbody></table>
 
 
 <p><b>org.quartz.jobStore.misfireThreshold</b> <br/>

docs/wikidocs/ConfigRMI.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigRMI-ConfigureSchedulerRMISettings">Configure Scheduler RMI Settings</a></h1>
+				    <h1><a name="ConfigRMI-ConfigureSchedulerRMISettings"></a>Configure Scheduler RMI Settings</h1>
 
 
-<h3><a name="ConfigRMI-RMIServerSchedulerProperties">RMI Server Scheduler Properties</a></h3>
+<h3><a name="ConfigRMI-RMIServerSchedulerProperties"></a>RMI Server Scheduler Properties</h3>
 
 <p>None of the primary properties are required, and all have 'resonable' defaults.  When using Quartz via RMI, you need to start an instance of Quartz with it configured to "export" its services via RMI.  You then create clients to the server by configuring a Quartz scheduler to "proxy" its work to the server.
 <br clear="all" /></p>
 
 
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='tipMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<table cellpadding='5' width='85%' cellspacing='8px' class='tipMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
 <p>Some users experience problems with class availability (namely Job classes) between the client and server.  To work through these problems you'll need an understanding of RMI's "codebase" and RMI security managagers.  You may find these resources to be useful:</p>
 
 <p>An excellent description of RMI and codebase: <a href="http://www.kedwards.com/jini/codebase.html" title="Visit page outside Confluence">&#104;ttp://www.kedwards.com/jini/codebase.html</a> . One of the important points is to realize that "codebase" is used by the client!</p>
 <p>Quick info about security managers: <a href="http://gethelp.devx.com/techtips/java_pro/10MinuteSolutions/10min0500.asp" title="Visit page outside Confluence">&#104;ttp://gethelp.devx.com/techtips/java_pro/10MinuteSolutions/10min0500.asp</a></p>
 
 <p>And finally from the java API docs, read the docs for the RMISecurityManager<br/>
-<a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/RMISecurityManager.html" title="Visit page outside Confluence">&#104;ttp://java.sun.com/j2se/1.4.2/docs/api/java/rmi/RMISecurityManager.html</a></p></td></tr></table></div></div>
+<a href="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/RMISecurityManager.html" title="Visit page outside Confluence">&#104;ttp://java.sun.com/j2se/1.4.2/docs/api/java/rmi/RMISecurityManager.html</a></p></td></tr></table>
 
 <p><br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>no</td>
 <td class='confluenceTd'>false</td>
 </tr>
-<tr>
-<td class='confluenceTd'>org.quartz.scheduler.rmi.bindName</td>
-<td class='confluenceTd'>no</td>
-<td class='confluenceTd'>&lt;instanceName&gt;_$_&lt;instanceId&gt;</td>
-</tr>
-</table>
+</tbody></table>
 
 <p><b>org.quartz.scheduler.rmi.export</b><br/>
 If you want the Quartz Scheduler to export itself via RMI as a server then set the 'rmi.export' flag to true.  </p>
 <p><b>org.quartz.scheduler.rmi.serverPort</b><br/>
 The port on which the the Quartz Scheduler service will bind and listen for connections.  By default, the RMI service will 'randomly' select a port as the scheduler is bound to the RMI Registry.</p>
 
+
 <p><b>org.quartz.scheduler.rmi.proxy</b><br/>
 If you want to connect to (use) a remotely served scheduler, then set the 'org.quartz.scheduler.rmi.proxy' flag to true.  You must also then specify a  host and port for the RMI Registry process - which is typically 'localhost' port 1099.</p>
 
-<p><b>org.quartz.scheduler.rmi.bindName</b><br/>
-The name under which the Scheduler is bound in the RIM registry.  
-Default is concatenation of 'org.quartz.scheduler.instanceName' + '_$_' + 'org.quartz.scheduler.instanceId'.  Note that if 'org.quartz.scheduler.instanceId' is AUTO, the automatically generated instanceId will be used, not the 'AUTO' string. </p>
-
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='infoMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>It does not make sense to specify a 'true' value for both 'org.quartz.scheduler.rmi.export' and 'org.quartz.scheduler.rmi.proxy' in the same config file - if you do, the 'export' option will be ignored.  A value of 'false' for both 'export' and 'proxy' properties is of course valid, if you're not using Quartz via RMI.</p></td></tr></table></div></div>
+<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>It does not make sense to specify a 'true' value for both 'org.quartz.scheduler.rmi.export' and 'org.quartz.scheduler.rmi.proxy' in the same config file - if you do, the 'export' option will be ignored.  A value of 'false' for both 'export' and 'proxy' properties is of course valid, if you're not using Quartz via RMI.</p></td></tr></table>
 
 
                     			    </td>

docs/wikidocs/ConfigThreadPool.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="ConfigThreadPool-ConfigureThreadPoolSettings">Configure ThreadPool Settings</a></h1>
+				    <h1><a name="ConfigThreadPool-ConfigureThreadPoolSettings"></a>Configure ThreadPool Settings</h1>
 
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>int</td>
 <td class='confluenceTd'>Thread.NORM_PRIORITY (5)</td>
 </tr>
-</table>
+</tbody></table>
 
 <p><b>org.quartz.threadPool.class</b> <br/>
 Is the name of the ThreadPool implementation you wish to use.  The threadpool that ships with Quartz is "org.quartz.simpl.SimpleThreadPool", and should meet the needs of nearly every user.  It has very simple behavior and is very well tested.  It provides a fixed-size pool of threads that 'live' the lifetime of the Scheduler.</p>
 
 <p><br clear="all" /></p>
 
-<h3><a name="ConfigThreadPool-SimpleThreadPoolSpecificProperties">SimpleThreadPool-Specific Properties</a></h3>
+<h3><a name="ConfigThreadPool-SimpleThreadPoolSpecificProperties"></a>SimpleThreadPool-Specific Properties</h3>
 <p><br clear="all" /></p>
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Property Name</th>
 <th class='confluenceTh'>Required</th>
 <td class='confluenceTd'>boolean</td>
 <td class='confluenceTd'>false</td>
 </tr>
-</table>
+</tbody></table>
 
 <p><b>org.quartz.threadPool.makeThreadsDaemons</b> <br/>
-Can be set to "true" to have the threads in the pool created as daemon threads and, if <em>org.quartz.threadPool.threadsInheritGroupOfInitializingThread</em> is "false", also mark the new ThreadGroup as daemon.  Default is "false".</p>
+Can be set to "true" to have the threads in the pool created as daemon threads.  Default is "false".</p>
 
 <p><b>org.quartz.threadPool.threadsInheritGroupOfInitializingThread</b> <br/>
 Can be "true" or "false", and defaults to true.</p>
 
 <p><br clear="all" /></p>
 
-<h3><a name="ConfigThreadPool-CustomThreadPools">Custom ThreadPools</a></h3>
+<h3><a name="ConfigThreadPool-CustomThreadPools"></a>Custom ThreadPools</h3>
 
 <p><br clear="all" />
 If you use your own implementation of a thread pool, you can have properties set on it reflectively simply by naming the property as thus:</p>

docs/wikidocs/Configuration.html

 	<li><a href="ConfigJobStoreCMT.html" title="ConfigJobStoreCMT">Configuration of JDBC-JobStoreCMT</a> (JDBC with JTA containter-managed transactions)</li>
 	<li><a href="ConfigDataSources.html" title="ConfigDataSources">Configuration of DataSources</a> (for use by the JDBC-JobStores)</li>
 	<li><a href="ConfigJDBCJobStoreClustering.html" title="ConfigJDBCJobStoreClustering">Configuration of Clustering</a> (achieve fail-over and load-balancing with JDBC-JobStore)</li>
-	<li><a href="ConfigRemoteJMX.html" title="ConfigRemoteJMX">Configuration of JMX Server and Client</a> (use a Quartz instance from a remote process via JMX)</li>
 </ol>
 
 

docs/wikidocs/Cookbook.html

 <p><br clear="all" /></p>
 
 <p>Choose from the following menu:</p>
-
 <ul>
 	<li><a href="CreateScheduler.html" title="CreateScheduler">Instantiating a Scheduler</a></li>
 	<li><a href="SchedulerStandby.html" title="SchedulerStandby">Placing a Scheduler in Stand-by Mode</a></li>
 	<li><a href="ShutdownScheduler.html" title="ShutdownScheduler">Shutting Down a Scheduler</a></li>
 	<li><a href="ServletInitScheduler.html" title="ServletInitScheduler">Initializing a Scheduler Within a Servlet Container</a></li>
-	<li>Initializing a Scheduler With Job And Triggers Defined in an XML file</li>
+	<li><a href="JobInitPlugin.html" title="JobInitPlugin">Initializing a Scheduler With Job And Triggers Defined in an XML file</a></li>
 </ul>
 
 
 	<li><a href="ScheduleStoreJob.html" title="ScheduleStoreJob">Scheduling an already stored Job</a></li>
 	<li><a href="UpdateJob.html" title="UpdateJob">Updating an existing Job</a></li>
 	<li><a href="UpdateTrigger.html" title="UpdateTrigger">Updating an existing Trigger</a></li>
-	<li><a href="AntJob.html" title="AntJob">Defining a Native ANT Build Script Job</a></li>
 </ul>
 
 
 	<li><a href="BiWeeklyTrigger.html" title="BiWeeklyTrigger">Trigger That Fires Every 2 Weeks</a></li>
 	<li><a href="MonthlyTrigger.html" title="MonthlyTrigger">Trigger That Fires Every Month</a></li>
 	<li><a href="FifthWorkingDayTrigger.html" title="FifthWorkingDayTrigger">Trigger That Fires on the Fifth "Working Day" of Every Month</a></li>
+	<li><a href="DailyCalendarTrigger.html" title="DailyCalendarTrigger">Trigger That Fires Every 5 Minutes Between 8:15 AM and 5:30 PM (every day)</a></li>
 </ul>
 
 

docs/wikidocs/CreateScheduler.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="CreateScheduler-InstantiatingaScheduler">Instantiating a Scheduler</a></h1>
+				    <h1><a name="CreateScheduler-InstantiatingaScheduler"></a>Instantiating a Scheduler</h1>
 
 <p><br clear="all" /></p>
 

docs/wikidocs/CronTriggers Tutorial.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='noteMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>Some of the content in this tutorial is taken from the Quartz 1.4.2 javadocs for <tt>CronTrigger</tt>.</p></td></tr></table></div></div>
+				    <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>Some of the content in this tutorial is taken from the Quartz 1.4.2 javadocs for <tt>CronTrigger</tt>.</p></td></tr></table>
 
-<h3><a name="CronTriggersTutorial-Introduction">Introduction</a></h3>
+<h3><a name="CronTriggersTutorial-Introduction"></a>Introduction</h3>
 
 <p><tt>cron</tt> is a UNIX tool that has been around for a long time, so its scheduling capabilities are powerful and proven. The <tt>CronTrigger</tt> class is based on the scheduling capabilities of cron.</p>
 
 
 <p>Cron expressions are powerful, but can be pretty confusing. This tutorial aims to take some of the mystery out of creating a cron expression, giving users a resource which they can visit before having to ask in a forum or mailing list.</p>
 
-<h3><a name="CronTriggersTutorial-Format">Format</a></h3>
+<h3><a name="CronTriggersTutorial-Format"></a>Format</h3>
 
 <p>A cron expression is a string comprised of 6 or 7 fields separated by white space. Fields can contain any of the allowed values, along with various combinations of the allowed special characters for that field. The fields are as follows:</p>
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Field Name</th>
 <th class='confluenceTh'>Mandatory?</th>
 <td class='confluenceTd'>empty, 1970-2099</td>
 <td class='confluenceTd'>, - * /</td>
 </tr>
-</table>
+</tbody></table>
 
 <p>So cron expressions can be as simple as this: <tt>* * * * ? *</tt><br/>
 or more complex, like this: <tt>0 0/5 14,18,3-39,52 ? JAN,MAR,SEP MON-FRI 2002-2010</tt></p>
 
-<h3><a name="CronTriggersTutorial-Specialcharacters">Special characters</a></h3>
+<h3><a name="CronTriggersTutorial-Specialcharacters"></a>Special characters</h3>
 
 <ul>
 	<li><b><tt>&#42;</tt></b> (<em>"all values"</em>) - used to select all values within a field. For example, "&#42;" in the minute field means <em>"every minute"</em>.</li>
 </ul>
 
 
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='tipMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>The 'L' and 'W' characters can also be combined in the day-of-month field to yield 'LW', which translates to <em>"last weekday of the month"</em>.</p></td></tr></table></div></div>
+<table cellpadding='5' width='85%' cellspacing='8px' class='tipMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>The 'L' and 'W' characters can also be combined in the day-of-month field to yield 'LW', which translates to <em>"last weekday of the month"</em>.</p></td></tr></table>
 
 <ul>
 	<li><b><tt>#</tt></b> - used to specify "the nth" XXX day of the month. For example, the value of "6#3" in the day-of-week field means <em>"the third Friday of the month"</em> (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month.</li>
 </ul>
 
 
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='infoMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>The legal characters and the names of months and days of the week are not case sensitive. <tt>MON</tt> is the same as <tt>mon</tt>.</p></td></tr></table></div></div>
+<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>The legal characters and the names of months and days of the week are not case sensitive. <tt>MON</tt> is the same as <tt>mon</tt>.</p></td></tr></table>
 
-<h3><a name="CronTriggersTutorial-Examples">Examples</a></h3>
+<h3><a name="CronTriggersTutorial-Examples"></a>Examples</h3>
 
 <p>Here are some full examples:</p>
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'>Expression</th>
 <th class='confluenceTh'>Meaning</th>
 <td class='confluenceTd'><tt>0 11 11 11 11 ?</tt></td>
 <td class='confluenceTd'>Fire every November 11th at 11:11am.</td>
 </tr>
-</table>
+</tbody></table>
 
-<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='warningMacro' border='0'><tr><td width='16' valign='top'><img src="/images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
-<p>Pay attention to the effects of '?' and '*' in the day-of-week and day-of-month fields!</p></td></tr></table></div></div>
+<table cellpadding='5' width='85%' cellspacing='8px' class='warningMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
+<p>Pay attention to the effects of '?' and '*' in the day-of-week and day-of-month fields!</p></td></tr></table>
 
-<h3><a name="CronTriggersTutorial-Notes">Notes</a></h3>
+<h3><a name="CronTriggersTutorial-Notes"></a>Notes</h3>
 <ul>
 	<li>Support for the features described for the 'C' character is not complete.</li>
 	<li>Support for specifying both a day-of-week and a day-of-month value is not complete (you must currently use the '?' character in one of these fields).</li>

docs/wikidocs/DailyCalendarTrigger.html

+<html>
+    <head>
+        <title>Quartz 1 - 
+        DailyCalendarTrigger
+         </title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <h1><a name="DailyCalendarTrigger-TriggerThatFiresEvery5MinutesBetween8%3A15AMand5%3A30PM%28everyday%29"></a>Trigger That Fires Every 5 Minutes Between 8:15 AM and 5:30 PM (every day)</h1>
+
+<p>It is tempting to try and represent this schedule using only a CronTrigger. However, the closest we could come with a CronTrigger is every 5 minutes between 8:00 AM and 6:00 PM every day. Why? Because Each field in a cron expression is independent of the other fields, so setting using the n/m syntax for minute (i.e. "0 15/5 8-5 * * ?") would result in the trigger firing every five minutes starting with the 15th minute every hour: 8:15, 8:20, ... , 8:50, 8:55, 9:15, 9:20...</p>
+
+<p>Another thought is a SimpleTrigger, since we can use startTime and endTime to limit fire times (this also true with CronTrigger). But since startTime and endTime are Date objects, for this to work, we would have to reschedule the SimpleTrigger every day.</p>
+
+<p>So our only real option here is to use a Calendar to build our schedule. We start by building a trigger that is close to what we want. In this case, since we want fire times to be based on a preset time (rather than when the trigger was scheduled), it will probably be easier to use CronTrigger. However, SimpleTrigger would be an effective candidate here as well.</p>
+<div class="code"><div class="codeHeader"><b>Defining a Calendar</b></div><div class="codeContent">
+<pre class="code-java">CronTrigger testTrigger = <span class="code-keyword">new</span> CronTrigger(<span class="code-quote">"testTrigger"</span>, <span class="code-quote">"TEST"</span>, <span class="code-quote">"0 0/5 * * * ?"</span>); <span class="code-comment">//every five minutes
+</span>testTrigger.setJobName(<span class="code-quote">"TestJob"</span>);
+testTrigger.setJobGroup(<span class="code-quote">"TEST"</span>);</pre>
+</div></div>
+<p>Then we create a Calendar to limit out the times we don't want. Prior to Quartz 1.5.2, this would have meant writing a custom Calendar, as none of the existing Calendar implementations could limit schedules by the time of day. 1.5.2, however saw the addition of DailyCalendar, donated by Mike Funk:</p>
+<div class="code"><div class="codeHeader"><b>Defining the Trigger (fires on the fifth working day of every month at 5:00 PM)</b></div><div class="codeContent">
+<pre class="code-java">DailyCalendar dailyCal = <span class="code-keyword">new</span> DailyCalendar(<span class="code-quote">"dailyCalendar"</span>, <span class="code-quote">"8:15"</span>, <span class="code-quote">"17:30"</span>);
+
+<span class="code-comment">//This creates a calendar which excludes the time range we want.
+</span><span class="code-comment">// We need to the calendar to exclude all but the time range we've defined.
+</span><span class="code-comment">// By inverting the time range, we tell the calendar to exclude all times that
+</span><span class="code-comment">// <span class="code-keyword">do</span> not fall in the specified time range:
+</span>dailyCal.setInvertTimeRange(<span class="code-keyword">true</span>);
+
+<span class="code-comment">//add the calendar to the scheduler
+</span>sched.addCalendar(<span class="code-quote">"dailyCalendar"</span>, dailyCal, <span class="code-keyword">true</span>, <span class="code-keyword">true</span>);
+
+<span class="code-comment">//associate the calendar with the trigger
+</span>testTrigger.setCalendarName(<span class="code-quote">"dailyCalendar"</span>);
+
+<span class="code-comment">//schedule the trigger
+</span>sched.scheduleJob(testTrigger);</pre>
+</div></div>
+<p><em>Note we could have used the expression "0 0/5 8-5 * * ?" which would have created slightly less work for the scheduler, but it would have made the example less clear, so the optimization was left out.</em></p>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/DailyTrigger.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="DailyTrigger-TriggerThatExecutesEveryDay">Trigger That Executes Every Day</a></h1>
-<h2><a name="DailyTrigger-Usingorg.quartz.helpers.TriggerUtils">Using org.quartz.helpers.TriggerUtils</a></h2>
+				    <h1><a name="DailyTrigger-TriggerThatExecutesEveryDay"></a>Trigger That Executes Every Day</h1>
+<h2><a name="DailyTrigger-Usingorg.quartz.helpers.TriggerUtils"></a>Using org.quartz.helpers.TriggerUtils</h2>
 <p><em>(TriggerUtils note: in 1.5.x, org.quartz.helpers.TriggerUtils has moved to org.quartz.TriggerUtils.)</em></p>
 <div class="code"><div class="codeHeader"><b>Trigger That Executes Every Day at 3:00PM</b></div><div class="codeContent">
 <pre class="code-java">Trigger trigger = TriggerUtils.makeDailyTrigger(15, 0);
 trigger.setGroup(<span class="code-quote">"group1"</span>);</pre>
 </div></div>
 
-<h2><a name="DailyTrigger-Doingitmanually">Doing it manually</a></h2>
+<h2><a name="DailyTrigger-Doingitmanually"></a>Doing it manually</h2>
 <p>If you would like a Trigger that executes every day at a specified time, use CronTrigger:</p>
 <div class="code"><div class="codeHeader"><b>CronTrigger That Executes Every Day at 3:00PM</b></div><div class="codeContent">
 <pre class="code-java">Trigger trigger = <span class="code-keyword">new</span> CronTrigger(<span class="code-quote">"trigger1"</span>, <span class="code-quote">"group1"</span>);

docs/wikidocs/DefineJobWithData.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="DefineJobWithData-DefiningaJob">Defining a Job</a></h1>
+				    <h1><a name="DefineJobWithData-DefiningaJob"></a>Defining a Job</h1>
 
 <p><br clear="all" /></p>
 

docs/wikidocs/Documentation.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h3><a name="Documentation-1.Overview">1. Overview</a></h3>
+				    <h3><a name="Documentation-1.Overview"></a>1. Overview</h3>
 
 <ol>
 	<li><a href="License.html" title="License">License</a></li>
 	<li><a href="Features.html" title="Features">Features</a></li>
 	<li><a href="FAQ.html" title="FAQ">Frequently Asked Questions</a></li>
-	<li><a href="Quickstart.html" title="QuickStart">Quickstart</a> - a guide to getting Quartz up and running.</li>
+	<li><a href="QuickStart.html" title="QuickStart">QuickStart</a> - a guide to getting Quartz up and running.</li>
 	<li><a href="http://www.opensymphony.com/quartz/api/" title="Visit page outside Confluence">Javadocs</a></li>
 	<li>Articles and press about Quartz
 	<ol>
 </ol>
 
 
-<h3><a name="Documentation-2.QuartzVersions">2. Quartz Versions</a></h3>
+<h3><a name="Documentation-2.QuartzVersions"></a>2. Quartz Versions</h3>
 
 <ul>
-	<li>Current release - <a href="Quartz 1.5.1.html" title="Quartz 1.5.1">Quartz 1.5.1</a></li>
+	<li>Current release - <a href="Quartz 1.6.0.html" title="Quartz 1.6.0">Quartz 1.6.0</a></li>
 	<li><a href="Releases.html" title="Releases">Previous Releases</a></li>
 </ul>
 
 
-<h3><a name="Documentation-3.LearningQuartz">3. Learning Quartz</a></h3>
+<h3><a name="Documentation-3.LearningQuartz"></a>3. Learning Quartz</h3>
 
 <p><b>Tutorials</b></p>
 
 </ol>
 
 
-<h3><a name="Documentation-4.ReferenceGuide">4. Reference Guide</a></h3>
+<h3><a name="Documentation-4.ReferenceGuide"></a>4. Reference Guide</h3>
 
 <ol>
 	<li><a href="Configuration.html" title="Configuration">Configuration</a></li>
 </ol>
 
 
-<h3><a name="Documentation-5.Thirdpartyintegration">5. Third-party integration</a></h3>
+<h3><a name="Documentation-5.Thirdpartyintegration"></a>5. Third-party integration</h3>
 
 <ol>
 	<li><a href="http://www.opensymphony.com/webwork/wikidocs/Quartz.html" title="Visit page outside Confluence">Quartz and XWork/WebWork</a></li>

docs/wikidocs/Example1.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="Example1-Example1YourFirstQuartzProgram">Example 1 - Your First Quartz Program</a></h1>
+				    <h1><a name="Example1-Example1YourFirstQuartzProgram"></a>Example 1 - Your First Quartz Program</h1>
 
-<h2><a name="Example1-Overview">Overview</a></h2>
+<h2><a name="Example1-Overview"></a>Overview</h2>
 <p>This example is designed to demonstrate how to get up and running with Quartz.   This example will fire off a simple job that says "Hello World".</p>
 
 <p>The program will perform the following actions:</p>
 </ul>
 
 
-<h2><a name="Example1-RunningtheExample">Running the Example</a></h2>
+<h2><a name="Example1-RunningtheExample"></a>Running the Example</h2>
 <p>This example can be executed from the <b>examples/example1</b> directory.   There are two out-of-the-box methods for running this example</p>
 
 <ul>
 </ul>
 
 
-<h2><a name="Example1-TheCode">The Code</a></h2>
+<h2><a name="Example1-TheCode"></a>The Code</h2>
 <p>The code for this example resides in the package <b>org.quartz.examples.example1</b>.   </p>
 
 <p>The code in this example is made up of the following classes:</p>
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'> Class Name </th>
 <th class='confluenceTh'> Description</th>
 <td class='confluenceTd'> HelloJob </td>
 <td class='confluenceTd'> A simple job that says Hello World</td>
 </tr>
-</table>
+</tbody></table>
 
-<h3><a name="Example1-HelloJob">HelloJob</a></h3>
+<h3><a name="Example1-HelloJob"></a>HelloJob</h3>
 <p>HelloJob is a simple job that implements the <em>Job</em> interface and logs a nice message to the log (by default, this will simply go to the screen).   The current date and time is printed in the job so that you can see exactly when the job is run.</p>
 
 <div class="code"><div class="codeContent">
 }</pre>
 </div></div>
 
-<h3><a name="Example1-SimpleExample">SimpleExample</a></h3>
+<h3><a name="Example1-SimpleExample"></a>SimpleExample</h3>
 <p>The program starts by getting an instance of the Scheduler.  This is done by creating a <em>StdSchedulerFactory</em> and then using it to create a scheduler.   This will create a simple, RAM-based scheduler.</p>
 
 <div class="code"><div class="codeContent">

docs/wikidocs/Example3.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="Example3-Example3CronbasedTriggers">Example 3 - Cron-based Triggers</a></h1>
+				    <h1><a name="Example3-Example3CronbasedTriggers"></a>Example 3 - Cron-based Triggers</h1>
 
-<h2><a name="Example3-Overview">Overview</a></h2>
+<h2><a name="Example3-Overview"></a>Overview</h2>
 <p>This example is designed to demonstrate how you can use Cron Triggers to schedule jobs.   This example will fire off several simple jobs that say "Hello World" and display the date and time that the job was executed.</p>
 
 <p>The program will perform the following actions:</p>
 
 <p>Note:  Refer to the Quartz <a href="http://quartz.sourceforge.net/javadoc/org/quartz/CronTrigger.html" title="Visit page outside Confluence">javadoc</a> for a thorough explanation of Cron Triggers.</p>
 
-<h2><a name="Example3-RunningtheExample">Running the Example</a></h2>
+<h2><a name="Example3-RunningtheExample"></a>Running the Example</h2>
 <p>This example can be executed from the <b>examples/example3</b> directory.   There are two out-of-the-box methods for running this example</p>
 
 <ul>
 </ul>
 
 
-<h2><a name="Example3-TheCode">The Code</a></h2>
+<h2><a name="Example3-TheCode"></a>The Code</h2>
 <p>The code for this example resides in the package <b>org.quartz.examples.example3</b>.   </p>
 
 <p>The code in this example is made up of the following classes:</p>
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'> Class Name </th>
 <th class='confluenceTh'> Description</th>
 <td class='confluenceTd'> SimpleJob </td>
 <td class='confluenceTd'> A simple job that says Hello World and displays the date/time</td>
 </tr>
-</table>
+</tbody></table>
 
-<h3><a name="Example3-SimpleJob">SimpleJob</a></h3>
+<h3><a name="Example3-SimpleJob"></a>SimpleJob</h3>
 <p>SimpleJob is a simple job that implements the <em>Job</em> interface and logs a nice message to the log (by default, this will simply go to the screen).   The current date and time is printed in the job so that you can see exactly when the job is run.</p>
 
 
 }</pre>
 </div></div>
 
-<h3><a name="Example3-CronTriggerExample">CronTriggerExample</a></h3>
+<h3><a name="Example3-CronTriggerExample"></a>CronTriggerExample</h3>
 <p>The program starts by getting an instance of the Scheduler.  This is done by creating a <em>StdSchedulerFactory</em> and then using it to create a scheduler.   This will create a simple, RAM-based scheduler.</p>
 
 <div class="code"><div class="codeContent">

docs/wikidocs/Example4.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="Example4-Example4JobParametersandJobState">Example 4 - Job Parameters and Job State</a></h1>
+				    <h1><a name="Example4-Example4JobParametersandJobState"></a>Example 4 - Job Parameters and Job State</h1>
 
-<h2><a name="Example4-Overview">Overview</a></h2>
+<h2><a name="Example4-Overview"></a>Overview</h2>
 <p>This example is designed to demonstrate how you can pass run-time parameters into quartz jobs and how you can maintain state in a job.</p>
 
 <p>The program will perform the following actions:</p>
 
 
 
-<h2><a name="Example4-RunningtheExample">Running the Example</a></h2>
+<h2><a name="Example4-RunningtheExample"></a>Running the Example</h2>
 <p>This example can be executed from the <b>examples/example4</b> directory.   There are two out-of-the-box methods for running this example</p>
 
 <ul>
 </ul>
 
 
-<h2><a name="Example4-TheCode">The Code</a></h2>
+<h2><a name="Example4-TheCode"></a>The Code</h2>
 <p>The code for this example resides in the package <b>org.quartz.examples.example4</b>.   </p>
 
 <p>The code in this example is made up of the following classes:</p>
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'> Class Name </th>
 <th class='confluenceTh'> Description</th>
 <td class='confluenceTd'> ColorJob </td>
 <td class='confluenceTd'> A simple job that prints a favorite color (passed in as a run-time parameter) and displays its execution count.</td>
 </tr>
-</table>
+</tbody></table>
 
-<h3><a name="Example4-ColorJob">ColorJob</a></h3>
+<h3><a name="Example4-ColorJob"></a>ColorJob</h3>
 
 <p>ColorJob is a simple job that implements the <em>StateFulJob</em> interface and logs the following information when the job is executed:</p>
 
 
 <p>This variable is also incremented and displayed.  However, its count will always be displayed as "1" because Quartz will always instantiate a new instance of the class during each execution.   This prevents member variables from being used to maintain state.</p>
 
-<h3><a name="Example4-JobStateExample">JobStateExample </a></h3>
+<h3><a name="Example4-JobStateExample"></a>JobStateExample </h3>
 <p>The program starts by getting an instance of the Scheduler.  This is done by creating a <em>StdSchedulerFactory</em> and then using it to create a scheduler.   This will create a simple, RAM-based scheduler.</p>
 
 <div class="code"><div class="codeContent">

docs/wikidocs/Example5.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="Example5-Example5JobMisfires">Example 5 - Job Misfires</a></h1>
+				    <h1><a name="Example5-Example5JobMisfires"></a>Example 5 - Job Misfires</h1>
 
-<h2><a name="Example5-Overview">Overview</a></h2>
+<h2><a name="Example5-Overview"></a>Overview</h2>
 <p>This example is designed to demonstrate how you can pass run-time parameters into quartz jobs and how you can maintain state in a job.</p>
 
 <p>The program will perform the following actions:</p>
 
 
 
-<h2><a name="Example5-RunningtheExample">Running the Example</a></h2>
+<h2><a name="Example5-RunningtheExample"></a>Running the Example</h2>
 <p>This example can be executed from the <b>examples/example5</b> directory.   There are two out-of-the-box methods for running this example</p>
 
 <ul>
 </ul>
 
 
-<h2><a name="Example5-TheCode">The Code</a></h2>
+<h2><a name="Example5-TheCode"></a>The Code</h2>
 <p>The code for this example resides in the package <b>org.quartz.examples.example5</b>.   </p>
 
 <p>The code in this example is made up of the following classes:</p>
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'> Class Name </th>
 <th class='confluenceTh'> Description</th>
 <td class='confluenceTd'> MisfireJob </td>
 <td class='confluenceTd'> A simple job that takes 10 seconds to run</td>
 </tr>
-</table>
+</tbody></table>
 
-<h3><a name="Example5-MisfireJob">MisfireJob </a></h3>
+<h3><a name="Example5-MisfireJob"></a>MisfireJob </h3>
 
 <p>MisfireJob is a simple job that prints its execution time and then will wait for a period of time before completing.  The amount of wait time is defined by the job parameter EXECUTION_DELAY.  If this job parameter is not passed in, the job will default to a wait time of 5 seconds:</p>
 
 </div></div>
 
 
-<h3><a name="Example5-MisfireExample">MisfireExample</a></h3>
+<h3><a name="Example5-MisfireExample"></a>MisfireExample</h3>
 
 <p>The program starts by getting an instance of the Scheduler.  This is done by creating a <em>StdSchedulerFactory</em> and then using it to create a scheduler.   This will create a simple, RAM-based scheduler.</p>
 

docs/wikidocs/Example6.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="Example6-Example6DealingwithJobExceptions">Example 6 - Dealing with Job Exceptions</a></h1>
+				    <h1><a name="Example6-Example6DealingwithJobExceptions"></a>Example 6 - Dealing with Job Exceptions</h1>
 
-<h2><a name="Example6-Overview">Overview</a></h2>
+<h2><a name="Example6-Overview"></a>Overview</h2>
 <p>This example is designed to demonstrate how can deal with job execution exceptions.   Jobs in Quartz are permitted to throw a <em>JobExecutionExceptions</em>.   When this exception is thrown, you can instruct quartz what action to take.</p>
 
 <p>The program will perform the following actions:</p>
 </ul>
 
 
-<h2><a name="Example6-RunningtheExample">Running the Example</a></h2>
+<h2><a name="Example6-RunningtheExample"></a>Running the Example</h2>
 <p>This example can be executed from the <b>examples/example6</b> directory.   There are two out-of-the-box methods for running this example</p>
 
 <ul>
 </ul>
 
 
-<h2><a name="Example6-TheCode">The Code</a></h2>
+<h2><a name="Example6-TheCode"></a>The Code</h2>
 <p>The code for this example resides in the package <b>org.quartz.examples.example6</b>.   </p>
 
 <p>The code in this example is made up of the following classes:</p>
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'> Class Name </th>
 <th class='confluenceTh'> Description</th>
 <td class='confluenceTd'> BadJob2 </td>
 <td class='confluenceTd'> A simple job that will throw an exception and instruct quartz to never schedule the job again</td>
 </tr>
-</table>
+</tbody></table>
 
-<h3><a name="Example6-BadJob1">BadJob1</a></h3>
+<h3><a name="Example6-BadJob1"></a>BadJob1</h3>
 
 <p>BadJob1 is a simple job that simply creates an artificial exception (divide by zero).   When this exception is caught, a <em>JobExecutionException</em> is thrown and set to refire the job immediatly.</p>
 <div class="code"><div class="codeContent">
 
 <p>This will force quartz to run this job over and over and over and over again.</p>
 
-<h3><a name="Example6-BadJob2">BadJob2</a></h3>
+<h3><a name="Example6-BadJob2"></a>BadJob2</h3>
 
 <p>BadJob2 is a simple job that simply creates an artificial exception (divide by zero).   When this exception is caught, a <em>JobExecutionException</em> is thrown and set to ensure that quartz never runs the job again.</p>
 <div class="code"><div class="codeContent">
 
 <p>This will force quartz to shutdown this job so that it does not run again.</p>
 
-<h3><a name="Example6-JobExceptionExample">JobExceptionExample</a></h3>
+<h3><a name="Example6-JobExceptionExample"></a>JobExceptionExample</h3>
 
 <p>The program starts by getting an instance of the Scheduler.  This is done by creating a <em>StdSchedulerFactory</em> and then using it to create a scheduler.   This will create a simple, RAM-based scheduler.</p>
 

docs/wikidocs/Examples Overview.html

 			    <td valign="top" class="pagebody">
 				    <p>Welcome to the documentation for the Quartz Example programs.   As of version 1.5, Quartz ships with 13 out-of-the-box examples that demonstrate the various features of Quartz and the Quartz API.   </p>
 
-<h2><a name="ExamplesOverview-WheretoFindtheExamples">Where to Find the Examples</a></h2>
+<h2><a name="ExamplesOverview-WheretoFindtheExamples"></a>Where to Find the Examples</h2>
 
 <p>All of the examples listed on this Wiki are part of the Quartz distribution.</p>
 
 <p>The source code for the examples are located in package <b>org.quartz.examples</b>.   Every example has its own sub-package, <b>org.quartz.examples.example1</b>, <b>org.quartz.examples.example2</b>, etc...</p>
 
 
-<h2><a name="ExamplesOverview-TheExamples">The Examples</a></h2>
+<h2><a name="ExamplesOverview-TheExamples"></a>The Examples</h2>
 
 
-<table class='confluenceTable'>
+<table class='confluenceTable'><tbody>
 <tr>
 <th class='confluenceTh'> Example </th>
 <th class='confluenceTh'> Title </th>
 <td class='confluenceTd'> Clustered Quartz </td>
 <td class='confluenceTd'> Demonstrates how Quartz can be used in a clustered environment and how Quartz can use the database to persist scheduling information</td>
 </tr>
-<tr>
-<td class='confluenceTd'> <a href="Example14.html" title="Example14">Example 14</a> </td>
-<td class='confluenceTd'> Trigger Priorites </td>
-<td class='confluenceTd'> Demonstrate how Trigger priorities can be used to manage firing order for Triggers with the same fire time</td>
-</tr>
-</table>
+</tbody></table>
 
                     			    </td>
 		    </tr>

docs/wikidocs/Executing an XWork Action using Quartz.html

+<html>
+    <head>
+        <title>Quartz 1 - 
+        Executing an XWork Action using Quartz
+         </title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <blockquote>
+<p>&nbsp;Here is a quartz Job that can be used to invoke an XWork action. You may want to play with the context maps for replicating web calls, and you must be careful with actions that try to write to the ServletResponse outputStream. Note that your <b>scheduler</b> must contain a reference to you web application <b>ServletContext</b></p></blockquote>
+<p>&nbsp;HTH</p>
+
+<p>Geoff</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> com.widgetmaker.xwork.action;
+
+<span class="code-keyword">import</span> com.opensymphony.webwork.ServletActionContext;
+<span class="code-keyword">import</span> com.opensymphony.xwork.ActionContext;
+<span class="code-keyword">import</span> com.opensymphony.xwork.ActionProxy;
+<span class="code-keyword">import</span> com.opensymphony.xwork.ActionProxyFactory;
+<span class="code-keyword">import</span> com.opensymphony.xwork.config.ConfigurationException;
+<span class="code-keyword">import</span> com.opensymphony.xwork.util.OgnlValueStack;
+<span class="code-keyword">import</span> org.apache.log4j.Logger;
+<span class="code-keyword">import</span> org.quartz.*;
+
+<span class="code-keyword">import</span> javax.servlet.ServletConfig;
+<span class="code-keyword">import</span> javax.servlet.ServletContext;
+<span class="code-keyword">import</span> java.lang.reflect.InvocationHandler;
+<span class="code-keyword">import</span> java.lang.reflect.Method;
+<span class="code-keyword">import</span> java.lang.reflect.Proxy;
+<span class="code-keyword">import</span> java.util.HashMap;
+<span class="code-keyword">import</span> java.util.Map;
+
+/**
+ * Quartz Job that will invoke an action from the XWork action
+ */
+<span class="code-keyword">public</span> class ActionQuartzJob <span class="code-keyword">implements</span> Job {
+
+    <span class="code-keyword">private</span> <span class="code-object">String</span> namespace = <span class="code-keyword">null</span>;
+    <span class="code-keyword">private</span> <span class="code-object">String</span> actionName = <span class="code-keyword">null</span>;
+
+    <span class="code-keyword">public</span> void execute(JobExecutionContext context) <span class="code-keyword">throws</span> JobExecutionException {
+        Scheduler scheduler = context.getScheduler();
+        JobDataMap jdm = context.getJobDetail().getJobDataMap();
+        namespace = (<span class="code-object">String</span>) jdm.get(<span class="code-quote">"namespace"</span>);
+        actionName = (<span class="code-object">String</span>) jdm.get(<span class="code-quote">"actionName"</span>);
+        log.info( <span class="code-quote">"Processing "</span>+getClass().getName()+<span class="code-quote">" JOB: "</span>+context.getJobDetail().getFullName()+<span class="code-quote">"  action: "</span> +namespace+<span class="code-quote">"/"</span>+actionName );
+
+        Map extraContext = <span class="code-keyword">new</span> HashMap();
+        extraContext.put(<span class="code-quote">"request"</span>, <span class="code-keyword">new</span> HashMap());
+        extraContext.put(<span class="code-quote">"session"</span>, <span class="code-keyword">new</span> HashMap());
+        extraContext.put(<span class="code-quote">"application"</span>, <span class="code-keyword">new</span> HashMap());
+        extraContext.put(<span class="code-quote">"parameters"</span>, jdm );
+        extraContext.put(ActionContext.PARAMETERS, jdm );
+
+        <span class="code-keyword">try</span> {
+            <span class="code-keyword">final</span> ServletContext sc = (ServletContext) scheduler.getContext().get(<span class="code-quote">"servletContext"</span>);
+            ServletConfig sconf = (ServletConfig) Proxy.newProxyInstance(
+                    ServletConfig.class.getClassLoader(),
+                    <span class="code-keyword">new</span> <span class="code-object">Class</span>[]{ServletConfig.class},
+                    <span class="code-keyword">new</span> InvocationHandler(){
+                <span class="code-keyword">public</span> <span class="code-object">Object</span> invoke(<span class="code-object">Object</span> proxy, Method method, <span class="code-object">Object</span>[] args) <span class="code-keyword">throws</span> Throwable {
+                    <span class="code-object">Object</span> o = <span class="code-keyword">null</span>;
+                    <span class="code-keyword">if</span>(<span class="code-quote">"getServletContext"</span>.equals(method.getName()) ) {
+                        o = sc;
+                    }
+                    <span class="code-keyword">return</span> o;
+                }
+            });
+            extraContext.put(ServletActionContext.SERVLET_CONFIG, sconf );
+        } <span class="code-keyword">catch</span> (Exception e) {
+            log.error("",e);
+        }
+
+
+
+        extraContext.put(ActionContext.VALUE_STACK,<span class="code-keyword">new</span> OgnlValueStack());
+        <span class="code-keyword">try</span> {
+            ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(namespace, actionName, extraContext);
+            proxy.execute();
+        } <span class="code-keyword">catch</span> (SchedulerException e) {
+            log.error(<span class="code-quote">"Could not access scheduler"</span>, e);
+        } <span class="code-keyword">catch</span> (ConfigurationException e) {
+            log.error(<span class="code-quote">"Could not find action"</span>, e);
+        } <span class="code-keyword">catch</span> (Exception e) {
+            log.error(<span class="code-quote">"Could not execute action"</span>, e);
+        }
+    }
+
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getNamespace() {
+        <span class="code-keyword">return</span> namespace;
+    }
+
+    <span class="code-keyword">public</span> void setNamespace(<span class="code-object">String</span> namespace) {
+        <span class="code-keyword">this</span>.namespace = namespace;
+    }
+
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getActionName() {
+        <span class="code-keyword">return</span> actionName;
+    }
+
+    <span class="code-keyword">public</span> void setActionName(<span class="code-object">String</span> actionName) {
+        <span class="code-keyword">this</span>.actionName = actionName;
+    }
+
+    <span class="code-keyword">protected</span> Logger log = Logger.getLogger(getClass());
+}</pre>
+</div></div>
+<p>&nbsp;</p>
+
+<p>&nbsp;</p>
+
+<p>Then your job configuration's datamap just needs to contain the XWork Action reference</p>
+
+<p>From My jobs.xml <a href="file:&amp;nbsp" title="Visit page outside Confluence">&#102;ile:&amp;nbsp</a>;</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java">&lt;job-data-map allows-<span class="code-keyword">transient</span>-data=<span class="code-quote">"<span class="code-keyword">true</span>"</span>&gt;
+ &lt;entry&gt;
+   &lt;key&gt;namespace&lt;/key&gt;
+   &lt;value&gt;/my/job/space&lt;/value&gt;
+  &lt;/entry&gt;
+  &lt;entry&gt;
+   &lt;key&gt;actionName&lt;/key&gt;
+   &lt;value&gt;MyQuartzJobAction&lt;/value&gt;
+  &lt;/entry&gt;
+&lt;/job-data-map&gt;</pre>
+</div></div>
+<p>&nbsp;</p>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wikidocs/FAQ.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h1><a name="FAQ-FrequentlyAskedQuestions">Frequently Asked Questions</a></h1>
+				    <h1><a name="FAQ-FrequentlyAskedQuestions"></a>Frequently Asked Questions</h1>
 
 
 <p>General Questions:</p>
 <ul>
 	<li><a href="#FAQ-jdbcPerf" title="jdbcPerf on FAQ">How do I improve the performance of JDBC-JobStore?</a></li>
 	<li><a href="#FAQ-jdbcValid" title="jdbcValid on FAQ">My DB Connections don't recover properly if the database server is restarted.</a></li>
-	<li><a href="#FAQ-oracleRAC" title="oracleRAC on FAQ">I am using Oracle RAC and seeing database performance degragation.</a></li>
 </ul>
 
 
 
 <ul>
 	<li><a href="#FAQ-cmtDead" title="cmtDead on FAQ">I'm using JobStoreCMT and I'm seeing deadlocks, what can I do?</a></li>
-	<li><a href="#FAQ-ORA-01002" title="ORA-01002 on FAQ">I'm getting the error: "Failure obtaining db row lock: ORA-01002: fetch out of sequence"</a></li>
 </ul>
 
-<p>Questions about Plugins:</p>
 
-<ul>
-	<li><a href="#FAQ-pluginHandle" title="pluginHandle on FAQ">How do I get a handle to a Quartz plugin?</a></li>
-</ul>
 
+<h3><a name="FAQ-GeneralQuestions"></a>General Questions</h3>
 
-<h3><a name="FAQ-GeneralQuestions">General Questions</a></h3>
-
-<h5><a name="FAQ-WhatisQuartz%3F">What is Quartz?  <a name="FAQ-whatQuartz"></a></a></h5>
+<h5><a name="FAQ-WhatisQuartz%3F"></a>What is Quartz?  <a name="FAQ-whatQuartz"></a></h5>
 
 <p>Quartz is a job scheduling system that can be integrated with, or used along side virtually any other software system. The term "job scheduler" seems to conjure different ideas for different people. As you read this tutorial, you should be able to get a firm idea of what we mean when we use this term, but in short, a job scheduler is a system that is responsible for executing (or notifying) other software components when a pre-determined (scheduled) time arrives.</p>
 
 
 <p>Although Quartz is extremely useful for simply running certain system processes on given schedules, the full potential of Quartz can be realized when you learn how to use it to drive the flow of your application's business processes.</p>
 
-<h5><a name="FAQ-WhatisQuartzFromaSoftwareComponentView%3F">What is Quartz - From a Software Component View? <a name="FAQ-whatComp"></a></a></h5>
+<h5><a name="FAQ-WhatisQuartzFromaSoftwareComponentView%3F"></a>What is Quartz - From a Software Component View? <a name="FAQ-whatComp"></a></h5>
 
 <p>Quartz is distributed as a small java library (.jar file) that contains all of the core Quartz functionality. The main interface (API) to this functionality is the Scheduler interface. It provides simple operations such as scheduling/unscheduling jobs, starting/stopping/pausing the scheduler.</p>
 
 
 <p>The main Quartz 'process' can be started and ran within your own application, as a stand-alone application (with an RMI interface), or within a J2EE app. server to be used as a resource by your J2EE components.</p>
 
-<h5><a name="FAQ-Whynotjustusejava.util.Timer%3F">Why not just use java.util.Timer? <a name="FAQ-notTimer"></a></a></h5>
+<h5><a name="FAQ-Whynotjustusejava.util.Timer%3F"></a>Why not just use java.util.Timer? <a name="FAQ-notTimer"></a></h5>
 
 <p>Since JDK 1.3, Java has "built-in" timer capabilities, through the java.util.Timer and java.util.TimerTask classes - why would someone use Quartz rather than these standard features?</p>
 
 
 <p>...of course to some simple applications these features may not be important, in which case it may then be the right decision not to use Quartz.</p>
 
-<h5><a name="FAQ-HowdoIbuildtheQuartzsource%3F">How do I build the Quartz source? <a name="FAQ-howBuild"></a></a></h5>
+<h5><a name="FAQ-HowdoIbuildtheQuartzsource%3F"></a>How do I build the Quartz source? <a name="FAQ-howBuild"></a></h5>
 
 <p>Although Quartz ships "pre-built" many people like to make their own alterations and/or build the latest 'non-released' version of Quartz from CVS. To do this, follow the instructions in the "README.TXT" file that ships with Quartz.</p>
 
-<h3><a name="FAQ-MiscellaneousQuestions">Miscellaneous Questions</a></h3>
+<h3><a name="FAQ-MiscellaneousQuestions"></a>Miscellaneous Questions</h3>
 
-<h5><a name="FAQ-HowmanyjobsisQuartzcapableofrunning%3F%7Banchor%3Ascale%29">How many jobs is Quartz capable of running?<a name="FAQ-scale"></a></a></h5>
+<h5><a name="FAQ-HowmanyjobsisQuartzcapableofrunning%3F%7Banchor%3Ascale%29"></a>How many jobs is Quartz capable of running? {anchor:scale)</h5>
 
 <p>This is a tough question to answer... the answer is basically "it depends".</p>
 
 <p>So here you are this far into the answer of "how many", and I still haven't given you a number <img class="emoticon" src="./icons/emoticons/wink.gif" height="20" width="20" align="absmiddle" alt="" border="0"/> And I really hate to, because of all of the variables mentioned above. So let me just say, there are installments of Quartz out there that are managing hundreds-of-thousands of Jobs and Triggers, and that at any given moment in time are executing dozens of jobs &#8211; and this excludes using load-balancing. With this in mind, most people should feel confident that they can get the performance out of Quartz that they need.</p>
 
 
-<h5><a name="FAQ-I%27mhavingissueswithusingQuartzviaRMI">I'm having issues with using Quartz via RMI <a name="FAQ-rmi"></a></a></h5>
+<h5><a name="FAQ-I%27mhavingissueswithusingQuartzviaRMI"></a>I'm having issues with using Quartz via RMI <a name="FAQ-rmi"></a></h5>
 
 <p>RMI can be a bit problematic, especially if you don't have an understanding of how class loading via RMI works. I highly recommend reading all of the JavaDOC available about RMI, and strongly suggest you read the following references, dug up by a kind Quartz user (Mike Curwen)</p>
 
 
 <blockquote><p>RMI's class loader will not download any classes from remote locations if no security manager has been set.</p></blockquote>
 
-<h3><a name="FAQ-QuestionsAboutJobs">Questions About Jobs</a></h3>
+<h3><a name="FAQ-QuestionsAboutJobs"></a>Questions About Jobs</h3>
 
-<h5><a name="FAQ-HowcanIcontroltheinstantiationofJobs%3F">How can I control the instantiation of Jobs? <a name="FAQ-jobFactory"></a></a></h5>
+<h5><a name="FAQ-HowcanIcontroltheinstantiationofJobs%3F"></a>How can I control the instantiation of Jobs? <a name="FAQ-jobFactory"></a></h5>
 
 <p>See org.quartz.spi.JobFactory and the org.quartz.Scheduler.setJobFactory(..) method.  </p>
 
 
-<h5><a name="FAQ-HowdoIkeepaJobfrombeingremovedafteritcompletes%3F">How do I keep a Job from being removed after it completes? <a name="FAQ-durable"></a></a></h5>
+<h5><a name="FAQ-HowdoIkeepaJobfrombeingremovedafteritcompletes%3F"></a>How do I keep a Job from being removed after it completes? <a name="FAQ-durable"></a></h5>