Table of Contents | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
This example shows a simple method to control job starts using time and file-based events. The logic behind this example is of a time event AND a file event.
Use this link to download the files: Process File Example files.
Unpack the zip file in the JobScheudler live folder, where you will find the following JobScheduler objects:
- a job chain (
ProcessFile
)
...
- an order (
ProcessFile1
)
...
- a dummy job (
changeme
) that symbolises the file processing.
You will also find two jobs in the "sos
" sub-folder
...
- :
JobChainStart
...
JobChainEnd
.
as well as two further jobs
...
- in the "
jitl
" sub-folder: DeleteFile
ExistsFile
.
The basic logic in this example is of a time event AND a file event.The example order will start time event(s) are set using the RunTime for the ProcessFile1
order. In the example this order will start once a day at 12:30. This can be changed as required and can be made cyclic if required.. In XML the run_time
settings looks like:
Code Block | ||
---|---|---|
| ||
<run_time let_run="no">
<period single_start="12:30"/>
</run_time>
|
The file whose presence is required (in this case c:\temp\ProcessFileTest.dat
) is set as a parameter in the ProcessFile1
order:
Code Block | ||
---|---|---|
| ||
<params >
<param name="file" value="c:\temp\ProcessFileTest.dat"/>
</params>
|
The "trick" lies in the ExistsFile
job, which checks whether a file is present.
If the file is not present then this job will be restarted every minute up to a maximum of 30 times. If no file is found the order will then end in error. If a file is found, JobScheduler will continue to process the job chain will continue to be processed..
<!--In the example the this means:
- the (dummy)
changeme job
will be executed - the "
DeleteFile
" job will delete theProcessFileTest.dat
file - the "
JobChainEnd
" job will be executed.-->
The XML for ExistsFile
job is:
Code Block | ||
---|---|---|
| ||
<?xml version="1.0" encoding="ISO-8859-1"?>
<job title="Check and Wait for a file or files" order="yes" stop_on_error="no" name="ExistsFile">
<settings >
<log_level ><![CDATA[debug9]]></log_level>
</settings>
<description >
<include file="jobs/JobSchedulerExistsFile.xml"/>
</description>
<params />
<script language="java" java_class="sos.scheduler.file.JobSchedulerExistsFile"/>
<delay_order_after_setback setback_count="10" is_maximum="no" delay="00:01:01"/>
<delay_order_after_setback setback_count="30" is_maximum="yes" delay="0"/>
<run_time />
</job>
|
This "polling" effect is realised using "setbacks". These are defined for both the ProcessFile
job chain and for the ExistsFile
job chain as shown in the next two JOE screen shots:
...
- Nodes in the "Process File" job chain showing the settings for the error handling and the "
ExistsFile
" job setbacks.
- SetBacks for the "ExistsFile" job showing the delay settings.
As the ExistsFile
job can also start job chains, this can could be carried out in two steps - which is perhaps better for testing. :
- First of all a job chain, which only consists of the
ExistsFile
job and then - a second job chain, which is started by the
ExistsFile
job, as soon as a file (or all files) are found. An order can then be started for each file: these orders then being carried out in parallel if required.