Björn Scheppler, 27.8.2019
Dieses Maven-Projekt kann genutzt werden als Startpunkt für eigene auf Camunda beruhende Projekte. Enthalten sind folgende Funktionalitäten:
- Spring Boot 2.1.7 konfiguriert für Tomcat
- Camunda Spring Boot Starter 3.3.1
- Camunda Process Engine, REST API und Webapps (Tasklist, Cockpit, Admin) in der Version 7.11.0 (Enterprise Edition)
- H2-Datenbank-Unterstützung (von Camunda Engine benötigt)
- Spring Boot Starter Mail für den Email-Versand und zugehörige Klasse EmailService
- "Sinnvolle" Grundkonfiguration in application.properties für Camunda, Datenbank, Tomcat sowie in mail(-template).properties für E-Mail (Das Template dient als Vorlage für das nicht in Github hochgeladene mail.properties)
- Ein Beispielprozess (Verarbeitung von Tweet-Anfragen) bestehend aus:
- BPMN-Modell mit User Tasks, Service Tasks, Business Rules Tasks und angehefteten Zeitereignissen
- HTML-Formulare als Implementation für die User Tasks/das Startformular
- Eine JavaDelegate-Klasse als Implementation für den Service Task "Mitarbeiter benachrichtigen" (per Mail) (NotifyEmployeeDelegate)
- Eine JavaDelegate-Klasse als Implementation für den Service Task "Benutzer-Informationen auslesen" (GetUserInformationDelegate), welche wiederum eine Service-Klasse aufruft (UserService), welche wiederum einen REST-Service aufruft (siehe separates Projekt: https://github.com/zhaw-gpi/rest-service-template)
- Für die Implementation für den Service Task "Tweet senden" ist eines der folgenden separaten Github-Projekte zu nutzen:
- External Task Client Mocking Template (https://github.com/zhaw-gpi/external-task-client-mocking-template)
- External Task Client Spring Boot Template (https://github.com/zhaw-gpi/external-task-client-spring-boot-template)
- Ein DMN-Diagramm mit einer Entscheidungstabelle zum automatischen Ablehnen einer Anfrage, wenn sie verbotene Wörter enthält
- Ein Beispielprozess (Zeit-gesteurtes Tweet senden) bestehend aus einem BPMN-Modell mit:
- einem Timer-Start-Ereignis, damit nach dem Deployment alle 10 Sekunden eine neue Instanz gestartet wird. Dies damit man zum Zeigen der Worker-Funktionalität nicht jedes Mal in der Task List einen Prozess durchspielen muss.
- einem Script Task, welcher per JavaScript die aktuelle Uhrzeit als zu veröffentlichender Tweet-Content aufbereitet
- einem Service Task, der 1:1 identisch ist mit demjenigen aus dem anderen Beispielprozess, um die Aufgabe von einem External Task Client ausführen zu lassen.
- Das Topic heisst hier bewusst anders (SendTweetTime), weil hier nur das Mocking-Projekt darauf reagieren soll, da sonst rasch das Twitter-Konto gesperrt würde bei so vielen ähnlichen Posts.
Die aktuelle Version basiert vor allem auf dem Get Started-Beispiel von Camunda 7.9 (https://docs.camunda.org/get-started), verwendet aber auch das Know-How aus dem Umzugsprojekt des Herbstsemesters 2017.
- Wenn man die Enterprise Edition von Camunda verwenden will, benötigt man die Zugangsdaten zum Nexus Repository und eine gültige Lizenz. Wie man diese "installiert", steht in den Kommentaren im pom.xml.
- Erstmalig oder bei Problemen ein
mvn clean install
(Cmd) durchführen - Bei Änderungen am POM-File oder bei (Neu)kompilierungsbedarf genügt ein
mvn install
- Damit der Mail-Versand funktioniert, ist basierend auf mail-template.properties ein mail.properties anzupassen:
- Falls nicht Gmail genutzt wird, entsprechende Angaben zum SMTP-Server einfügen
- Falls Gmail genutzt wird, in Netbeans unter Project ->Properties ->Actions -> Run project (und Debug project) -> Set Properties: Add neue Umgebungsvariablen anzulegen: Env.mailUser=BENUTZERNAME und Env.mailPass=PASSWORT. Das kann z.B. das Konto von zwi.sml@gmail.com sein oder ein Beliebiges -> Achtung: falls Zwei-Faktoren-Authentifizierung aktiviert ist, muss ein App-Passwort erstellt werden gemäss https://support.google.com/accounts/answer/185833?hl=de.
- Falls gar keine "echte" Mail gesendet werden soll: In application.properties mail.debug auf true setzen. Dann wird kein Mail versendet, sondern nur eine Ausgabe in die Kommandozeile erfolgt.
- Für den Start ist ein Run (Netbeans), respektive
java -jar .\target\NAME DES JAR-FILES.jar
(Cmd) erforderlich. Dabei wird Tomcat gestartet, die Datenbank erstellt/hochgefahren, Camunda in der Version 7.9 mit dem Beispiel-Prozess und den Eigenschaften (application.properties) hochgefahren. - Das Beenden geschieht mit Stop Build/Run (Netbeans), respektive CTRL+C (Cmd)
- Falls man die bestehenden Prozessdaten nicht mehr benötigt und die Datenbank inzwischen recht angewachsen ist, genügt es, die Datei DATENBANKNAME.mv.db im Wurzelverzeichnis des Projekts zu löschen.
- http://localhost:8080 aufrufen
- Anmelden mit Benutzername und Passwort a
- Tasklist öffnen (und in einem separaten Tab das Cockpit)
- "Start Process" > "Verarbeitung von Tweet-Anfragen"
- Nun wird man durch den Prozess geführt. Folgende Hinweise:
- Bei E-Mail-Adresse eine funktionierende Mail-Adresse eingeben, an die man auch wirklich eine Benachrichtigung will.
- Möchte man, dass der Tweet automatisch abgelehnt wird, dann im Tweet-Content eines der Wörter 'Buzzword' oder 'Digitalisierung' mit einfügen (Gross-/Kleinschreibung berücksichtigen).
- Bei "Tweet-Anfrage" prüfen ist ein Claim erforderlich, da bewusst jede Person aus der Kommunikationsabteilung, die Aufgabe ausführen können soll. Der Nutzer a hat als Admin Zugriff auf alle Aufgaben. PS: Selbst wenn man einen zusätzlichen Nicht-Admin-Benutzer erstellt und diesen nicht der Gruppe kommunikationsabteilung zuweist, sieht er trotzdem alle Aufgaben für diese. Grund: Authorisierung ist standardmässig deaktiviert => Jeder Benutzer hat alle Rechte.
- Damit der External Task "Tweet senden" auch tatsächlich erledigt wird, muss eines der beiden Projekte (siehe Punkt 6.4 in der Einleitung) gestartet sein.
- Im Cockpit kann man bei Bedarf den Prozessfortschritt und mehr verfolgen
In diesem Beispiel geht es darum zu zeigen, wie ein Fehler im External Task Client zu einem Incident der entsprechenden Prozessinstanz führt, welcher im Cockpit "behoben" werden kann und über einen Retry dieses Mal fehlerfrei abläuft.
- Auf der Twitter-Timeline den letzten Post in die Zwischenablage kopieren (Ziel ist, eine DuplicateStatusException zu provozieren)
- Tasklist öffnen (und in einem separaten Tab das Cockpit)
- "Start Process" > "Verarbeitung von Tweet-Anfragen"
- Den Text aus der Zwischenablage einfügen
- Im nächsten Schritt die Tweet-Anfrage genehmigen => ein neuer Task wird erstellt
- Spätestens jetzt den External Task Client Spring Boot Template (https://github.com/zhaw-gpi/external-task-client-spring-boot-template) starten
- Dieser wird den Task aufnehmen, aber einen Fehler produzieren (DuplicateStatusException) und diesen an die Process Engine weitergeben.
- Dies führt dort zu einem Incident (im Cockpit zu sehen).
- Eine Variante, den Incident im Cockpit zu beheben ist:
- Die Variable TweetContent so anpassen, dass sie kein Duplikat mehr darstellt.
- Einen Retry des External Tasks anzustossen.
- Warten, bis es dieses Mal fehlefrei durchläuft.
- Um auf die Datenbankverwaltungs-Umgebung zuzugreifen, http://localhost:8080/console eingeben.
- Anmeldung über:
- Benutzername sa
- Passwort: leer lassen
- URL jdbc:h2:./zhaw-gpi
Die Engine kann auch per REST API gesteuert werden. Hierzu die Dokumentation unter https://docs.camunda.org/manual/7.9/reference/rest/ lesen. Wegen Spring Boot ist die URL für die REST API minimal anders als in der Dokumentation beschrieben. Sie ist: http://localhost:8080/rest/. So gibt z.B. http://localhost:8080/rest/engine den Namen der Engine (default) zurück.