Integration einer Groovy-DSL mit einer Java-Anwendung

DSL-Komposition


Groovy eignet sich als dynamische Programmiersprache ausgezeichnet für die Erstellung von fachlich orientierten Domain Specific Languages (DSLs). Die Anwendung einer solchen DSL erfolgt aber nicht losgelöst, sondern im Allgemeinen im Kontext einer Fachapplikation, die selten selbst in Groovy, sondern eher in Java implementiert ist.

Im ersten Teil dieser Artikelserie wurde eine in Groovy implementierte Domain Specific Language (DSL) vorgestellt. Die DSL dient der Formulierung von Entscheidungsregeln für Immobilienkredite. Realisiert sind die einzelnen Regeln in Form von Groovy-Skripten wie dem folgenden:

monatlichesBruttoeinkommen - Steuern - Sozialabgaben - sonstigeBelastungen

Das Zielbild für diesen Artikel ist eine bestehende Fachapplikation (fiktives Beispiel) in Java, die an bestimmten Stellen durch eine mächtige fachliche Konfiguration ergänzt wird. Diese Konfiguration besteht aus Berechnungs- und Entscheidungsregeln, die durch Skripte in der angesprochenen Domain Specific Lan­guage realisiert sind (Abb. 1).

diener_1.tif_fmt1.jpgAbb. 1: Integration der DSL-Regeln in eine Fachapplikation

Artikelserie

Teil 1: Definition der Groovy DSL
Teil 2: Integration einer Groovy DSL in eine Java-Anwendung

Listing 1

public class JavaDslTestCase { @Test public void testNettoeinkommen() throws CompilationFailedException, IOException { Map<String, Object> p = new HashMap<String, Object>(); p.put("monatlichesBruttoeinkommen", 2300.0); p.put("Steuern", 210.0); p.put("Sozialabgaben", 400.0); p.put("sonstigeBelastungen", 160.0); Object result = runDsl("monatlichesNettoeinkommen.formel", p); assertEquals(1530.0, result); } Object runDsl(String name, Map<String, Object> properties) throws CompilationFailedException, IOException { Binding b = new Binding(properties); CompilerConfiguration conf = new CompilerConfiguration(); conf.setScriptBaseClass(DslDefinition.class.getName()); GroovyShell gs = new GroovyShell(b, conf); Script s = gs.parse(new File(name)); return s.run(); } }

Maven Build

Releases für moderne Geschäftsanwendungen werden im Allgemeinen durch Build-Werkzeuge wie Ant, Maven oder Gradle erzeugt. Im Rahmen der Erweiterung einer solchen Anwendung um eine DSL-Konfiguration müssen die Groovy-Artefakte – wie beispielsweise die DSL-Sprachdefinition (Listing 2) – in den Build-Zyklus dieser Anwendung integriert werden. In unserem Beispiel haben wir einen bestehenden Maven-Build-Prozess, in den die Übersetzung der Groovy-Klassen mittels Eclipse Compiler eingebracht wurde.

Listing 2

abst...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang