jBPM5 - Kurzanleitung

JBPM steht für "Java Business Process Management". Es ist ein JBoss-Produkt, das ein Open-Source-Framework ist. Bevor wir fortfahren, definieren wir zunächst einen Geschäftsprozess.

Was ist ein Geschäftsprozess?

Per Definition ist ein Geschäftsprozess eine Folge von Aufgaben, die in einer wiederholbaren Reihenfolge ausgeführt werden und von Menschen und / oder Systemen ausgeführt werden, um ein Geschäftsziel zu erreichen. Es beschreibt die Reihenfolge (unter Verwendung eines Flussdiagramms), in der eine Reihe von Schritten ausgeführt werden muss. Ein Geschäftsprozess kann die Sichtbarkeit und Agilität einer Geschäftslogik erheblich verbessern.

Nehmen wir ein Beispiel. Der folgende Screenshot zeigt einen Workflow / ein Flussdiagramm, auf das sich die meisten IT-Experten beziehen können. In den meisten Organisationen ist es üblich, die Mitarbeiter anhand ihrer Leistung zu bewerten.

Der Vorgang erfolgt in der folgenden Reihenfolge:

  • Die Mitarbeiter bewerten sich selbst und senden den Bericht an ihre Projektmanager.

  • Ihre Leistung wird dann vom Projektmanager und vom Personalmanager bewertet. Basierend auf der Bewertung geben sie den Mitarbeitern eine Bewertung.

  • Die endgültige Bewertung oder das Leistungsfeedback wird dann an die Mitarbeiter weitergeleitet.

Dieser Prozess ist für fast alle Mitarbeiter anwendbar und daher ein sehr gutes Beispiel für das Verständnis eines Geschäftsprozesses. Es ist eine Abfolge von Aufgaben und geschieht in einer bestimmten Reihenfolge.

Was ist jBPM?

Geschäftsprozesse sind ein Schlüsselkonzept, um jeden organisatorischen Rahmen zu verstehen. Eine Technologie wie jBPM hilft bei der effizienten Verwaltung komplexer Geschäftsprozesse. JBPM ist ein Tool, mit dem ein Geschäftsprozess effektiv koordiniert werden kann. Im Allgemeinen verfügt jede Anwendung auf Unternehmensebene über eine Abfolge von Aufgaben, die in einer bestimmten Reihenfolge ausgeführt werden. Diese Prozesse können mithilfe von jBPM koordiniert werden.

Das Schöne an jBPM ist, dass es einem Flussdiagramm ähnelt. Dies kann auch von Geschäftsanalysten leicht verstanden werden. jBPM kann in eine Java-Anwendung eingebettet und als Dienst ausgeführt werden.

Funktionen von JBPM

jBPM ist eine leichte, vollständig in Java eingebettete Open Source-Prozess-Engine. Die bemerkenswertesten Funktionen sind unten aufgeführt -

  • jBPM führt Geschäftsprozesse aus, die unter Verwendung der BPMN 2.0-Spezifikationen entworfen wurden.

  • jBPM kann vollständig in Eclipse und ähnliche IDEs integriert werden, um Drag & Drop-Unterstützung für die Erstellung eines Workflows bereitzustellen.

  • jBPM verfügt über UI-Tools, mit denen Geschäftsanalysten und Benutzer bereits in der Entwurfsphase einbezogen werden können.

  • jBPM unterstützt die Persistenz und das Transaktionsmanagement mithilfe von JPA und JTA.

  • Sie können benutzerdefinierte Workitem-Handler definieren, um eine benutzerdefinierte Aufgabe zu erstellen, die später als Komponente für andere Workflows verwendet werden kann.

Im Folgenden sind die Voraussetzungen für die Installation des jBPM-Plugins aufgeführt:

  • Java 1.5 (oder höher) SE JDK
  • Eclipse 4.2 oder eine beliebige Version und das jBPM-Plugin

Da jBPM in Java geschrieben ist, erfahren Sie in diesem Abschnitt, wie Sie die gewünschten Plugins hinzufügen. In Anbetracht der Tatsache, dass maximal Java-Benutzer Eclipse verwenden, sehen wir uns an, wie das jBPM-Plugin in Eclipse hinzugefügt wird.

