2016-11-04 3 views
1

Ich arbeite mit der Camunda-Engine auf einem JBoss-Server. Ich suche einen Weg, um benutzerdefinierten Code auszuführen, wenn ein neues (Version von) BPMN-Diagramm bereitgestellt wurde.Camunda Engine - Ausführen von benutzerdefinierten Code auf neue Bereitstellung

Was ich will:

  1. Add/Upload neuer Prozess
  2. Run benutzerdefinierten Code automatisch
  3. Bereitstellen neuer Prozess durch Motor

besteht ein Hörer oder so etwas wie dieses, die ausgeführt wird Wenn eine neue Bereitstellung erkannt wurde?

Vielen Dank für Ihre Hilfe!

Antwort

3

Was Sie hier verwenden müssen, ist ein "BPMN Parse Listener".

https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/java/org/camunda/bpm/engine/impl/bpmn/parser/BpmnParseListener.java

Camunda liefert ein schönes Beispiel dafür, wie ein Parse Zuhörer Setup hier:

https://github.com/camunda/camunda-bpm-examples/tree/master/process-engine-plugin/bpmn-parse-listener

Die ursprüngliche Absicht von Parse Handlers wurde automatisch Aufgabe oder die Ausführung Zuhörer zum Prozessmodell hinzufügen . Warum tust du das? Ein Beispiel ist, wenn Sie automatisch möchten, dass alle Benutzer eine E-Mail-Benachrichtigung erhalten, wenn ihnen eine Aufgabe zugewiesen wird (ein wirklich häufiger Anwendungsfall). Das Problem ist, dass die Modellierung dieses Prozesses das Prozessdiagramm durcheinander bringt. Also ... verwenden wir einen ParseListener, um das Verhalten automatisch zu injizieren.

Nun, wie hilft das Ihrem Anwendungsfall?

Die Antwort ist einfach. Sie erhalten Zugriff auf den Modellbereitstellungsvorgang. Jedes Mal, wenn ein neues Modell bereitgestellt wird, wird das BPMN "analysiert" und alle registrierten ParseListeners werden ausgelöst.

In Ihrem Fall würden Sie in die "parseProcess()" -Methode binden und Ihren benutzerdefinierten Code ausführen.

Ich würde empfehlen, Sie einen Service-Aufruf verwenden und die benutzerdefinierte Logik externalisieren, so dass der Aufruf an die Logik und die Ausführung der Logik abstrahiert werden, aber das liegt an Ihnen.

Während ein ungewöhnlicher Anwendungsfall, ist dies eigentlich ein sehr netter Fall für BpmnParseListeners.

Hoffe, das hilft. Greg

+0

Das funktioniert für mich. Vielen Dank! Ich habe die Klasse 'org.camunda.bpm.engine.impl.bpmn.parser.AbstractBpmnParseListener' verwendet, die eine leere Implementierung der Schnittstelle darstellt. – Fabi755

Verwandte Themen