Writing an Oddjob job.
Writing a job for Oddjob is really really easy. How easy? This easy:
package org.oddjob.devguide; public class HelloWorldJob implements Runnable { public void run() { System.out.println("Hello World!"); } }
Oddjob will run any java.lang.Runnable
or
java.util.concurrent.Callable
as is. No need to learn a
new API!
To get Oddjob to run our job we need to create a configuration file:
<oddjob> <job> <bean class="org.oddjob.devguide.HelloWorldJob"/> </job> </oddjob>
And run it:
$ java -jar run-oddjob.jar -cp examples/classes -f examples/devguide/hello1.xml
Hello World!
Notice that the classpath option -cp is after the -jar. This is Oddjobs option, not Java's. This is because -jar ignores any existing classpath and any classpath option.
We can now also load it in Oddjob Explorer (but we need still need the classpath).
$ java -jar run-oddjob.jar -cp examples/classes
Open the file and we get:
A Job is not much use if it's not configurable, so moving quickly on lets show you how to write a configurable job.
package org.oddjob.devguide; public class HelloPeopleJob implements Runnable { private String[] who; public void setWho(String[] who) { this.who = who; } public String[] getWho() { return who; } public void run() { for (int i = 0; i < who.length; ++i) { System.out.println("Hello " + who[i] + "!"); } } public String toString() { return "Hello People"; } }
A quick configuration:
<oddjob> <job> <bean class="org.oddjob.devguide.HelloPeopleJob"> <who> <list> <values> <value value="Rod"/> <value value="Jane"/> <value value="Freddy"/> </values> </list> </who> </bean> </job> </oddjob>
And fire it up as before:
You might have noticed that this job also has a nice name. That's
because I've sneakily given our new job a toString()
method, and that's what explorer uses to label the job.
So lets take a moment to reflect on what we've got:
Not bad for a dozen lines of code.