Björn Scheppler, 12.9.2018
Dieses Maven-Projekt dient den Studierenden des Moduls Geschäftsprozessintegration, um Schritt für Schritt eine Prozessapplikation zu erstellen. Im Endausbau enthalten sind folgende Funktionalitäten:
- Spring Boot 2.0.2 konfiguriert für Tomcat
- Camunda Spring Boot Starter 3.0.0
- Camunda Process Engine, REST API und Webapps (Tasklist, Cockpit, Admin) in der Version 7.9.2 (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 und EMail
- Ein Beispielprozess (Verarbeitung von Tweet-Anfragen) bestehend aus:
- BPMN-Modell mit User Tasks und Service Tasks
- HTML-Formulare als Implementation für die User Tasks/das Startformular
- Eine JavaDelegate-Klasse und eine EmailService-Klase als Implementation für den Service Task "Mitarbeiter benachrichtigen" (per Mail)
- Analoges für den Service Task "Tweet senden", wobei dort zusätzlich eine TwitterService-Klasse sowie Spring Social Twitter vorhanden ist.
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 Clean & Build (Netbeans), respektive
mvn clean install
(Cmd) durchführen - Bei Änderungen am POM-File oder bei (Neu)kompilierungsbedarf genügt ein Build (Netbeans), respektive
mvn install
- Damit der Mail-Versand funktioniert, ist der Bereich # Mail-Konfiguration in application.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.
- 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.
- Im Cockpit kann man bei Bedarf den Prozessfortschritt und mehr verfolgen
In diesem Beispiel geht es darum zu zeigen, wie ein Fehler im Twitter Service 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
- 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.