Tasks
Einführung in Tasks in ConSol CM
Mit Tasks können Skripte asynchron ausgeführt werden, sodass die Skriptausführung nicht mit Benutzeraktionen im Web Client oder CM/Track verknüpft ist. Tasks eignen sich daher für allgemeine Operationen und für Operationen, deren Verarbeitung so lange dauert, dass es bei einer Ausführung als reguläres Skript zu Timeouts kommen würde.
Konzepte, Begriffe und Definitionen
Konzept |
Andere Begriffe |
Definition |
---|---|---|
Task |
|
Asynchrone Ausführung eines Skripts |
Task-Skript |
|
Skript, in dem die von einem Task ausgeführten Operationen und das Verhalten des Task bei Fehlern oder Abbruch implementiert sind |
Task executor |
|
Modul, das die Datenbank nach neuen geplanten Tasks durchsucht und diese ausführt |
Task descriptor |
|
Internes Objekt, in dem Informationen über einen Task gespeichert sind |
Execution specification |
|
Internes Objekt, in dem Informationen über das Startdatum und die Startzeit des Task gespeichert sind; wenn nicht angegeben, wird der Task sofort gestartet |
Zweck und Verwendung
Tasks ermöglichen asynchrone Operationen. Sie können entweder manuell in der Web Admin Suite oder automatisch in einem Skript erstellt werden. In beiden Fällen basiert der Task auf einem Skript des Typs Task, in dem die Logik der durchzuführenden Operationen implementiert ist. Tasks können für Operationen verwendet werden, die sich nicht auf spezifische Benutzeraktionen im Web Client oder CM/Track beziehen, wie zum Beispiel allgemeine Wartungsarbeiten. Zusätzlich ermöglichen Tasks die Durchführung von Operationen, deren Verarbeitung lange dauert, sodass sie einen Timeout verursachen würden, wenn sie als reguläres Skript ausgeführt würden.
Mit Tasks können Objekte endgültig aus der ConSol CM-Datenbank gelöscht werden. Die durch einen Task ausgeführten Aktionen können nicht rückgängig gemacht werden. Tasks, die Massenoperationen durchführen, können die System-Performance schwer beeinträchtigen.
Verfügbare Einstellungen für die Task-Ausführung
Die folgenden Einstellungen sind für die Task-Ausführung im Allgemeinen verfügbar:
-
Transaktions-Timeout
Die System-Property cmas-core-server, transaction.timeout.minutes legt den Transaktions-Timeout für Tasks fest. Eine Ausführung des Tasks muss abgeschlossen sein, bevor der Timeout eintritt. Wenn die von dem Task durchzuführenden Operationen länger dauern, müssen Sie die Verarbeitung aufteilen und den Task wiederholen, siehe Wiederholen eines Tasks. -
Thread-Pool
Die System-Property cmas-core-server, number.of.tasks legt die Größe des Thread-Pools fest, d. h. wie viele Tasks parallel ausgeführt werden können. -
Zeit zwischen Ausführungen
Die System-Property cmas-core-server, task.execution.interval.seconds legt die Zeit zwischen der Ausführung von zwei Tasks fest. -
Node-ID (nur für Cluster relevant)
Die System-Property cmas-core-server, task.execution.node.id legt fest, auf welchem Cluster-Node die Tasks ausgeführt werden.
Grundlegende Aufgaben
Sie müssen folgende Schritte ausführen, um Tasks in ConSol CM zu nutzen:
- Erstellen Sie ein Task-Skript, in dem die Logik der durchzuführenden Operationen implementiert ist, siehe Erstellen eines Task-Skripts.
- Erstellen Sie einen Task, die das Task-Skript ausführt, siehe Erstellen eines Tasks.
- Sie können den Fortschritt des Task in der Task-Liste nachverfolgen, siehe Nachverfolgen der Task-Ausführung.
Erstellen eines Task-Skripts
Erstellen Sie auf der Seite Skripte der Web Admin Suite ein Skript des Typs Task (siehe Skripte). Das Skript muss die Logik der durchzuführenden Operationen implementieren.
Das Task-Skript muss folgende vier Methoden implementieren:
- onInitialize()
Code, der nach der Erstellung des Tasks ausgeführt wird - onExecute()
Code, der nach dem Start des Tasks ausgeführt wird - onError()
Code, der ausgeführt wird, wenn bei der Task-Ausführung ein Fehler auftritt - onCancel()
Code, der ausgeführt wird, wenn der Task abgebrochen wird
Erstellen eines Tasks
Es gibt zwei Möglichkeiten zur Erstellung eines Tasks:
- Manuell einen Task für die sofortige Ausführung erstellen:
- Öffnen Sie die Seite Tasks der Web Admin Suite.
- Klicken Sie auf den Button Task planen.
- Wählen Sie ein Task-Skript aus und planen Sie den Task. Dazu stehen folgende Optionen zur Verfügung:
Jetzt: Der Task wird sofort gestartet.
Einmalig: Der Task wird am ausgewählten Datum zur ausgewählten Zeit gestartet.
Regelmäßig: Der Task wird wiederholt gemäß der definierten Planung ausgeführt. Dies kann täglich, wöchentlich oder monatlich zu einer oder mehreren definierten Zeiten sein, oder ein minütliches Intervall.
Wenn mehr als eine Ausführungszeit, ein Wochentag oder ein Tag des Monats ausgewählt ist, wird für jede Option zur Planung der Ausführung ein eigener Task erstellt. Bei der minütlichen Planung gibt es nur einen Task, der automatisch neu geplant wird.
Das Task-Name wird mit dem Skriptnamen vorbefüllt. Sie können ihn bei Bedarf ändern.
Im Abschnitt Fehlerbehandlung können Sie die Checkbox Administrator nach Fehler benachrichtigen markieren, wenn der Administrator eine E-Mail erhalten soll, falls der Task fehlschlägt. Regelmäßige Tasks können Sie in dieser Situation auch automatisch deaktiveren.
- Klicken Sie auf den Button Task starten.
Sie können einen Task auch erstellen, indem Sie auf den Button Task ausführen klicken, der für Task-Skripte auf der Seite Skripte der Web Admin Suite angezeigt wird.
- Task in einem anderen Skript (Workflow-Aktivitäts-, Aktions- oder E-Mail-Skript) erstellen:
Öffnen Sie das Skript in der Web Admin Suite.
Fügen Sie den Code zum Erstellen eines Tasks hinzu (Ersetzen Sie „taskScript.groovy“ durch das in Erstellen eines Task-Skripts erstellte Skript):
GroovyTask groovyTask = new GroovyTask();
groovyTask.setStaticScript(scriptSourceService.getByName("taskScript.groovy"));
taskDescriptor = taskExecutionService.schedule(groovyTask, "task");
Nachverfolgen der Task-Ausführung
Die Task-Liste enthält alle aktiven Tasks im System. Für jeden Task werden folgende Informationen angezeigt:
- Task-Name
Name der Task, bei der Task-Erstellung eingegeben oder im Task-Skript festgelegt - Skriptname
Name des Task-Skripts - Fortschritt
Fortschrittsanzeige, die den Fortschritt der Task-Ausführung zeigt - Erstellt am
Datum und Zeit der Erstellung des Tasks - Nächste Ausführung
Datum und Zeit des Beginns der Ausführung des Tasks. Das ist normalerweise der gleiche Zeitpunkt wie in Erstellt am, außer wenn im Task-Skript ein anderes Ausführungsdatum definiert wurde, siehe Wiederholen eines Tasks und Tasks. - Status
Status des Tasks. Dies kann Warten auf Ausführung, Wird ausgeführt, Gesperrt oder Wird angehalten sein. - Planungsintervall
Intervall, in dem der Task ausgeführt wird. Dies kann Täglich, Wöchentlich, Monatlich oder Einmalig sein. - Planungsoption
Bei der Planung ausgewählter Tag und Zeit für die Task-Ausführung - Letzte Ausführung
Datum und Zeit der letzten Ausführung eines regelmäßigen Tasks - Letzte Dauer (Sek.)
Dauer in Sekunden der letzten Ausführung eines regelmäßigen Tasks
Sie können die Tabelle nach Task-Namen oder -Status durchsuchen oder einen Filter anwenden, um Tasks mit einem bestimmten Planungsintervall oder Status anzuzeigen.
Regelmäßige Tasks mit mehreren geplanten Ausführungen sind standardmäßig gruppiert. Das bedeutet, dass nur die nächste Ausführung angezeigt wird. Die Spalte Planungsoption enthält die Anzahl der geplanten Ausführungen und ein Uhr-Icon zum Anzeigen aller Planungsoptionen. Die Spalte Nächste Ausführung am zeigt die Daten für die nächste Ausführung und Sie können mit der Maus über das Uhr-Icon fahren, um die alle Ausführungen zu sehen. Wenn Sie jede geplante Ausführung in ihrer eigenen Zeile anzeigen möchten, z. B. um ein einzelne Ausführung abzubrechen oder zu deaktivieren, können Sie die Markierung der Checkbox Nur nächste Ausführungen entfernen.
Erweiterte Aufgaben
Abbrechen eines Tasks
Es gibt zwei Möglichkeiten, um einen laufenden Tasks abzubrechen:
-
Suchen Sie den Task auf der Seite Tasks der Web Admin Suite und klicken Sie in der Zeile des Tasks auf den Button Abbrechen.
-
Halten Sie den Task in einem anderen Skript an. In diesem Fall benötigen Sie die Descriptor-ID des Tasks, der angehalten werden soll.
Verwenden Sie folgenden Code, um die Descriptor-ID bei der Task-Erstellung zu speichern:
GroovyTask groovyTask = new GroovyTask();
groovyTask.setStaticScript(scriptSourceService.getByName("taskScript.groovy"));
taskDescriptor = taskExecutionService.schedule(groovyTask, "task");
def myTaskDescriptorId = groovyTask.getId()
//save this ID
Sie können den Task mit folgendem Code abbrechen:
taskExecutionService.cancel(myTaskDescriptorId)
Abgebrochene Tasks werden entfernt und können nicht fortgesetzt werden.
Deaktivieren eines Tasks
Sie können einen Task mit dem Status Warten auf Ausführung, der für die korrekte Funktionsweise des Systems erforderlich ist, aber momentan nicht ausgeführt werden soll, deaktivieren, indem Sie auf das Icon Deaktivieren klicken. Deaktivierte Tasks verbleiben in der Task-Liste und haben den Status Deaktiviert. Sie können durch Klicken auf das Icon Aktivieren wieder ausgeführt werden.
Beim Planen eines regelmäßigen Tasks können Sie die Option Task nach Fehler deaktivieren auswählen, um den Task zu deaktivieren, wenn bei der Task-Ausführung ein Fehler auftritt. Dies betrifft nur die geplante Ausführung, bei der der Fehler auftritt.
Wiederholen eines Tasks
Es gibt zwei Szenarien, in denen Sie einen Task möglicherweise wiederholen möchten:
- Während der Task-Ausführung ist ein Fehler aufgetreten.
- Der Task verarbeitet eine große Menge an Daten und Sie möchten die Verarbeitung stückeln.
In beiden Fällen können Sie den Task mit der folgenden Methode wiederholen:
return new ExecutionSpecification().setRetryRequested(true);
Wenn Sie ein bestimmtes Datum oder eine bestimmte Zeit, zu der der Task wiederholt werden soll, setzen möchten, können Sie folgende Methode verwenden:
return new ExecutionSpecification().setRetryRequested(true).setExecutionDate(new Date(new Date().getTime() + 15000));
Fügen Sie diesen Code im Task-Skript am Ende der Methode onExecute() ein, wenn Sie den Task in der regulären Ausführung wiederholen möchten. Wenn Sie den Task wiederholen möchten, wenn ein Fehler aufgetreten ist, fügen Sie den Code in die Methode onError() ein.
Verwenden der Kontextreferenz
Wenn Sie Tasks aus anderen Skripten erstellen, können Sie mithilfe der Kontextreferenz feststellen, welches Skript den Task erstellt hat. Sie setzen beim Erstellen des Tasks eine Kontextreferenz, die im Task-Skript abgerufen werden kann, um unterschiedliches Verhalten je nach Ursprungsskript zu implementieren.
- Setzen Sie die Kontextreferenz im Ursprungsskript, z. B. einem Workflow-Skript:
GroovyTask groovyTask = new GroovyTask();
groovyTask.setStaticScript(scriptSourceService.getByName("taskScript.groovy"));
groovyTask.setContextReference("context reference")
- Rufen Sie die Kontextreferenz im Task-Skript ab:
taskDescriptor.getContextReference()