Also the Cascade job isn't the best choice here - it's designed for asynchronous triggering of the next job, but as none of the child jobs (sql, echo, check) complete asynchronously sequential is a better choice.
Rob.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Glad it works - as an aside, where you have the JoinJob is a good example of where it is better to use a CascadeJob. Join hogs a thread, where as Cascade is event driven. I would have:
here is my oddjob tree:
the xml:
<oddjob>
<job>
<scheduling:timer id="timer" name="Timer" xmlns:scheduling="http://rgordon.co.uk/oddjob/scheduling">
<schedule>
<schedules:now xmlns:schedules="http://rgordon.co.uk/oddjob/schedules"/>
</schedule>
<job>
<sequential>
<jobs>
<variables id="localhostConnection">
<dbConnection>
<connection driver="com.mysql.jdbc.Driver" password="root" url="jdbc:mysql://10.21.160.12:3306/test" username="root">
<classLoader>
<url-class-loader>
<files>
<file file="E:\source\oddjob\myTest\mysql-connector-java-5.0.8-bin.jar"/>
</files>
</url-class-loader>
</classLoader>
</connection>
</dbConnection>
</variables>
<scheduling:retry id="ifNotDone">
<schedule>
<schedules:interval interval="00:00:5" xmlns:schedules="http://rgordon.co.uk/oddjob/schedules"/>
</schedule>
<job>
<state:cascade xmlns:state="http://rgordon.co.uk/oddjob/state">
<jobs>
<sql id="test">
<connection>
<value value="${localhostConnection.dbConnection}"/>
</connection>
<input>
<buffer><![CDATA]></buffer>
</input>
<results>
<sql-results-bean/>
</results>
</sql>
<echo><![CDATA]></echo>
<check eq="DONE" id="checkDone" value="${test.results.row.DONE}"/>
</jobs>
</state:cascade>
</job>
</scheduling:retry>
</jobs>
</sequential>
</job>
</scheduling:timer>
</job>
</oddjob>
the execute resulte is
===================================================================================
what I want to do is when then CheckJob is failed, the Retry resheduling it`s all child job,such as:Sql Echo CheckJob .what should I do?
Hi - http://rgordon.co.uk/oddjob/reference/org/oddjob/state/Resets.html is what you want.
Here's the XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<oddjob>
<job>
<scheduling:timer id="timer" name="Timer" xmlns:scheduling="http://rgordon.co.uk/oddjob/scheduling">
<schedule>
<schedules:now xmlns:schedules="http://rgordon.co.uk/oddjob/schedules"/>
</schedule>
<job>
<sequential>
<jobs>
<variables id="localhostConnection">
<dbConnection>
<connection driver="com.mysql.jdbc.Driver" password="root" url="jdbc:mysql://10.21.160.12:3306/test" username="root">
<classLoader>
<url-class-loader>
<files>
<file file="E:\source\oddjob\myTest\mysql-connector-java-5.0.8-bin.jar"/>
</files>
</url-class-loader>
</classLoader>
</connection>
</dbConnection>
</variables>
<scheduling:retry id="ifNotDone">
<schedule>
<schedules:interval interval="00:00:5" xmlns:schedules="http://rgordon.co.uk/oddjob/schedules"/>
</schedule>
<job>
<state:resets harden="true" name="Hard Reset Whole Child Sequence" xmlns:state="http://rgordon.co.uk/oddjob/state">
<job>
<sequential>
<jobs>
<sql id="test">
<connection>
<value value="${localhostConnection.dbConnection}"/>
</connection>
<input>
<buffer><![CDATA[select DONE
from test where name='1']]></buffer>
</input>
<results>
<sql-results-bean/>
</results>
</sql>
<echo><![CDATA[the state is
${test.results.row.DONE}]]></echo>
<check eq="DONE" id="checkDone" value="${test.results.row.DONE}"/>
</jobs>
</sequential>
</job>
</state:resets>
</job>
</scheduling:retry>
</jobs>
</sequential>
</job>
</scheduling:timer>
</job>
</oddjob>
Also the Cascade job isn't the best choice here - it's designed for asynchronous triggering of the next job, but as none of the child jobs (sql, echo, check) complete asynchronously sequential is a better choice.
Rob.
thanks !
According to your suggestion,I set my oddjob like this :
Glad it works - as an aside, where you have the JoinJob is a good example of where it is better to use a CascadeJob. Join hogs a thread, where as Cascade is event driven. I would have:
-oddjob
-timer
-sequential
variables
variables
-cascade
retry etc…
echo
But unless you have many join jobs hogging a thread won't be a problem.