Laden Sie die Binärdateien über den folgenden Link herunter: http://download.jboss.org/drools/release/5.3.0.Final/

Seien Sie nicht verwirrt, wenn Sie Drools hier sehen. Die gleichen Plugins werden für jBPM verwendet. Wenn Sie das Drools-Plugin bereits installiert haben, können Sie die Installationsschritte überspringen.

Extrahieren Sie es auf Ihre Festplatte. Starten Sie dann Eclipse und gehen Sie zu Hilfe → Neue Software installieren.

Klicken Add Repository - -

Drücke den Local Schaltfläche und wählen Sie dann "... / binaries / org.drools.updatesite" (wo Sie auf Ihren Computer heruntergeladen haben)

Wählen Drools and jBPM und klicken Sie dann auf Next Taste.

Klicken Sie erneut auf Next und wählen Sie "Ich akzeptiere die Bedingungen der Lizenzvereinbarung" und klicken Sie dann auf Finish. Die Softwareinstallation beginnt -

Nach erfolgreicher Installation wird das folgende Dialogfeld angezeigt:

Klicken Yes. Eclipse wird neu gestartet. Jetzt geh zuWindows → Preferences → Drools → Drools Flow Nodes

Wenn Sie die Knoten wie im obigen Screenshot sehen können, zeigt dies, dass die Plugins erfolgreich installiert wurden. Jetzt können wir unser erstes jBPM-Programm schreiben.

Hier in diesem Kapitel werden wir unser erstes Programm "Hello World" mit jBPM schreiben. Befolgen Sie die unten angegebenen Schritte -

Gehen Sie zu Datei → Neu → Drools-Projekt -

Klicken Next. Geben Sie einen passenden Namen für das erste Projekt an: "HelloWorld" in unserem Fall.

Klicken Next. Aktivieren Sie die beiden unteren Kontrollkästchen:

  • Fügen Sie diesem Projekt eine HelloWorld-Beispielprozessdatei hinzu
  • Fügen Sie eine Beispielklasse zum Laden und Ausführen des HelloWorld-Prozesses hinzu

Klicken Next. Klicken Sie auf Arbeitsbereichseinstellungen konfigurieren (im folgenden Screenshot rot markiert).

Drücke den Add Knopf -

Sobald Sie auf die klicken AddSchaltfläche wird der folgende Bildschirm angezeigt. Klicken Sie auf "Neue Drools5-Laufzeit erstellen".

Geben Sie den Pfad bis zum Binärordner an, in den Sie die Datei droolsjbpm-tools-distribution-5.3.0.Final.zip heruntergeladen haben

Wählen Sie dann die installierten Drools Runtimes aus und klicken Sie auf OK.

Der folgende Bildschirm wird angezeigt. Drücke denFinish Taste.

Öffnen Sie nun die Paket-Explorer-Ansicht in Eclipse. Sie sehen den folgenden Bildschirm:

Das ProcessTest.java Klasse ist die Klasse zum Laden der Regelflussdatei (rf) und ruleflow.rf ist der grundlegende Regelfluss, der für das HelloWorld-Projekt erstellt wurde.

Doppelklicken Sie auf die ruleflow.rf Datei und Sie würden den folgenden Regelfluss sehen -

Das GREEN Der Kreis zeigt den Beginn des Workflows, während der RED Kreis ist das Ende des Workflows.

In dem links abgebildeten Bedienfeld sind verschiedene Komponenten aufgeführt, die im Workflow verwendet werden. Abgesehen von START und END gibt es viele Komponenten, die im Workflow verwendet werden können, und wir werden sie im nächsten Abschnitt behandeln.

Das Hallo zwischen dem START- und END-Ereignis ist eine Skriptaufgabe und der Name der Skriptaufgabe lautet Hello. Um zu sehen, welcher Code in der Skriptaufgabe "Hallo" geschrieben ist, gehen Sie zu Windows → Ansicht anzeigen → Andere → Eigenschaften.

