2017-04-19 4 views
2

Entsprechend dem Dokument von Camunda (https://docs.camunda.org/manual/latest/user-guide/process-applications/process-application-event-listeners/) kann ein "globaler" Event-Handler (ExecutionListener oder TaskListener) zum ProcessApplication hinzugefügt werden.

Nichtsdestotrotz konnte ich keinen Weg finden, einen ähnlichen ("globalen") Ereignishandler zur Laufzeit hinzuzufügen. Diese Funktion war in Activiti unter Verwendung der Methode addEventListener des Motors RuntimeService (https://www.activiti.org/javadocs/org/activiti/engine/RuntimeService.html#addEventListener-org.activiti.engine.delegate.event.ActivitiEventListener-) vorhanden, ist aber in Camundas RuntimeService nicht mehr vorhanden.

Wie könnte ich einen "globalen" Event-Handler zur Laufzeit hinzufügen?
Hinweis: ProcessApplication, zu dem die Ereignishandler hinzugefügt werden, kann nicht geändert werden, da ich die Handler aus einer anderen Bibliothek hinzufügen möchte.

Vielen Dank an alle,Hinzufügen eines Ereignishandlers (ExecutionListener oder TaskListener) zur Laufzeit in Camunda

Antwort

3

Die Gemeinde Erweiterung camunda-bpm-reactor Sie einen EventBus registrieren kann, die Ereignisse jedes Mal, wenn ein Zuhörer würde ausgelöst propgates. Sie können dann Listener für diese Ereignisse registrieren. Daher sind bpmn und Listener-Code zur Laufzeit gekoppelt.

@CamundaSelector(type = "userTask", event = TaskListener.EVENTNAME_CREATE) 
public class TaskCreateListener implements TaskListener { 

    public TaskCreateListener(EventBus eventBus) { 
    eventBus.register(this); 
    } 

    @Override 
    public void notify(DelegateTask delegateTask) { 
     ... 
    } 
} 
+0

Großartig! Genau das, was ich brauchte –

2

Ich denke, die Activiti Methode addEventListener hinzugefügt wurde nach Camunda Activiti gegabelt, das ist, warum die Methode auf Camunda des RuntimeService nicht verfügbar ist.

Wie in der Dokumentation erwähnt, könnten Sie eine Prozessanwendung definieren, die den globalen Listener für Ausführung/Aufgabe zurückgibt. Um eine Prozessanwendung zur Laufzeit zu definieren, können Sie die Methode EmbeddedProcessApplication und ManagementService#registerProcessApplication verwenden.

Siehe folgendes Beispiel:

EmbeddedProcessApplication processApplication = new EmbeddedProcessApplication() { 
    public ExecutionListener getExecutionListener() { 
    return new ExecutionListener() { 
     public void notify(DelegateExecution execution) throws Exception { 
     // do your stuff  
     }    
    }; 
    } 
}; 

// register app so that it is notified about events 
managementService.registerProcessApplication(deploymentId, processApplication.getReference()); 
+0

Aber wie mache ich, wenn die Prozessanwendung bereits definiert und initialisiert ist? Kann ich die processApplication ändern, um die Handler hinzuzufügen? Ich möchte die Handler aus einer Bibliothek zu einer bestehenden App hinzufügen ... –

Verwandte Themen