Workflow- und Aktivitäts-Verträge - AWS Flow Framework für Java

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Workflow- und Aktivitäts-Verträge

Java-Schnittstellen werden zum Deklarieren der Signaturen der Workflows und Aktivitäten verwendet. Die Schnittstelle bildet den Vertrag zwischen der Implementierung des Workflows (oder der Aktivität) und dem Client dieses Workflows (oder der Aktivität). Ein Workflow-Typ MyWorkflow wird beispielsweise mithilfe einer Schnittstelle definiert, die mit der @Workflow-Anmerkung versehen ist:

@Workflow @WorkflowRegistrationOptions( defaultExecutionStartToCloseTimeoutSeconds = 60, defaultTaskStartToCloseTimeoutSeconds = 10) public interface MyWorkflow { @Execute(version = "1.0") void startMyWF(int a, String b); @Signal void signal1(int a, int b, String c); @GetState MyWorkflowState getState(); }

Der Vertrag hat keine implementierungsspezifischen Einstellungen. Diese Nutzung der implementierungsneutralen Verträge ermöglicht es, dass Client von der Implementierung entkoppelt werden, und bietet dadurch die Flexibilität, die Implementierungsdetails zu ändern, ohne den Client zu brechen. Umgekehrt können Sie den Client auch ändern, ohne zu nötigen, dass Änderungen am Workflow oder der Aktivität verbraucht werden. Beispielsweise kann der Client so geändert werden, dass er eine Aktivität asynchron unter Verwendung von Promises (Promise<T>) aufruft, ohne eine Änderung an der Aktivitätsimplementierung zu erfordern. In ähnlicher Weise kann die Aktivitätsimplementierung so geändert werden, dass sie asynchron abgeschlossen wird, z. B. von einer Person, die eine E-Mail sendet, ohne dass die Clients der Aktivität geändert werden müssen.

Im Beispiel oben enthält die Workflow-Instance MyWorkflow eine Methode, startMyWF, für das Starten einer neuen Ausführung. Diese Methode wird mit der @Execute-Anmerkung versehen und muss einen Rückgabetyp von void oder Promise<> haben. In einer gegebenen Workflow-Schnittstelle kann maximal eine Methode mit dieser Anmerkung versehen werden. Diese Methode ist der Eintrittspunkt der Workflow-Logik und das Framework ruft diese Methode auf, um die Workflow-Logik auszuführen, wenn eine Entscheidungsaufgabe empfangen wird.

Die Workflow-Schnittstelle definiert auch die Signale, die an den Workflow gesendet werden können. Die Signalmethode wird aufgerufen, wenn ein Signal mit einem passenden Namen von der Workflow-Ausführung empfangen wird. Beispielsweise deklariert die MyWorkflow-Schnittstelle eine Signalmethode, signal1, mit der Anmerkung @Signal versehen.

Die @Signal-Anmerkung ist auf Signalmethoden erforderlich. Der Rückgabetyp einer Signalmethode muss void sein. Eine Workflow-Schnittstelle kann null oder mehrere Signalmethoden in ihr definiert haben. Sie können eine Workflow-Schnittstelle ohne eine @Execute-Methode deklarieren und einige @Signal-Methoden zum Generieren von Clients deklarieren, die ihre Ausführung nicht starten, aber Signal an laufende Ausführungen senden können.

Methoden, die mit den Anmerkungen @Execute und @Signal versehen sind, können eine beliebige Anzahl an Parametern jeden Typ haben, abgesehen von Promise<T> oder seinen Derivaten. Dadurch können Sie stark typisierte Eingaben beim Start und während der Ausführung an eine Workflow-Ausführung übergeben. Der Rückgabetyp der @Execute-Methode muss void oder Promise<> sein.

Zudem können Sie auch eine Methode in der Workflow-Schnittstelle deklarieren, um den aktuellen Zustand einer Workflow-Ausführung zu melden, zum Beispiel die getState-Methode im vorherigen Beispiel. Dieser Zustand ist nicht der gesamte Anwendungszustand des Workflows. Die vorgesehene Nutzung dieser Funktion ist, die Speicherung von bis zu 32 KB an Daten zuzulassen, um den aktuellen Status der Ausführung anzugeben. In einem Bestellvorgangs-Workflow können Sie auch eine Zeichenfolge speichern, die angibt, dass die Bestellung eingegangen, verarbeitet oder storniert wurde. Diese Methode wird jedes Mal, wenn eine Entscheidungsaufgabe abgeschlossen wurde, vom Framework aufgerufen, um den aktuellen Zustand zu erhalten. Der Zustand wird im Amazon Simple Workflow Service (Amazon SWF) gespeichert und kann mithilfe des generierten externen Clients abgerufen werden. Auf diese Weise können Sie den aktuellen Zustand einer Workflow-Ausführung prüfen. Mit @GetState versehene Methoden dürfen keine Argumente akzeptieren und dürfen nicht den Rückgabetyp void haben. Sie können jeden Typ, der ihren Anforderungen entspricht, von dieser Methode zurückgeben. Im Beispiel oben wird ein Objekt MyWorkflowState (siehe Definition unten) von der Methode zurückgegeben, die verwendet wird, um einen Zeichenfolgenzustand und einen numerischen Prozentabschluss zu speichern. Diese Methode soll einen schreibgeschützten Zugriff auf das Workflow-Implementierungsobjekt durchführen und wird synchron aufgerufen, wodurch die Verwendung von asynchronen Operationen, wie das Aufrufen von Methoden mit der Anmerkung @Asynchronous nicht mehr zulässig ist. In einer Workflow-Schnittstelle kann maximal eine Methode mit dieser Anmerkung @GetState versehen werden.

public class MyWorkflowState { public String status; public int percentComplete; }

Gleichermaßen wird eine Reihe von Aktivitäten mit einer Schnittstelle mit der Anmerkung @Activities definiert. Jede Methode in der Schnittstelle entspricht einer Aktivität — zum Beispiel:

@Activities(version = "1.0") @ActivityRegistrationOptions( defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 3600) public interface MyActivities { // Overrides values from annotation found on the interface @ActivityRegistrationOptions(description = "This is a sample activity", defaultTaskScheduleToStartTimeoutSeconds = 100, defaultTaskStartToCloseTimeoutSeconds = 60) int activity1(); void activity2(int a); }

Über die Schnittstelle können Sie eine Reihe von verwandten Aktivitäten gruppieren. Sie können eine beliebige Anzahl von Aktivitäten innerhalb einer Aktivitäten-Schnittstelle definieren und Sie können so viele Aktivitäten-Schnittstellen definieren wie Sie möchten. Ähnlich wie die Methoden @Execute und @Signal können Aktivitätsmethoden eine beliebige Anzahl an Argumenten jeden Typs akzeptieren, abgesehen von Promise<T> oder seinen Derivaten. Der Rückgabetyp einer Aktivität darf nicht Promise<T> oder seine Derivate sein.