Dynamisches Laden von Groovy-Komponenten zur Laufzeit
Aus Digitaler-Tachograph.org
Ein Hauptbestandteil von opendtacho ist die Analyse von importierten Fahrerdaten auf Gesetzeskonformität.
Um dem Benutzer anzuzeigen, dass ein Fahrer gegen eine der Vorlagen verstößt, müssen diese Daten analysiert werden.
Die Implementation der Gesetze muss dabei bestimmten Anforderungen entsprechen, die im folgenden aufgelistet sind:
- Sie muss möglichst einfach zu programmieren sein.
- Sie muss fähig sein, komplexe Regeln zu akzeptieren (Pausenzeiten, Fahrverbote, etc.).
- Die Gesetze müssen im Laufenden Betrieb austauschbar sein (kein Quellcode der erst vorkompiliert werden muss wie Java oder C++).
- Sie muss möglichst schnell laufen. (soll große Mengen Daten schnell analysieren können).
Nachdem mehrere Kandidaten aufgrund von diversen Unpässligkeiten nicht akzeptiert wurden haben wir uns entschlossen, eine bereits in Groovy vorhandene Klasse zu benutzen, die all diese Vorgaben erfüllt: Die Klasse GroovyScriptEngine.
Groovy kann mit Hilfe der GroovyScriptLoader-Klasse dynamisch groovy-Skripte in Laufzeit kompilieren und allen anderen Klassen zur Verfügung stellen.
Das kann man so schreiben, dass automatisch bei Änderungen der entsprechendenden Dateien alles neu kompiliert und zur Verfügung gestellt wird - in unserem Fall geschieht das, indem von den entsprechenden Dateien eine MD5-Prüfsumme berechnet und mit der vorhergegangenden vergleicht. Sind diese unterschiedlich, wird das entsprechende Skript neu kompiliert und zur Verfügung gestellt.
