You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Deutsche Version

Example: Synchronization of multiple Job Chains (cross-over)

We have three job chains. Two of them have included parallel execution. These job chains are also synchronized in a way , that one node of a chain is waiting for the successfully ending of a node in the other job chain.

The third chain has to be started after the other chains are both ended successfully.

This requirement was implemented as follows:

  • JobChain1: JobChain-Interlink-1 with the jobs JobInterlink-1-<n> , <nh1. 1-8
  • JobChain2: JobChain-Interlink-2 with the jobs JobInterlink-2-<n> , <n>1-8
  • JobChain3: JobChain-Interlink-3 with job JobInterlink-3-1
  • There is another job chain, which generate an orders for each job chain by using the Command statement.

Generating the job chains of the requirement

Parallel executing within the job chains

The parallel executing is realized by split jobs and Sync jobs - as it is described in the example Parallel Execution in a job chain.
For the splitter job the the job /sos/jitl/JobChainSplitter in the directory ./live/sos/jitl which is part of the JobScheduler download. In the sync jobs the JAVA class com.sos.jitl.sync.JobSchedulerSynchronizeJobChainsJSAdapterClass is used.

Synchrnization of the two job chains Jobketten JobInterlink1 and JobInterlink2

According to request the state jobInterlink-2-2 starts only when the state jobInterlink-1-6 is completed successfully. Therefore we need a sync state before the job jobInterlink-2-2 and after the job jobInterlink-1-6 with the identical state name Sync_Interlink1_Interlink2.
As soon as the job jobInterlink-1-6 has finished, the synchronization is activated, the subsequent job jobInterlink-2-2 starts running and the

 Sobald der Job JobInterlink-1-6 abgeschlossen ist, wird die Sychronisation aktiv, der nachfolgende Knoten JobInterlink-2-2 startet und in der ersten Kette erreicht dieser Zweig der Parallelverarbeitung den Sync-Knoten. 

Synchronisation Start der dritten Jobkette

Die dritte Jobkette darf erst starten, wenn die beiden Vorläufer-Ketten JobInterlink1 und JobInterlink2 erfolgreich abgeschlossen wurden. Auch diese Abhängigkeit wird mit einem Sync-Job realisiert. Wir definieren den Sync_Job Sync_Interlink12_Interlink3, der zum einen ans Ende der Vorgänger-Jobketten eingefügt wird als auch in der zu startenden Jobkette als erster Knoten nach dem Kettenstart-Knoten.

Jede Synchronisation hat ihren eigenen Sync-Job!

Darstellung der Jobketten im JOE

Die Jobketten wurden unter Verwendung der Jobeditors JOE realisiert.

"Cross-Over" Diagramm

Das Diagramm der Beispiel-Jobkette (erstellt mit der Sandbox-JOE-Version).

Starter-Kette anlegen

Jede der drei Jobketten benötigt eine Order zum starten. In diesem Beispiel wird eine Starter-Jobkette angelegt, die für jede Kette einen Job enthält, der die Order erstellt.

Die Order wird über ein Kommando gesteuert, das nach am Ende des Scripts durchgeführt wird.Die zu startende Kette muß ggf. mit dem Pfad unterhalb des Live-Verzeichnisses angegeben werden

Best practices

Start- und End-Knoten verwenden

Wir empfehlen, in jeder Jobkette im ersten Knoten den Startjob /sos/jitl/JobChainStart und im letzten Knoten den Endjob /sos/jitl/JobChainEnd zu verwenden.

Konventionen für Knoten-Namen

Splitter-Knoten

Wir empfehlen, den Knoten-Namen eines Splitter-Jobs mit der Zeichenfolge split zu beginnen, zum Beispiel Split_Interlink1. Damit "weiß" der Algorithmus, der das Diagramm erstellt, dass es sich um einen Splitter-Knoten handelt und kann ihn korrekt darstellen. Den Knote-Typ "Splitter" gibt es in der Syntax der Job-Knoten nicht.

Parallele Knoten

Für die Knoten-Namen der parallel zu verarbeitenden Jobs empfehlen wir die Syntax "Knoten-Name des Splitter-Jobs" ":" "Name des Jobs", zum Beispiel split_Interlink1:Job-1-2. Damit "weiß" der Diagramm-Algorithmus, welche Knoten die direkten Nachfolger des Splitters sind und kann dies korrekt darstellen. Die Syntax des JobScheduler kennt eine Vorgänger Beziehung nicht, deshalb die hilfsweise Kennzeichnung des Vorgängers über den ersten Teil des Knoten-Namens.

Job-Knoten

Soweit möglich sollte der Name des Job-Knotens identisch sein mit dem Job-Namen (evtl. ohne Folder Namen). Wird ein Job mehrfach in einer Job-Kette verwendet, so können die Knoten-Namen durch eine angehängte Ziffer (oder Nummer) eindeutig spezifiziert werden.

Fehler-Knoten

Der Name des Fehler-Knotens sollte den Job-Namen enthalten oder identisch sein mit diesem. Damit kann bei einem Fehler im Ablauf der Jobkette sofort in JOC erkannt werden, an welcher Stelle die Jobkette abnormal beendet wurde.
Außerdem sollte der Name mit einem "!" (Ausrufezeichen) begonnen werden. Damit wird im JID eine Fehler-Status erkannt und rot markiert.

siehe auch

Downloads

Das verwendete Beispiel können Sie hier herunterladen synchronization_jobchains.zip.

  • No labels