Home >> Miscellaneous
A very simple example using Quartz as a scheduler in a web application
that is deployed onto Apache Tomcat web server.
Quartz has a Servlet for initialization of scheduler and it can be loaded
while web server startup time by setting load-on-startup tag in web.xml
file of the web application.
In this example I shall be showing various pieces of code/files to come up
/assemble those into a working example for running a JOB at some pre-defined
or pre-configured time or with some re-occuring triggers.
So we may have to start with a Job and a Trigger, both having same group,
as defined in the related job definition XML file such as shown below:
example_jobs.xml
....
....
<quartz>
<job>
<job-detail>
<name>example_job</name>
<group>example_group</group>
<job-class>example.jobs.ExampleJob</job-class>
</job-detail>
<trigger>
<simple>
<name>example_trigger</name>
<group>example_group</group>
<job-name>example_job</job-name>
<job-group>example_group</job-group>
<start-time>2010-05-07 9:35:00 pm</start-time>
</simple>
</trigger>
</job>
</quartz>
....
....
|
As you might have noticed quartz tag is having job tag and trigger
tag within it. Job and Trigger name and group are to be defined.
I have given same name for the group for Job and Trigger.
Job class is having a custom user defined class with public no-argument
constructor, and this class implements Job interface from the Quartz framework.
In this example trigger is a simple type with the start time as some predefined
time for testing this example.
The Job class file is a dummy job with no task other than printing some
text on system console, this class file is as shown below:
ExampleJob.java
package example.jobs;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class ExampleJob implements Job {
public ExampleJob() {
System.out.println("This job constructor called...");
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("inside execute method of example job");
}
}
|
I have defined the Quartz specific properties file as quartz.properties
...
...
org.quartz.scheduler.instanceName = ExampleScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = jobs/example_jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
...
...
|
You may like to refer detail documentations from Quartz web site for knowing
various properties to be used for achiving desired functionality.
So atleast we should have a scheduler instance name with instance id
can be AUTO generated, a simple thread pool with some thread count.
There is a Job Initialization Plugin used as job intializer, that can
use a file name, in this case it is example_jobs.xml file.
And a provision for fail if this file not found.
This web application will not be having any UI interface , so the
Quartz specific servlet will not require any servlet mapping tag,
as shown below the WEB.XML file:
<web-app>
<servlet>
<servlet-name>quartz-loader-servlet</servlet-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
|
After placing all the desired JAR file from the Quartz version 1.3.2,
in the lib folder of this example, when web server started, I observed
two lines printed out on console as mentioned in the Example JOB file
in the constructor and the execute methods.
One interesting issue I encountered while working on this example and
how I resolved it, is discussed below:
When I used the standard DOCTYPE definition from Quartz Framework
with the DTD file as the following URL:
http://www.quartzscheduler.org/dtd/job_scheduling_data_1_0.dtd
in the JOB XML file, I encounted an exception while web server
starting up, so I changed it to only "job_scheduling_data_1_0.dtd"
and placed this dtd file in the TOMCAT bin folder. This resolved
the exception at server startup and the ExampleScheduler started
working as expected..
Any person having any other solution to this issue, please share
with me by droping me an email @ usingframeworks @ gmail dot com.
If anything missed out , please let me know at
techienjoy at yahoo . com
|
|
|
|
|
|
|
|
|
| Android ListView Example : |
Example on Android ListView
explained with a very simple scenario
whereby showing folder and files with
structure and appropriate screens
captured and shown.
|
|
|
|
|
|
|
|
|
|
|
| Android ListView Example : |
Example on Android ListView and
explained with a very simple scenario
and article with appropriate screens
captured and shown.
|
|
|
|
| Android ListView Example : |
Example on Android List View
explained with a very simple scenario
and article with appropriate screens
captured and shown.
|
|
|
|
|
| Android Sensors Example : |
Example on Android Sensors Listed and
explained with a very simple scenario
and article with appropriate screens
captured and shown.
|
|
|
|
|
|
|
|
|
|
|
|
| Android Tab View Example : |
Example on Android Tab View
explained with a very simple scenario
and appropriate screens captured and shown.
|
|
|
|
|
|
|
|
| Android Gallery Example : |
Example on Android Gallery View
explained with a very simple scenario
and appropriate screens captured and shown.
|
|
|
|
|
|
|
|
| Android Examples : |
List of ANDROid examples
with source code and output
screens captured and shown.
|
|
| Google GWT Example : |
Example using GWT and some design patterns and various
ways of implementing this example.
|
|
|
|
|
|
|