﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="scheduler.xsl" type="text/xsl"?>

<!--$Id: order.xml 3623 2005-04-20 06:53:16Z jz $-->

<description 
    title               = "Orders and Job Chains" 
    base_dir            = ""
    author              = "$Author: aa $"
    date                = "$Date: 2007-10-09 21:07:14 +0200 (Di, 09 Okt 2007) $"
>


<p>
    An order is the instruction set describing how a job chain should execute a series of jobs.
    An order can be carried out immediately or when a preconfigured event takes place.
    Example events are times of the day, days of the week or files being added to a directory.
<!--Ein Auftrag ist die Anweisung eine Job-Kette eine Reihe von Jobs auszuführen.
    Ein Auftrag kann sofort ausgeführt werden oder zu einem konfigurierbaren Ereignis,
    z.B. zu bestimmten Terminen, Wochentagen etc. oder bei Eintreffen von Dateien in einem Verzeichnis.-->
</p>

<p>
    A job chain can be seen as an assembly line on which orders are run.
    The orders are processed by the individual machines of the assembly line one after the other.
    A job comprises exactly one step in the processing of an order.
    After a job has been completed, the state of the order is changed, 
    which in turn affects the next step in the job chain.
    (For example, after completing one job, an order could be added to the queue for the next job.)
    This process will be repeated until the order reaches the end of the job chain.
<!--Eine Job-Kette ist wie ein Fließband, durch das die Aufträge laufen,
    die von einzelnen Maschinen, den Jobs, nacheinander verarbeitet werden.
    Zur Verarbeitung eines Auftrags führt ein Job genau einen Schritt aus.
    Dabei ändert sich der Zustand des Auftrags, der über die nächste Stelle in der Job-Kette entscheidet,
    bis das Ende der Job-Kette erreicht ist.-->
</p>

<p>
    An order has an identifier, which is valid within that job chain, and a readable title.
    The order also has a status, which changes after the processing of each job.
    An order can contain parameters, which are handed on to all the jobs in the job chain.
    It can also carry a load - i.e. an individual XML document, which it makes available to the jobs.
<!--Innerhalb der Job-Kette hat ein Auftrag eine Kennung, die ihn identifiziert sowie einen lesbaren Titel. 
    Er hat einen Zustand, der sich nach jeder Verarbeitung durch einen Job ändert.
    Ein Auftrag kann Parameter beinhalten, die an alle Jobs einer Job-Kette 
    weitergegeben werden und er kann eine Nutzlast tragen, d.h. ein individuelles
    XML Dokument, das er den Jobs zur Verfügung stellt.-->
</p>
<p>
    Orders allow jobs and job chains to be reused:
    an order can be allocated to a single job chain and 
    define the time at which the job chain starts execution.
    This configuration is often used, 
    when each job is only used in a single job chain and the parameters are set for each job.
<!--Aufträge ermöglichen die Wiederverwendbarkeit von Jobs und Job-Ketten: Einer Job-Kette kann 
    exakt ein Auftrag zugeordnet sein und den Zeitpunkt von deren Ausführung definieren.
    Diese Konfiguration wird häufig verwendet, wenn jeder Job nur in einer einzigen
    Job-Kette auftritt und die Parametrisierung pro Job erfolgt.-->
</p>
<p>
    It is also possible to configure more than one order for the same job chain.
    In this case, the orders can be given different parameters, 
    which are then handed over to the jobs, 
    so that the same jobs can be used for different purposes.
<!--Es können allerdings auch mehrere Aufträge für dieselbe Job-Kette konfiguriert werden,
    in diesem Fall können den Aufträgen unterschiedliche Parameter mitgegeben werden,
    die an die Jobs durchgereicht werden, so dass dieselben Jobs für unterschiedliche
    Zwecke eingesetzt werden können.-->
</p>
<p>
    See the <scheduler_method class="Order"/> class.
<!--Siehe die Klasse <scheduler_method class="Order"/>.-->
</p>
<p>
    Orders can also be transferred using TCP and the <scheduler_element name="add_order"/> command.
<!--Aufträge können auch per TCP mit dem Kommando <scheduler_element name="add_order"/> übergeben werden.-->
</p>
<p>
    Further, the Job Scheduler <scheduler_a href="http.xml">HTML interface </scheduler_a> 
    provides operations with which orders can be manually started.
<!--Darüber hinaus bietet die <scheduler_a href="http.xml">HTML-Oberfläche</scheduler_a> des
    Job Schedulers Operationen zum manuellen Starten von Aufträgen.-->
</p>



<h2>Job Chains</h2>
<!--<h2>Job-Ketten</h2>-->

<p>
    Job chains define a series of jobs, whose execution is activated by an order.
    Job chains specify job dependencies for the successful and incorrect execution of the jobs.
    They can be restarted - that is, the Job Scheduler saves the state of an order within a job chain
    in a database. Should the processing of an order be broken off at a particular job in a job chain,
    on restarting, the Job Scheduler is able to restore the order at the job within the job chain,
    at which processing was broken off.
