Ich habe in Activiti einen Prozess ausgeführt, der nur aus Serviceaufgaben besteht. Der Prozess läuft lange und in einigen Fällen möchte ich ihn auf halbem Wege beenden. Prozess gestartet wird mitactiviti - Laufende Prozessinstanz beenden
ProcessInstance pi = runtimeService.startProcessInstanceById(
processDefinitionId, executionParameters);
Vom activiti forum können Prozesse durch
Aufruf beendetvoid deleteProcessInstance(String processInstanceId, String deleteReason);
auf runtimeService
.
Das Problem ist, dass die startProcessInstanceById
Methode nur zurückkehrt, nachdem die Ausführung abgeschlossen ist. Also bekomme ich die processInstance
nicht, wenn der Prozess beendet ist.
Allerdings habe ich den Code debuggen und ich bin in der Lage, die processInstanceId
in der Implementierung von JavaDeleate#execute()
Methode zu finden.
Jetzt, wenn ich runtimeService.deleteProcessInstance(processInstanceId, deleteReason)
Methode aus einem anderen Thread aufrufen, bekomme ich ActivitiObjectNotFoundException
, dass die angegebene processInstanceId existiert nicht. Wenn die processInstance ausgeführt wird, gibt das Aufrufen von runtimeService.createProcessInstanceQuery().list()
außerdem eine leere Liste zurück, obwohl der Prozess ausgeführt wird.
Martin hat hier die richtige Antwort. Verwenden Sie einen Parse-Handler, um jedem Service-Task automatisch einen Listener hinzuzufügen, der die Instanz auf der Aktivitätsgrenze beendet (entweder beim Beenden oder beim Erstellen von Ereignissen). Sie werden nicht in der Lage sein, die REST-API oder Standard-Java-Prozessinstanz zu verwenden, um Aufrufe zu beenden oder zu löschen, da Sie niemals mit Ihrem "Durchgehenden Prozess" in die Datenbank gelangen. –