Note - Während Sie an jBPM arbeiten, lassen Sie die Eigenschaftenansicht immer geöffnet, da alle Konfigurationen nur in der Eigenschaftenansicht sichtbar sind.

Drücke den OKTaste. Wählen Sie nunHello und Sie können die Eigenschaften des Ereignisses "Hallo" sehen -

Um den gesamten Code anzuzeigen, der in das Ereignis "Hallo" geschrieben wurde, wählen Sie die Option Action Eigentum.

Der rot markierte Kreis ist die Bearbeitung der Aktionseigenschaft. Sobald Sie auf Bearbeiten klicken -

Sie können dies bearbeiten und den Code, den Sie ausführen möchten, in die Skriptaufgabe "Hallo" schreiben. Lass es uns bearbeiten -

Klicken OK. Öffnen Sie nun die ProcessTest.java-Klasse und führen Sie sie als Java-Anwendung aus. Unten ist seine Ausgabe angegeben -

Die in der ProcessTest.java-Klasse verwendeten Begriffe sind dieselben wie für Drools. Der in der ProcessTest.java-Klasse zu beachtende Punkt ist -

ksession.startProcess("com.sample.ruleflow");

Wenn Sie den Code zum Starten des Prozesses schreiben, wird die Zeichenfolge an übergeben startProcess Methode ist die ID-Eigenschaft, wenn wir den Workflow öffnen.

Der BPMS-Kern ist das Herzstück des BPM. Die folgende Abbildung zeigt den BPMS-Kern und seine Komponenten.

Das semantische Modul

Das semantische Modul definiert die Sprachsemantik (was jedes Wort bedeutet) und wie es für die internen Strukturen der Prozess-Engine übersetzt wird, die zur Ausführung bereit sind. Dieses Modul enthält im Wesentlichen die Grundlagen zum Verständnis der BPMN2-Sprache.

Die Process Engine

Die Prozess-Engine ist für die tatsächliche Ausführung unserer Geschäftsprozesse verantwortlich. Die Prozess-Engine ist dafür verantwortlich, neue Prozessinstanzen zu erstellen und den Status für jede dieser Instanzen beizubehalten. Innerhalb des Process Engine-Codes werden die internen Strukturen definiert, um jede Aktivität darzustellen, die in unseren Prozessdefinitionen enthalten ist. Alle Mechanismen, die zum Instanziieren dieser Prozessdefinitionen verwendet werden, führen sie wie in der Prozess-Engine definiert aus.

Persistenz und Transaktionen

In den meisten Unternehmensanwendungen müssen alle Interaktionen innerhalb einer Transaktionsgrenze ausgeführt werden, und wir müssen uns mit verschiedenen Systemen, APIs und Designs befassen. Wir müssen auch einen flexiblen Mechanismus haben, um zu definieren -

  • Umgang mit lang laufenden Prozessen

  • Wie und wann können wir Informationen über den Prozessstatus und die Informationen, die der Prozess verarbeitet, speichern?

  • Wie und wann müssen wir die Process Engine-Transaktionen erstellen, festschreiben oder zurücksetzen?

  • Welche Geschäftsausnahmen können bereits ausgeführte Geschäftsaktionen rückgängig machen oder kompensieren?

Alle oben genannten Punkte werden durch die Persistenz- und Transaktionskomponente innerhalb des jBPM abgedeckt.

Audit- / Verlaufsprotokolle

Dieses Modul soll dem Benutzer die Möglichkeit geben, die Ausführung unserer Prozesse abzufragen. Diese Informationen enthalten historische Informationen zu bereits beendeten Prozessen und die neuesten Informationen zu den ausgeführten Prozessen.

Business Activity Monitoring (BAM) Tools und Informations-Dashboards sind einige der häufigsten Clients für die von diesem Modul generierten Informationen. The Audit/History Logs Das Modul wird häufig verwendet, um nützliche Informationen und Metriken zu extrahieren, die mit verschiedenen Tools zusammenarbeiten, um diese Informationen entsprechend anzuzeigen.

Der folgende Screenshot zeigt die verschiedenen in jBPM 5 verfügbaren Workflow-Komponenten. Mit diesen Komponenten können Sie einen Workflow erstellen, um Ihren Prozess zu koordinieren.

Sie können auch Ihre benutzerdefinierten Aufgaben erstellen, dies wird jedoch später behandelt. Darüber hinaus stehen Serviceaufgaben zur Verfügung, mit denen ein Prozess koordiniert werden kann.

  • Start Event- Dies ist der erste Knoten, der in jedem Prozess ausgeführt wird. Es kann nur einen Startknoten in Ihrem Prozess geben.

  • End Event- Dieser Knoten signalisiert das Ende des Prozesses. In einem Prozess kann es mehr als ein Vorkommen dieses Knotentyps geben.

  • Rule Task - Es ist ein Knoten, der eine RuleFlow-Gruppe auswertet, dh eine Gruppe von Drools-Regeln unter demselben Namen.

  • Gateway (diverge) aka Split- Dieser bestimmte Knoten erstellt dabei neue Pfade / Wege. Es hat zwei oder mehr ausgehende Verbindungen. Sie können zwischen drei verschiedenen Arten von Splits / Gates wählen.

    • AND GATE - Wenn der Prozessfluss zu allen ausgehenden Verbindungen gleichzeitig fortgesetzt wird.

    • XOR GATE - Der gemäß einigen im Workflow definierten vordefinierten Einschränkungen nur zu einem ausgehenden Pfad führt.

    • OR GATE - Wenn der Fluss basierend auf der Auswertung aller ausgehenden Einschränkungen fortgesetzt wird und dieser Pfad aktiviert ist, wenn die Einschränkung als wahr ausgewertet wird.

  • Gateway (converge) aka Join- Diese Verknüpfung ist die Umkehrung der Aufteilung. Es verbindet mehrere Pfade zu einem. Es gibt vier verschiedene Arten von Joins / Gates -

    • AND - Der Fluss wird fortgesetzt, wenn alle Zweige abgeschlossen sind.

    • XOR - Der Fluss wird fortgesetzt, wenn mindestens ein Zweig abgeschlossen ist.

    • Discriminator- Wie bei XOR wird es fortgesetzt, wenn einer seiner Zweige abgeschlossen wurde. Im Gegensatz zu XOR werden jedoch die Abschlüsse der anderen Zweige registriert, bis alle Verbindungen abgeschlossen sind. In diesem Fall wird der Knoten zurückgesetzt und kann erneut eingegeben werden, wenn ein eingehender Zweig aktiviert wird und der Zyklus von vorne beginnt.

    • N-of-M - Der Fluss setzt sich fort, wenn n Anzahl von mZweige abgeschlossen. Sie müssen die angebenn (Nummer) beim Konfigurieren des Gates, wie viele Zweige abgeschlossen sein sollen, bevor der Fluss beendet wird.

  • Reusable Sub-Process- Ruft einen anderen Prozess auf. Dies ist sehr nützlich, um mehrere kleinere Prozesse zu einem größeren zusammenzusetzen. Dieser größere kann ein koordinierender Prozess sein. Sie können den aufrufenden Prozess so konfigurieren, dass er auf den Abschluss des Angerufenen wartet und einen unabhängigen Lebenszyklus des übergeordneten Elements hat.

    • Script Task - Ein Knoten, der einen einfachen Code ausführen kann.

    • Timer Event- Dieser Knotentyp startet einen Timer und wird ausgelöst, wenn der Timer abläuft. Ermöglicht zeitbezogene Prozesse und sich wiederholende Aufgaben.

    • Error Event- Diese Art von Knoten signalisiert einen Fehlerzustand im Prozess. Es gibt keine ausgehenden Verbindungen. Es gibt einen FaultName und eine FaultVariable an. Die Engine sucht nach einem Ausnahmebehandler, der mit dem Fehlernamen übereinstimmt, und speichert die Fehlerinformationen in der von FaultVariable definierten Variablen.

  • Message Event- Es wird ausgelöst, wenn ein Ereignis eines vordefinierten Typs ausgegeben wird. Dies kann entweder ein internes Ereignis (innerhalb des Prozesses signalisiert) oder ein externes Ereignis (signalisiert durch eine andere externe Entität als die Prozess-Engine) sein.

  • User Task- Ein Knoten, der eine menschliche Aufgabe erstellt. Diese menschliche Aufgabe ist eine Aktivität, die von einem menschlichen Akteur ausgeführt werden muss.

  • Embedded Sub-Process- Hilft beim Erstellen eines Unterprozesses innerhalb eines übergeordneten Prozesses. Es kann einen eigenen Bereich haben. Dies ist nützlich für größere Prozesse, bei denen Sie einige komplexe Zweige isoliert halten möchten. Es kann eigene Variablen und Ausnahmebehandlungsroutinen haben

  • Multiple Instances aka for Each- Es ermöglicht die Einspeisung einer Sammlung von Elementen in einen Unterprozess. Sehr nützlich in Kombination mit einem wiederverwendbaren Unterprozess zum Erstellen und Koordinieren kleinerer Prozesse.

