Beispiele für Sync-Objekte

Dieses Thema beschreibt zwei typische Anwendungsbereiche von Sync-Objekten.

Beispiel: Sie wollen den Zugriff auf diese Datenbank steuern

In diesem Beispiel wollen Sie Folgendes sicherstellen:

  • Es dürfen maximal 3 Aufgaben gleichzeitig auf die Datenbank zugreifen.
  • Der exklusive Zugriff auf die Datenbank soll ebenfalls möglich sein.
  1. Erstellen Sie ein Sync-Objekt mit den folgenden zwei Zuständen:

    • EXCLUSIVE
    • SHARE
  2. Verknüpfen Sie diese Zustände mit folgenden Werten:

    • EXCLUSIVE: 0 – die Datenbank kann nur von einer Aufgabe verwendet werden
    • SHARE: 3 - bis zu 3 Aufgaben können gleichzeitig auf die Datenbank zugreifen

    Die Wertnummern werden nicht explizit in das Sync-Objekt geschrieben, sondern werden integriert, sobald Aktionen definiert sind (siehe weiter unten in diesem Topic).

    XXX

  3. Definieren Sie im Abschnitt Aktionsdefinition folgende 4 Aktionen.

    • USE

      Normaler Zugriff auf die Datenbank.

      Diese Aktion kann ausgelöst werden, wenn sich das Sync-Objekt im Zustand SHARE befindet und sein Wert kleiner als 3 ist. Sie belässt den bestehenden Zustand, erhöht aber den Wert um eins. Diese Aktion ist damit für normale Aufgaben gedacht, welche die Datenbank nutzen.

      Die Aufgaben prüfen, ob eine Mehrfachverwendung der Datenbank möglich ist. Sie prüfen auch, ob der Wert unter drei liegt, da nur drei Aufgaben gleichzeitig auf die Datenbank zugreifen dürfen. Der Wert wird um eins heraufgesetzt, weil nun eine weitere Aufgabe mit der Datenbank arbeitet.

    • USE_EXCLUSIVE

      Diese Aktion kann ausgelöst werden, wenn sich das Sync-Objekt im Zustand SHARE befindet und sein Wert 0 ist. Diese Aktion ist also nur möglich, wenn keine andere Aufgabe mit der Datenbank arbeitet.

    • RELEASE

      Freigabe nach einem normalen (gemeinsamen) Zugriff.

      Eine normale Aufgabe hat mit der Datenbank gearbeitet und wird nun beendet. Dabei bleibt der bestehende Zustand erhalten, der Wert aber wird um eins vermindert.

    • RELEASE

      Freigabe nach einem exklusiven Zugriff.

      Eine Aufgabe, welche die Datenbank exklusiv verwendet hat, beendet sich und macht diese wieder mehrfach benutzbar.

    XXX

    Die Reihenfolge, in der Sie die Aktionen definieren, ist wichtig. Die erste Aktion ist der Startzustand des Sync-Objekts, wenn es auf ein ausführbares Objekt angewendet wird.

  4. Weisen Sie das Sync-Objekt einem ausführbaren Objekt zu.

    In unserem Beispiel weisen wir das Sync-Objekt einem Job zu. Bei der Verarbeitung dieses Jobs soll der Zugriff auf die Datenbank auch für andere Aufgaben möglich sein. Wir wählen also die Aktion USE:

    XXX

  5. Folgendes geschieht:

    1. Beim Start führt der Job die Aktion USE aus.
    2. Der Job prüft, ob die Datenbank derzeit mehrfach benutzbar ist, und wie viele Aufgaben mit ihr arbeiten. Sind es weniger als drei, kann der Job gestartet werden.
    3. Arbeiten bereits drei Aufgaben mit der Datenbank, wird die unter "Else" definierte Aktion ausgeführt. In diesem Fall wartet der Job, bis sich eine der Aufgaben beendet.
    4. Wenn der Job an der Reihe ist und sich nach dem Zugriff auf die Datenbank entweder erfolgreich beendet oder abbricht, wird die Aktion RELEASE ausgeführt.

