[JAVA] Führen Sie DMN mit der Camunda DMN Engine aus

Was ist DMN (Decision Modeling and Notation)?

Es handelt sich um eine Modellierungsnotation für die Entscheidungsfindung, die von OMG (Object Managemnt Group) festgelegt wurde. In den letzten Jahren hat es als Methode zur Entscheidungsautomatisierung im Wissensteil von RPA Aufmerksamkeit erregt.

https://www.omg.org/spec/DMN/About-DMN/

Das größte Merkmal von DMN ist, dass Sie das Entscheidungsmodell so ausführen können, dass es für den Menschen im Code so wie er ist leicht zu verstehen ist. Sie können den Betrieb von DMN mit dem DMN-Simulator von Camunda (https://camunda.com/dmn/simulator/) testen. In dieser Stichprobe wird das optimale Gericht (Gericht) basierend auf der Jahreszeit und der Anzahl der Gäste bestimmt, und das optimale Getränk (Getränke) wird basierend auf dem Gericht und den Gästen mit Kindern bestimmt. Machen. "Optimal" bedeutet hier basierend auf einer vorgegebenen Logik (Wissen von Unternehmen und Einzelpersonen). DMN gibt diese Logik in einer Tabelle an, die als Entscheidungstabelle bezeichnet wird. Weitere Informationen finden Sie unter hier.

Setzen Sie die Entscheidungstabelle auf Getränke, Gäste mit Kindern auf wahr, Jahreszeit auf Herbst und Wie viele Gäste auf 2. Zwei Getränke, Aecht Schlenkerla Rauchbier und Apfelsaft, wurden wie folgt ausgegeben. Auf dem Bildschirm können Sie sehen, dass Spareribs als Gericht ausgewählt wurde, das die eingegebenen Bedingungen erfüllt. Das deutsche Bier Aecht Schlenkerla Rauchbier wurde als Getränk zu Spareribs ausgewählt. Apfelsaft ist für Kinder, nicht wahr? Dies ist das Ergebnis der Auswahl des am besten geeigneten Getränks aus dem "Wissen", das als Entscheidungstabelle bezeichnet wird, basierend auf der eingegebenen Saison und der Anzahl der Gäste.

image.png

Hinter den Kulissen dieses Simulators befindet sich die Camunda DMN Engine, auf der das DMN ausgeführt wird. Führen Sie dieses Mal diese Camunda DMN Engine lokal aus, um den DMN auszuführen.

DMN-Dateivorbereitung

Dieses Mal verwenden wir die Beispiel-DMN-Datei von Camunda als DMN zur Überprüfung. Laden Sie die DMN-Beispieldatei von "DMN-Tabelle herunterladen" auf der DMN-Simulatorseite herunter. Zum Anzeigen und Bearbeiten von DMN-Dateien ist ein DMN-Designtool erforderlich. Persönlich empfehle ich Camunda Modeler, das eigenständig und einfach zu bedienen ist. Übrigens, wenn Sie nur DMN ausführen möchten, benötigen Sie keine Designtools.

Erhalten der Camunda DMN Engine

Die Camunda DMN Engine wird auf Maven Central veröffentlicht. Fügen Sie dem POM die folgende Abhängigkeit hinzu.

<dependency>
    <groupId>org.camunda.bpm.dmn</groupId>
    <artifactId>camunda-engine-dmn</artifactId>
</dependency>

Ausführen von DMN mit der Camunda DMN Engine

Unten finden Sie einen Java-Beispielcode, der DMN ausführt.

//Einstellungen für DMN-Dateipfad und Entscheidungs-ID
String dmnFilePath = "./simulation.dmn";
String decisionId = "beverages";

//Eingabedateneinstellungen
Map<String, Object> input = new HashMap<String, Object>();
input.put("season", "Fall"); //Herbst
input.put("guestCount", 2);  //2 Gäste
input.put("guestsWithChildren",true); //Mit Kindern

//DMN-Motorengenerierung
DmnEngine dmnEngine = DmnEngineConfiguration.createDefaultDmnEngineConfiguration().buildEngine();

//Entscheidungsgenerierung
DmnDecision decision = dmnEngine.parseDecision(decisionId,new FileInputStream(dmnFilePath));

//Führen Sie DMN aus
DmnDecisionResult result = dmnEngine.evaluateDecision(decision,input);

//Ausführungsergebnis abrufen
for(Map<String,Object> entry : result.getResultList()) {
    System.out.println(entry.get("beverages"));
}

Hier wird die Entscheidungs-ID als ID der Entscheidungstabelle angegeben. Dies ist der Wert, der an der folgenden Stelle in der von Camunda Modeler angezeigten Entscheidungstabelle festgelegt wurde.

image.png

Die Eingabe erhält den gleichen Wert wie im Beispiel für die frühere Ausführung des DMN-Simulators. Wenn ich den obigen Code ausführe, erhalte ich das gleiche Ergebnis wie beim DMN-Simulator wie unten.

Aecht Schlenkerla Rauchbier
Apple Juice

Ausgabe hinzufügen

Da die Ausgabe der Entscheidungstabelle "Getränke" nur Getränke ist, können Sie an dieser Entscheidungstabelle nur Getränke erhalten. Aber trotzdem möchte ich sowohl das ausgewählte Essen als auch das Getränk bekommen. Bearbeiten Sie also die Entscheidungstabelle, um die Ausgabe zu erhöhen. Im folgenden Beispiel wird Camunda Modeler zum Bearbeiten der Entscheidungstabelle verwendet.

Fügen Sie der Ausgabe von Getränken eine Spalte hinzu, wie unten gezeigt. Dann wird der Wert von Dish, der eine der Eingaben dieser Entscheidungstabelle ist, als Ausgabe verwendet. Das "gewünschte Gericht" in dieser Ausgabespalte bedeutet einen Verweis auf den Ausdruck (Variablenname) des Gerichts.

image.png

Das Eingabeelement der Entscheidungstabelle hat Label, eine Anzeigebezeichnung, Expression, die den Variablennamen oder den Ausdruck des Werts festlegt, und Type, das den Datentyp des Werts angibt. In Camunda Modeler wird Ausdruck nur angezeigt, wenn Sie auf die Kopfzeile Eingabe klicken. In der Beispiel-DMN ist die Spalte Ausdruck der Schüssel erwünscht. Verwenden Sie diesen Wert, wenn Sie auf andere Spalten verweisen.

image.png

Schreiben Sie als Nächstes "Get Execution Result" in den obigen Java-Code, damit sowohl Essen als auch Trinken wie folgt angezeigt werden können.

//Ausführungsergebnis abrufen
for(Map<String,Object> entry : result.getResultList()) {
    System.out.println(entry.get("desiredDish") + " with " + entry.get("beverages"));
}

Das Ausführungsergebnis ist unten dargestellt. Sie können jetzt sowohl Essen als auch Trinken bekommen.

Spareribs with Aecht Schlenkerla Rauchbier
Spareribs with Apple Juice

Recommended Posts

Führen Sie DMN mit der Camunda DMN Engine aus
Erstellen Sie mit dem Befehl eine JAR-Datei
Ich habe versucht, die Routensuchmaschine (OSRM) einfach mit einem Container auszuführen
Bis Sie ein Java-Programm mit dem für Windows lokalen AWS SDK ausführen
Geben Sie ein Suffix für Methode 2 heraus
Erstellen Sie eine Mehrschlüsselkarte mit einer Standardbibliothek
Refactor die Implementierung des Decorator-Musters mit einer funktionalen Schnittstelle
So führen Sie die SpringBoot-App als Dienst aus
[Tutorial] Eclipse herunterladen → Anwendung mit Java ausführen (Plejaden)
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Führen Sie Payara mit Docker aus
So machen Sie einen Screenshot mit dem Android Studio-Emulator
Erstellen Sie ein Docker-Image mit installiertem Oracle JDK (yum
Die erste WEB-Anwendung mit Spring Boot-Making a Pomodoro Timer-
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Überprüfen Sie die Funktion von zwei Rollen mit einer Chat-Anwendung
Führen Sie PHP-FPM mit aktiviertem OPcache in einem schreibgeschützten Container aus
Führen Sie mehrere Anwendungen mit derselben Logik in der Struts-Umgebung aus
[Swift 5] Wählen Sie mit der UIDate-Auswahl unter iOS14 ein Datum aus
Führen Sie die Analyse mit OpenJDK11 Java Flight Recorder + Google Kubernetes Engine aus
[Docker] Löschen Sie nur das Volume, das einem bestimmten Container zugeordnet ist
Erläutern Sie die Vorzüge des staatlichen Musters anhand des Bewertungsurteils des Films
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Finden Sie mit Kotlin die Anzahl der Tage in einem Monat
Mit der Software, die ich schon lange mache ...
Erstmaliges Modellieren von Digimon mit DDD Teil 1