Um einen Workflow zu zeichnen, können Sie eine der in der Palette verfügbaren Komponenten verwenden, wie im obigen Artikel beschrieben. Der gesamte Workflow hat einen Start, kann jedoch mehrere Enden haben.

Anhand von Screenshots werde ich Ihnen zeigen, wie Sie einen Workflow erstellen.

Hier habe ich die Lücke geöffnet rf oder bpmn Datei

Um ein Ereignis hinzuzufügen, wählen Sie das bestimmte Ereignis aus der Komponentenpalette aus und ziehen Sie es per Drag & Drop auf die rechte Seite. Zum Beispiel habe ich das Startereignis ausgewählt und auf die rechte Seite und auch auf ein divergierendes Gateway gezogen.

Nun muss man die beiden Komponenten verbinden. Wählen Sie den Sequenzfluss und verbinden Sie die beiden Komponenten.

Auf diese Weise können Sie die Komponenten in den Editor ziehen und den Sequenzfluss verwenden, um die verschiedenen Komponenten zu verbinden. Man muss nur darauf achten, dass einige Komponenten nur eine eingehende und eine ausgehende Verbindung haben, und den Sequenzfluss entsprechend einstellen, um einen aussagekräftigen Fluss zu erstellen.

Während wir den Workflow zeichnen, müssen auch einige Eigenschaften festgelegt werden. Wird alle hier einzustellenden Eigenschaften veröffentlichen. Ich habe gerade einen Flow erstellt, aber es ist nicht sehr sinnvoll, ihn im ersten Moment anzusehen, da ich im erstellten Workflow keine Eigenschaften festgelegt habe.

Wie Sie oben sehen können, handelt es sich um einen leeren Workflow ohne Beschreibung als solche, und aus dem erstellten Workflow kann nichts erkannt werden.

Zur weiteren Erläuterung habe ich jedoch eine Startkomponente und dann ein divergierendes Gateway. Abhängig vom Zustand des divergierenden Gateways werde ich einen Weg wählen und Code in der Skriptaufgabe ausführen und dann den Workflow beenden. Ich muss also Eigenschaften für das divergierende Gateway festlegen, dann die Skriptaufgabe und das konvergierende Gateway.

In diesem Stadium werde ich Ihnen auch zeigen, dass mein Workflow einige Fehler aufweist, und später zeigen, dass nach dem Festlegen der Eigenschaften keine Fehler in meinem Workflow auftreten. Daher werde ich Ihnen zeigen, wie Sie den erstellten Workflow validieren können.

Tipp - Beachten Sie, dass die Validatoren unter Windows → Einstellungen → Validierung aktiviert sind

Der folgende Screenshot zeigt die Einstellungen in Eclipse.

Wie aus dem Screenshot hervorgeht, gibt es 4 Fehler. Der erste Fehler besagt, dass das Skript keine Aktion hat, und ein weiterer Fehler ist, dass für das definierte Gateway kein Typ definiert ist. Daher müssen wir diese Fehler entfernen, um den Workflow ausführen zu können.

