Zschimmer GmbH Impressum und Kontakt

Scheduler     Erste Seite

  XML     API     Register


logo

Sperren

Sperren im Job Scheduler verhindern die Ausführung eines Jobs, solange eine bestimmte Sperre von einem oder mehreren anderen Job(s) belegt ist. Sperren stehen für Jobs in Job-Ketten und für einzelne Jobs zur Verfügung. Wartet ein Job auf die Freigabe einer Sperre, wird er automatisch gestartet, sobald die Sperre freigegeben wird.

Ein beispielhaftes Problem: Jobs benutzen eine Datenbank. Ein weiterer Job aber schaltet die Datenbank um. Er darf das nur tun, wenn die ersten Jobs nicht laufen.

Konfiguration

Damit Jobs Sperren belegen können, müssen die Sperren zunächst bekanntgemacht werden.

<config>
    <locks>
        <lock name="lock_name"/>
        <lock name="lock_name2"/>
        …
    </locks>

Beim einzelnen Job werden die anzuwendenden Sperren deklariert

<job>
    <lock.use lock="lock_name"/>
    <lock.use lock="lock_name2"/>

Sperren können exklusiv und nicht exklusiv verwendet werden. Bei nicht exklusiver Verwendung einer Sperre kann die Zahl der nicht exklusiven Belegungen begrenzt werden. Die Voreinstellung für die Verwendung einer Sperre ist die exklusive Belegung

Wenn eine Sperre verwendet wird, die nicht deklariert wurde, startet der Job Scheduler den Job nicht.

Achtung: Bei Namen von Sperren wird Groß- und Kleinschreibung unterschieden!

Die Belegung einer Sperre beginnt mit dem Start einer Task und endet mit ihr. Eine exklusive Sperre erlaubt nur eine Task.

Exklusives Sperren

Eine Task, die eine Sperre belegt, lässt keine andere Task zu, die dieselbe Sperre beansprucht.

Deklaration:

<config>
    <locks>
        <lock name="lock_name"/>
        …
    </locks>

Anwendung:

<job>
    <lock.use lock="lock_name"/>

Nicht exklusives Sperren

Eine Sperre kann nicht-exklusiv von mehreren Jobs belegt werden.

Die Zahl der nicht-exklusiven Belegungen lässt sich begrenzen.

<lock name="lock_name" max_non_exclusive="2"/>

<job name="my_database_job">
    <lock.use lock="lock_name" exclusive="no"/> …</job>

    <job name="my_other_database_job">
    <lock.use lock="lock_name" exclusive="no"/> …</job>

    <job name="switch_database">
    <lock.use lock="lock_name"/> …</job>

Die ersten beiden Jobs können gleichzeitig ablaufen, aber keiner der ersten beiden Jobs kann mit dem dritten zusammen ablaufen, der die Sperre exklusiv beansprucht.

Sperren in Job-Ketten

Da Sperren von Tasks belegt werden, können sie in Job-Ketten verwendet werden, wenn die Tasks der einzelnen Job-Knoten sich nach Ausführung beenden. Dazu muss das Attribut idle_timeout idealerweise auf 0 gesetzt sein.

 


Software- und Organisations-Service GmbH

Zuletzt geändert von jz,ur, 2006-04-21