<!--Job-Ketten definieren eine Abfolge von Jobs, deren Ausführung durch einen Auftrag ausgelöst wird.
    Sie definieren Job-Abhängigkeiten für die erfolgreiche und fehlerhafte Ausführung von Jobs.
    Sie sind wiederanlauffähig, d.h. der Job Scheduler speichert den Zustand eines Auftrags innerhalb
    einer Job-Kette persistent in einer Datenbank und restauriert einen Auftrag nach dem 
    Wiederanlaufen innerhalb der Job-Kette für den Job, an dem die Verarbeitung abgebrochen wurde.-->
</p>
<p>
    Job chains are described in the <scheduler_method class="Job_chain"/> and
    <scheduler_method class="Job_chain_node"/> classes.
<!--Die Job-Ketten sind bei den Klassen <scheduler_method class="Job_chain"/> und
    <scheduler_method class="Job_chain_node"/> beschrieben.-->
</p>
<p>
    A job is made order controlled using the <scheduler_element name="job" attribute="order" value="yes"/> setting.
<!--Einen auftragsgesteuerten Job definieren Sie mit <scheduler_element name="job" attribute="order" value="yes"/>.-->
</p>
<p>
    In order that a job can be used in a job chain, it should be defined using
    <scheduler_element name="job" attribute="order" value="yes"/>.
    If this is not done, the jobs can be separately called up as standalone jobs.
<!--Zur Verwendung innerhalb von Job-Ketten müssen Jobs mit
    <scheduler_element name="job" attribute="order" value="yes"/> definiert sein.
    Andernfalls sind sie als standalone Jobs separat aufrufbar.-->
</p>



<h2>Order Queue and Tasks</h2>
<!--<h2>Auftragswarteschlange und Tasks</h2>-->

<p>
    Every job which is order controlled has an order queue in which 
    orders which are to be processed are collected.
    The Job Scheduler starts processing an order as soon as it is added to the queue and 
    the <scheduler_element name="run_time"/> element allows it to start.
    Should there be a number of orders in the job queue and the job allows multiple tasks, 
    (<scheduler_element name="job" attribute="tasks"/>), 
    then the Job Scheduler will process the tasks in parallel.
<!--Jeder auftragsgesteuerte Job hat eine Auftragswarteschlange, 
    die die Aufträge aufnimmt, die der Job verarbeiten soll.
    Sobald ein Auftrag in der Warteschlange ist und die <scheduler_element name="run_time"/> dies zulässt,
    startet der Job Scheduler eine Task.
    Wenn mehrere Aufträge in der Warteschlange sind und der Job mehrere Tasks erlaubt
    (<scheduler_element name="job" attribute="tasks"/>), 
    dann startet der Job Scheduler mehrere Tasks.-->
</p>
<p>
    The Job Scheduler hands an order over to a task by storing the order in the 
    <scheduler_method class="Task" property="order"/> method and calling up the 
    <scheduler_method class="Job_impl" method="spooler_process"/> method.
    The <code>spooler_process()</code> method ends with either a
    <code>true</code> or <code>false</code> result, which, in turn,
     determines whether or not an order is processed by the next job in the job chain 
    (see <scheduler_method class="Job_chain"/>).
<!--Der Job Scheduler übergibt einen Auftrag einer Task, 
    indem er in <scheduler_method class="Task" property="order"/> den Auftrag ablegt und
    <scheduler_method class="Job_impl" method="spooler_process"/> aufruft.
    <code>spooler_process()</code> endet mit <code>true</code> oder <code>false</code>, 
    was über die nächste Stelle in der Job-Kette entscheidet (s. <scheduler_method class="Job_chain"/>).-->
</p>


<h2>Recognition of Double Orders</h2>
<!--<h2>Erkennung doppelter Aufträge</h2>-->
<p>
    When an order is added to the job queue, the Job Scheduler checks whether an order with the same <code>id</code> 
    has already been entered (only, however, when the order <code>id</code> has been set).
    Should the order queue or job chain already have an order with the same <code>id</code>,
    then the already existing order will be overwritten.
    Should the new order have a different priority to the original, 
    then the scheduler will take this into account.
<!--Wenn ein Auftrag hinzugefügt wird, prüft der Scheduler, ob ein Auftrag mit derselben <code>id</code> 
    schon eingetragen ist (nur, wenn <code>id</code> gesetzt ist).
    Hat die Auftragswarteschlange oder die Job-Kette bereits einen Auftrag mit derselben <code>id</code>,
    dann wird er ersetzt. 
    Wenn der neue Auftrag eine andere Priorität hat, wird diese vom Scheduler berücksichtigt.-->
</p>


    <h2>Directory Monitoring with File Orders</h2>
<!--<h2>Verzeichnisüberwachung mit Dateiaufträgen</h2>-->
    <p>
        See <scheduler_a href="file_orders.xml"/>
        for information about orders which are created from the files in a directory.
    <!--Zu Aufträgen, die aus Dateien eines Verzeichnisses entstehen,
        siehe <scheduler_a href="file_orders.xml"/>.-->
    </p>
    
    
    