Wir werden nun die Eigenschaften einzeln festlegen und sehen, wie die Fehler verschwinden.

Wählen Sie das erste Gateway aus (divergieren) und klicken Sie auf Eigenschaften. Klicken Sie dann auf Typ und wählen Sie das Gate gemäß Ihren Anforderungen aus.

Nachdem Sie das Gateway ausgewählt haben, müssen Sie eine Einschränkung auswählen.

Klicken Sie auf den rot markierten Kreis. Der folgende Screenshot wird angezeigt

Klicken Sie auf Bearbeiten und füllen Sie die Details gemäß Screenshot aus -

Klicken Sie auf Importieren und importieren Sie die Klasse, für die wir eine Operation ausführen würden. Im Screenshot haben wir Passagier-POJO importiert, das wir in unserem Beispiel verwenden werden.

Füllen Sie in ähnlicher Weise die Details für eine andere Einschränkung aus -

Klicken Sie nun auf OK Taste.

Klicken Sie erneut OK. Wählen Sie nun die Skriptaufgabe aus und führen Sie den gleichen Vorgang aus wie für das divergierende Gateway.

Wir haben gerade eine SOP (print-Anweisung) hinzugefügt, um den Ablauf anzuzeigen. Jeder Java- oder Mvel-Code kann in die Skriptaufgabe geschrieben werden.

Fügen Sie auf ähnliche Weise den Code für die zweite Einschränkung hinzu -

Schließlich müssen Sie den Gateway-Typ für das divergierende Gateway hinzufügen.

Speichern Sie nun die Workflowdatei und wechseln Sie zur Problemansicht. Alle Probleme werden gelöst.

Keine Fehler in der Problemansicht deuten darauf hin, dass im erstellten Workflow kein Fehler vorliegt. Auf diese Weise wird ein Workflow erstellt und in jBPM validiert.

In diesem Kapitel wird anhand eines Beispiels erläutert, wie jBPM in die Praxis umgesetzt wird. Die Aufgabe besteht darin, mit jBPM zu entscheiden, ob ein Passagier je nach Einkommen in einen Flug oder einen Zug einsteigen wird.

Die Schritte zum Erstellen des Projekts bleiben die gleichen wie beim "Hello World" -Projekt. Öffnen Sie die RF-Datei im Editor und sehen Sie die rot markierten Änderungen.

Hier haben wir die Regelfluss-ID (eindeutig) geändert und ein variables Einkommen hinzugefügt, da wir die Route basierend auf dem Einkommen des Passagiers bestimmen werden.

How to set variable - Wählen Sie die rot markierte Schaltfläche Bearbeiten.

Drücke den Add Knopf -

Der folgende Bildschirm wird angezeigt:

Geben Sie den Namen als Einkommen ein und geben Sie als Ganzzahl ein.

Klicken OK. Sie sehen die jetzt definierte Einkommensvariable.

Änderungen in der ProcessTest.java-Klasse (Klasse zum Laden und Ausführen Ihres Prozesses) -

Map<String, Object> params = new HashMap<String, Object>();
params.put("income", 1200);

// start a new process instance
ksession.startProcess("vivek.ruleflow", params);

Sie müssen einen MAP erstellen, den Wert in MAP festlegen und diesen Wert an die überladene Methode startProcess übergeben. Wie dargestellt, haben wir die Regelfluss-ID geändert und daher dieselbe ID (vivek.ruleflow) in der startProcess-Methode verwendet.

Erstellen Sie vor dem Ausführen der ProcessTest.java-Klasse eine POJO Passenger.java im selben Paket wie ProcessTest.java

public class Passenger {
   private String name;
   private int income;
   Getters and setters here
}

Führen Sie nun die ProcessTest.java-Klasse als Java-Anwendung aus und sehen Sie die Ausgabe -

Change the value- params.put ("Einkommen", 900); Führen Sie die Klasse erneut aus und sehen Sie die Änderung der Ausgabe.