GEDOPLAN
QuarkusBusiness Process Management (BPM)Jakarta EE (Java EE)

Decision Model and Notation (DMN) in Jakarta EE nutzen

QuarkusBusiness Process Management (BPM)Jakarta EE (Java EE)
direction 1033278 1280 jpg

Im ersten Teil der Serie zum Einsatz von DMN-Engines in Enterprise Projekten habe ich euch den Gedanken der Entscheidungstabellen als dynamische Geschäftslogik versucht ein wenig näher zu bringen. Im zweiten Teil wollen wir diese Entscheidungstabellen nun in unsere Anwendung einbauen.

Die kleine Beispielanwendung ist eine Quarkus-Anwendung, die eine Integration der Camunda DMN-Engine nutzt. Ich habe mich an dieser Stelle für den Einsatz der Camunda Version 7 entschieden, da diese sehr einfach in eine Anwendung eingebunden werden kann. Wir starten natürlich ebenfalls mit einer Entscheidungstabelle, die ich mit Hilfe des Camunda Modelers erstellt habe. Das Beispiel ist ebenfalls sehr einfach gehalten. Auf Basis der Anzahl von getätigten Bestellungen soll ein Rabatt für die aktuelle Bestellung ermittelt werden.

Calculate discount png

Diese Entscheidungstabelle ist mit Hilfe der Decision Model and Notation (DMN) erstellt worden. Dabei handelt es sich um eine Spezifikation der Object Management Group (OMG). Die technische Basis bildet die DMN-Datei, welche die Entscheidungstabelle im XML-Format enthält. Um diesen Beitrag nicht unnötig aufzublähen, beschränke ich mich an dieser Stelle nur auf die Entscheidungstabellen. Im Modeler wird diese Notation entsprechend in eine grafische Form gebracht, damit eine Modellierung auch von nicht technik-affinen Personen erfolgen kann.

Um nun die so erstellte DMN-Datei auch in unserer Anwendung nutzen zu können, habe ich eine Java-Klasse implementiert, in der ich zunächst die DMN-Engine erzeuge und mit der DMN-Datei initialisiere. Anschließend kann ich mir dann die eigentliche Entscheidungstabelle aus dieser Datei geben lassen.

private DmnEngine dmnEngine;
private DmnDecision discountDecision;

@PostConstruct
void init() {
dmnEngine = DmnEngineConfiguration
.createDefaultDmnEngineConfiguration()
.buildEngine();
discountDecision = dmnEngine.parseDecision("discount", this.getClass().getResourceAsStream("/shop.dmn"));
}

Für die Ermittlung des Rabattes nutze ich nun keinen Code, der in einer Java-Methode implementiert wurde, sondern die Entscheidungstabelle. Auch diese verwendet Eingabeparameter um ein Ergebnis liefern zu können. Diese werden über eine Variablen Map in die DMN-Engine übergeben.

var variableMap = Variables.createVariables()
.putValue("orders", numberOfOrders);
var decisionResult = dmnEngine.evaluateDecision(discountDecision, variableMap);

Durch den Einsatz der Entscheidungstabelle habe ich die notwendige Implementierung der Geschäftslogik ausgelagert. Diese Logik kann nun durch den Einsatz des Modellers auch von Personen aus der Fachabteilung gepflegt werden. Ändern sich die Anforderungen ist es jederzeit möglich die Tabelle entsprechend anzupassen und diese ohne eine weitere Codeanpassung in der Anwendung zu nutzen. Ich hoffe ich konnte an diesem kleinen Beispiel die Möglichkeiten dieser Technologie zeigen. Die Beispielanwendung ist hier zu finden.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

automobile 8078415 640 jpg
Webprogrammierung

OpenAPI- ein eigenes Model

OpenAPI ist eine fantastische Möglichkeit, die eigenen Schnittstellen technisch zu beschreiben und Anwendungsteile zu generieren. Ein Generator ist allerdings immer…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!