Groovy - Skriptsprache

Hier finden Sie schnelle Antworten auf Ihre Fragen rund um die Skriptsprache Groovy.

Java-Syntax oder Groovy-Syntax?

Hintergrund:

  • Groovy erfährt, wie Java auch, von Zeit zu Zeit größere Versions-Sprünge.

  • Dabei wird Groovy an die neueren Java-Versionen angeglichen.

  • Diese enthalten von z.B. 2.x zu 3.x, aber auch von 3.x zu 4.x einige Breaking-Changes an der API

  • Die Verwendung dieser Konstrukte kann nach einem Update zu Laufzeitfehlern führen

    • Beispiele:
      for-in-Schleife => for-each-Schleife
      Anpassung von Imports

Fazit

  • Es ist besser, die Java-Syntax zu verwenden

  • Vereinfachte Schreibweisen für Listen oder Maps stellen aber kein Problem dar

Könnte Groovy durch eine andere Skript-Sprache ersetzt werden?

Hintergrund:

  • Im Jahr 2015 war es ungewiss, wie es mit Groovy weitergehen wird, da sich der Hauptsponsor Pivotal aus dem Projekt zurückgezogen hatte.

  • Erst nach einigen Monaten stand fest, dass Groovy bei der Apache Foundation unterkommen wird.

  • Wäre dies nicht passiert, hätte Groovy evtl. durch eine neue Skript-Sprache, damals noch nicht vollständig kompatibel zu Java 9 oder Java 11, ersetzt werden müssen.

Fazit:

  • Nach dem aktuellen Kenntnisstand (2024) besteht hierfür keinerlei Anlass zur Sorge.

  • Groovy erfreut sich einer großen Community und wird ständig mit den neuen Java-Versionen und eigene Sprach-Features erweitert.

Wie verhält es sich mit Groovy-Closures und Lambda-Ausdrücken?

Hintergrund:

  • In früheren Java- und Groovy-Versionen unterschieden sich die Groovy-Closures von den Java-Lambda-Ausdrücken. Hier waren potenzielle Speicherlecks bekannt.

  • Mit der Umstellung auf Java 9 und Groovy 3 sind diese Probleme aus dem Weg geräumt.

Fazit:

  • Einfache Lambda-Ausdrücke für Comparatoren oder Filter bzw. für die Java-Stream-API können problemlos eingesetzt werden.

  • Für die Lesbarkeit ist es aber anzuraten, Closure-Konstrukte nur in der ersten Ebene anzuwenden und damit potenziell verstecke Fehlerquellen zu vermeiden.

  • Zusätzlich wird darauf hinzuweisen, dass für diese Konstrukte die Editor-Unterstützung fehlt und diese noch als Warnung angezeigt werden.

Können Kunden JsonSlurper oder XmlSlurper gefahrlos einsetzen?

Hintergrund:

  • Diese Klassen von Groovy erlauben ein vereinfachtes Schreiben von Json- und Xml-Code

  • Je nach Komplexität der Strukturen bietet hier Groovy einen komfortablen lesenden wie schreibenden Zugriff

Fazit:

  • Diese Klassen können in Skripte gefahrlos eingesetzt werden, mit der Version 24.3 werden sie offiziell unterstützt.

Kann ich in Groovy-Skripten externe Klassen importieren?
  • CURSOR Software AG gewährt nur Support auf die vom Skript-Editor oder in den Util-Klassen unterstützten Standard-Klassen, für die keine gesonderte Import-Anweisung notwendig ist. Diese sind von uns getestet und entsprechend freigegeben.

  • Externe Klassen sind durch einen gesonderten Import im Skript oder durch eine voll-qualifizierte Angabe des Klassennamens erkennbar.

  • Werden Klassen aus der JBoss-Bibliothek oder dem Groovy-Umfeld hinzugefügt, kann CURSOR Software AG nach einem Update keine Funktionsgarantie mehr geben, da diese Bibliotheken in neueren Versionen vorliegen können und evtl. nicht mehr kompatibel sind.

  • Werden externe Bibliotheken im JBoss eingebunden und in Skripten importiert, liegt die Verantwortung hierfür beim Skript-Ersteller (im Kundenprojekt).

  • Der Support erlischt hiermit nicht für die gesamte Skript-Klasse oder den BPM-Prozess sondern nur für den entsprechenden Code-Abschnitt.

Kann ich in Skripten eigene Klassen erzeugen?
  • In CURSOR-Skripten eigene Klassen zu erzeugen ist zwar möglich, bietet aber kaum einen Mehrwert

  • Es fehlt die Code-Editor-Unterstützung für diese Klassen und für eine Json-Umwandlung kann bspw. auch ein Map-Objekt genutzt werden

  • Diese Klassen können weder als Parameter- noch als Rückgabe-Typ in der Skript-Bibliothek verwendet werden

  • Objekte dieser Klassen sind als Prozess-Variablen gültig. Die Klassen-Definition gilt nur lokal für dieses Skript und nicht global für die CRM-Anwendung, d. h. in anderen Skripten oder bei der Deserialisierung von Variablen in der Prozess-Engine.

    • Wird in zwei Skript-Aktionen "dieselbe" Klasse definiert, so sind es doch zwei unterschiedliche Klassen

  • Eine Weiterverarbeitung dieser Objekte führte bereits zu bekannten Fehlern bei der Deserialisierung z. B. aus Prozessvariablen oder in den Rest-Schnittstellen!

Groovy-logo.svg.png
NOCH FRAGEN?

Sprechen Sie Ihre Consultants an, die Ihre individuellen Fragen beantworten werden!