Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
outlinh1. true
outlinh1. true
1printablefalse
2stylh1. none
3indent20px

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
languagehtml/xml

 <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
languagehtml/xml

 <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 the ProcessFileTest.dat file
  • the "JobChainEnd" job will be executed.-->

The XML for ExistsFile job is:

Code Block
languagehtml/xml

<?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:

Image Removed

Image Removed

...

Image Added

  • Nodes in the "Process File" job chain showing the settings for the error handling and the "ExistsFile" job setbacks.

Image Added

  • 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.