First Job

Writing an Oddjob job.

Hello World

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!");
	}
}

To get Oddjob to run our job we need to create configuration file:

<oddjob>
  <hello class="org.oddjob.devguide.HelloWorldJob"/>
</oddjob>

And run it:

$ java -cp "run-oddjob.jar;examples/classes" org.oddjob.launch.Launcher -f examples/devguide/hello1.xml
Hello World!

Notice that to get our new class on the classpath we couldn't use the -jar option when running Oddjob. This is because -jar ignores any existing classpath. Anther way to load the class is to copy it to the opt/classes directory under Oddjob:

$ mkdir opt/classes/org
$ mkdir opt/classes/org/oddjob
$ mkdir opt/classes/org/oddjob/devguide
$ cp examples/classes/org/oddjob/devguide/HelloWorldJob.class opt/classes/org/oddjob/devguide
$ java -jar run-oddjob.jar -f examples/devguide/hello1.xml
Hello World!

We can now also load it in Oddjob Explorer:

Hello in Oddjob

Hello Rod, Jane, and Freddy

A Job is not much use if it's not configurable, so moving quickly on lets show you how to write a configurable job.

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>
  <hello class="org.oddjob.devguide.HelloPeopleJob">
    <who>
      <value value="Rod"/>
      <value value="Jane"/>       
      <value value="Freddy"/>
    </who>
  </hello>
</oddjob>

Copy the class

$ cp examples/classes/org/oddjob/devguide/HelloPeopleJob.class opt/classes/org/oddjob/devguide

And lets fire it up:

Hello People in Oddjob

A Developers Dozen

So lets take a moment to reflect on what we've got:

Not bad for a dozen lines of code.


Index Top Next