Laufzeitinformationen

Für Aktivitäten, die im Rahmen der Anwendung durchgeführt werden (im Gegensatz beispielsweise zu Weiterleitungs- und Prozessaktivitäten, die nur von der Workflow-Engine durchgeführt werden), ist eine klare transaktionsorientierte Abgrenzung zwischen Engine- und Anwendungscode erforderlich. Es ist zudem sinnvoll, asynchrone Aufrufe zwischen der Workflow-Engine und der Anwendung zu haben (z. B. sollte ein Benutzer bei Übergängen zur nächsten Workflowaktivität nicht warten müssen, bevor ihm in der Benutzerschnittstelle die Kontrolle wieder zurückgegeben wird).

Aus diesem Grund sind drei spezielle Funktionen in einer Worfklowaktivität vorhanden: start(), execute() und complete(). Nach dem Abschluss einer Aktivität in der Workflowprozessinstanz ruft die Workflow-Engine zum Fortsetzen des Prozesses die entsprechende Funktion auf. Diese Funktion bewertet die ausgehenden Übergänge von der Aktivität, um den richtigen Weg auszuwählen.

Für jede Aktivität, die verarbeitet werden soll, wird die entsprechende start()-Funktion aufgerufen. Die entsprechenden Daten der Aktivitätsinstanz werden dann eingerichtet. Wenn die Aktivität direkt ohne JMS-Messaging (die Java Message Service-API (JMS) ist Bestandteil der Java EE) ausgeführt werden soll (eine Weiterleitungsaktivität wird immer direkt ausgeführt, da keine anwendungsbezogene Arbeit erforderlich ist), wird an dieser Stelle die execute()-Methode aufgerufen. Andernfalls wird zum Ausführen der angegebenen Aktivität (d. h. eine automatische Aktivität) eine JMS-Nachricht gesendet. Der Nachrichtenhandler des Workflows löst den Prozess und die in der Nachricht angegebene Aktivität auf und ruft für die Aktivität die execute()-Funktion auf.

Nachdem der Anwendungscode aufgerufen wurde, um die von der Aktivität angegebene Arbeit auszuführen, wird eine weitere Nachricht zum Abschließen der Aktivität gesendet. Der Nachrichtenhandler des Workflows löst den Prozess und die Aktivität in der Nachricht erneut auf und ruft die complete-Funktion für die Aktivität auf. Nachdem die Aktivität als abgeschlossen markiert wurde, wird die Funktion zum Fortsetzen des Prozesses erneut aufgerufen, um die zu verfolgenden Übergänge von der abgeschlossenen Aktivität aufzulösen. Dann wird der Prozess fortgesetzt.