<h2>Priority</h2>
<!--<h2>Priorität</h2>-->

<p>
    Order priority is set using <scheduler_method class="Order" property="priority"/>.
    Orders with a higher priority are put by the Job Scheduler at the front of the queue.
<!--Aufträge mit höherer Priorität <scheduler_method class="Order" property="priority"/> 
    stellt der Job Scheduler an den Anfang der Warteschlange.-->
</p>



<h2>Ending Tasks</h2>
<!--<h2>Wann enden die Tasks?</h2>-->

<p>
    The Job Scheduler lets tasks exist as long as the <scheduler_element name="run_time"/> parameter is valid.
    They then have the status <code>running_waiting_for_order</code>.
<!--Wenn kein Auftrag mehr zu verarbeiten ist, lässt der Job Scheduler die Tasks stehen, 
    solange die <scheduler_element name="run_time"/> gilt.
    Sie sind dann im Zustand <code>running_waiting_for_order</code>.-->
</p>

<p>
    The maximum time which the Job Scheduler will wait before a task is automatically ended is set using 
    <scheduler_element name="job" attribute="idle_timeout" value="duration"/>.
    This time should be set to a value such as 30 sec., so that resources can be set free.
<!--Mit <scheduler_element name="job" attribute="idle_timeout" value="dauer"/> können Sie eine Frist bestimmen,
    nach der der Scheduler eine wartende Task automatisch beendet. 
    Diese Frist sollte auf z.B. 30 Sekunden eingestellt werden, 
    um während der Verarbeitungspausen Ressourcen freizugeben.-->
</p>

<p>
    
    Should the Job Scheduler require to start a task for which no more process class resources are available, 
    then it automatically looks for another task of the same process class with the 
    <code>running_waiting_for_order</code> status, which it then terminates.
<!--Wenn der Job Scheduler für einen anderen Job
    eine Task starten will, 
    die Prozess-Klasse aber erschöpft ist, 
    dann beendet er automatisch eine Task mit derselben Prozessklasse, 
    die im Zustand <code>running_waiting_for_order</code> ist.-->
</p>

<p>
    Tasks can be terminated using 
    <scheduler_method class="Task" method="end"/>,
    <scheduler_element name="kill_task"/> and 
    <scheduler_element name="modify_job" attribute="cmd" value="end"/>.
<!--Sie können eine Task mit <scheduler_method class="Task" method="end"/>,
    <scheduler_element name="kill_task"/> und 
    <scheduler_element name="modify_job" attribute="cmd" value="end"/>
    beenden.-->
</p>
<p>
    A task ends when <scheduler_method class="Job_impl" method="spooler_process"/>
    is implemented. 
    The order is then given the successor state.
<!--Die Task endet, wenn <scheduler_method class="Job_impl" method="spooler_process"/>
    nicht implementiert ist. Der Auftrag wird dennoch in den Folgezustand versetzt.-->
</p>



<h2>Accelerated Order Processing</h2>
<!--<h2>Beschleunigung des Auftragsdurchlaufs</h2>-->

<p>
    Jobs which are order controlled are prioritized.
    The <scheduler_element name="job" attribute="priority"/> element contains an arbitrary value which defines the position
    of orders of the same status in the order queue. This value must not exceed the limit defined by
    the <scheduler_element name="config" attribute="priority_max"/> attribute.
<!--Auftragsgesteuerte Jobs haben eine eigene Priorisierung. 
    Die Einstellung <scheduler_element name="job" attribute="priority"/> 
    kann hier nicht verwendet werden, sie wirkt nicht.-->
</p>

<p>
    The Job Scheduler gives orders a higher priority the further advanced they are in the job chain.
    This helps reduce congestion and means that jobs which are started first will be more quickly completed.
    It is as though the machines at the end of an assembly line were running more quickly than those at the beginning.
<!--Aufträge, die in der Job-Kette weiter fortgeschritten sind, sollen bevorzugt verarbeitet werden.
    Damit werden Staus vermieden und die ersten Aufträge werden schneller abgeschlossen.
    Das erreicht der Job Scheduler durch Bevorzugung der Jobs, 
    die weiter am Ende der Job-Kette stehen als andere.
    Die Maschinen am Ende des Fließbands laufen flotter als die am Anfang.-->
</p>

<p>
    <scheduler_keyword keyword="Priority"/>
    Jobs which are order controlled have, in general, priority over jobs which are not order controlled.
<!--<scheduler_keyword keyword="Priorität"/>
    Auftragsgesteuerte Jobs haben Vorrang vor nicht auftragsgesteuerten Jobs.
-->
</p>



<h2>Database</h2>
<!--<h2>Datenbank</h2>-->

<p>
    More information about the longer term storage of order queues and 
    the order history is to be found in the section on 
    <a href="datenbank.xml">databases</a>.
<!--Zur persistenten Speicherung der Auftragswarteschlangen und 
    zur Auftragshistorie lesen Sie <a href="datenbank.xml">hier</a>.-->
</p>



</description>