Beispiel: Sie möchten die Ausführung von zwei Jobs in zwei verschiedenen Workflows synchronisieren

Zwei Prozesse in Ihrer Organisation sind vollkommen unabhängig voneinander. Sie haben zwei Workflows, die ebenfalls unabhängig voneinander laufen, erstellt, um sie zu automatisieren. Diese sind WORKFLOW_A und WORKFLOW_B.

Workflow A hat zwei Jobs, JOB_A1 und JOB_A2. Workflow B hat zwei Jobs, JOB_B1 und JOB_B2.

Die Jobs können nicht gleichzeitig laufen. Sie müssen einer nach dem anderen im jeweiligen Workflows ausgeführt werden.

WORKFLOW_A muss beendet werden, bevor WORKFLOW_B starten kann. Das bedeutet, dass JOB_B2 nicht starten kann, bevor JOB_A1 beendet wurde.

  1. Erstellen Sie das SYNC-Objekt.

    Das Objekt EXAMPLE_STATE SYNC ordnet den Status von JOB_A1 zu und enthält zwei Zustände:

    • DONE (die Verarbeitung wurde bereits beendet)
    • READY (Verarbeitung kann durchgeführt werden)

    XXX

    Ausführbare Objekte, denen dieses Objekt zugewiesen wurde, können vordefinierte Aktionen auslösen. In unserem Beispiel verwenden wir keine Werte, sondern definieren die folgenden Aktionen:

    • SET_READY

      Wenn das Sync-Objekt den Status DONE hat, wird diese Aktion ausgelöst. Dabei wird die Aktion auf den Status READY gesetzt.

      Diese Aktion kann daher nur ausgeführt werden, wenn eine Verarbeitung beendet wurde.

    • SET_DONE

      Wenn das Sync-Objekt den Status READY hat, wird diese Aktion ausgelöst. Dabei wird die Aktion auf den Status DONE gesetzt.

      Diese Aktion kann daher nur ausgeführt werden, wenn eine Bereitschaft zur Verarbeitung besteht.

  2. Weisen Sie das SYNC-Objekt JOB_A1 zu.

    Dieser Job gehört zu WORKFLOW_A. Er hat keine START-Aktion. Er löst jedoch beim Beenden die SET_DONE-Aktion im Sync-Objekt aus. Diese bewirkt, dass der Zustand DONE (Verarbeitung beendet) gesetzt wird. Voraussetzung dafür ist aber, dass der Zustand READY (Zur Verarbeitung bereit) besteht.

  3. Weisen Sie das SYNC-Objekt JOB_B2 zu.

    Dieser Job gehört zu WORKFLOW_B2. Er startet mit dem Sync-Objekt SET_READY. Diese Aktion kann aber nur ausgeführt werden, wenn der Status auf DONE gesetzt ist. Dies kann nur der Fall sein, wenn JOB_A1 beendet wurde. Diese Aktion setzt gleichzeitig den Status READY (Zur Verarbeitung bereit).

  4. Führen Sie die Workflows aus und beobachten Sie das Ergebnis.

    • WORKFLOW_A und WORKFLOW_B werden gleichzeitig ausgeführt. Deren Status ist ACTIVE.
    • JOB_A2 wartet darauf, dass JOB_A1 abgeschlossen wird. Das ist die ganz normale Abfolge im Workflow.
    • JOB_A1 wird ausgeführt. Sein Status ist ACTIVE.
    • JOB_B2 wartet darauf, dass sich der Status des Sync-Objekts auf DONE ändert. Da JOB_A1 aber noch läuft, hat das Sync-Objekt den Status READY. Erst mit dem Beenden von JOB_A1 ändert sich der Status auf DONE. Dies ist der Fall, wenn JOB_2 beginnt.

Siehe auch: