Oddjob looks for a descriptor file on the classpath. A descriptor file isn't necessary
but if it finds one it will use it to when configuring jobs.
The descriptor file name is META-INF/arooa.xml
.
Here's a descriptor that allows the job we saw in the previous section to be created without any dependency on Oddjob:
<arooa:descriptor xmlns:arooa="http://rgordon.co.uk/oddjob/arooa"> <components> <arooa:bean-def element="my-job" className="org.oddjob.devguide.NoAnnotationsInJob"> <properties> <arooa:property name="file" type="ATTRIBUTE"/> <arooa:property name="child" type="COMPONENT"/> </properties> <annotations> <arooa:annotation name="org.oddjob.arooa.life.Initialised" method="init"/> <arooa:annotation name="org.oddjob.arooa.life.Configured" method="configure"/> <arooa:annotation name="org.oddjob.arooa.life.Destroy" method="destroy"/> <arooa:annotation name="org.oddjob.framework.adapt.Run" method="go"/> <arooa:annotation name="org.oddjob.framework.adapt.Stop" method="halt"/> <arooa:annotation name="org.oddjob.framework.adapt.SoftReset" method="reset"/> <arooa:annotation name="org.oddjob.framework.adapt.HardReset" method="reset"/> </annotations> </arooa:bean-def> </components> </arooa:descriptor>
Here's the Job without Annotations:
package org.oddjob.devguide; import java.io.File; import java.util.ArrayList; import java.util.List; public class NoAnnotationsInJob { public File file; public final List<Object> children = new ArrayList<>(); public void go() { System.out.println("Running"); for (Object child : children) { if (child instanceof Runnable) { ((Runnable) child).run(); } } } public void halt() { System.out.println("Stopping"); } public void reset() { System.out.println("Resetting"); } public void init() { System.out.println("Initialising we know we have children " + children ); } public void configure() { System.out.println("Configured - we now know that file is " + file); } public void destroy() { System.out.println("Destroying - we still have " + file + " and " + children + " but not for long."); } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public void setChild(int index, Object child) { if (child == null) { this.children.remove(index); } else { this.children.add(index, child); } } @Override public String toString() { return "AnnotationsInJob"; } }
And its configuration:
<oddjob id="oddjob"> <job> <my-job file="${oddjob.file}"> <child> <echo>I'm a child job</echo> </child> </my-job> </job> </oddjob>