O'Reilly logo

Groovy: Grundlagen und fortgeschrittene Techniken by Joachim Baumann

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

483
10 Groovy und Java –
Interaktionsmöglichkeiten
In diesem Kapitel werden wir uns einen Überblick über die Möglich-
keiten verschaffen, Groovy in eigene Anwendungen zu integrieren.
Hierzu können wir entweder die Groovy-eigenen Möglichkeiten nut-
zen, die Möglichkeiten, die uns Java seit der Version 6 bietet, oder die
Integrationsmöglichkeiten verschiedener Frameworks. Sie sollten
zumindest Kapitel 4 gelesen haben, um die Groovy-Beispiele nachvoll-
ziehen zu können.
10.1 Einführung
Während die Nutzung von Groovy als eigenständige Programmier-
sprache natürlich der Hauptfokus dieses Buchs ist, ist Groovy auch
geeignet, um als Skriptsprache die Möglichkeiten einer Applikation
benutzerseitig erweitern zu können.
Domänenspezifische
Sprachen (DSLs)
Hierbei ist besonders interessant, dass wir mit den Sprachmitteln
von Groovy die Möglichkeit haben, Spracherweiterungen zu program-
mieren, die applikationsspezifische Funktionalität in für den Nutzer
einfacher Weise zur Verfügung stellen. Hierdurch erzeugen wir domä-
nenspezifische Sprachen oder DSLs (DSL – domain specific language),
die perfekt an den Problembereich der Applikation angepasst sein kön-
nen. Dadurch können auch Benutzer, die wenig programmieren, sich
aber mit der Problemdomäne auskennen, mit der DSL umgehen.
Beispiele für DSLs sind Notationen für Züge im Schach, Partituren
in der Musik, Zeit- und Raummaße, aber auch die Skriptsprache für
die Unix-Shell (die zwar Turing-vollständig ist, aber keine allgemeine
Programmiersprache darstellt).
Unabhängig davon, ob wir eine DSL verwenden oder Groovy in
Reinform benutzen, können wir Groovy auf verschiedene Arten in
eigene Applikationen integrieren, und es gibt verschiedene Frame-
works, die eine derartige Integration schon anbieten.
10 Groovy und Java – Interaktionsmöglichkeiten484
Es ist bei der Interaktion im Prinzip unerheblich, ob wir Groovy in
Java-Applikationen oder in Groovy-Applikationen integrieren. Im ers-
ten Moment mag die Idee, Groovy in Groovy zu integrieren, ein wenig
seltsam erscheinen, aber tatsächlich kann dies in vielen Fällen
geschickt sein. Das klassische Beispiel an dieser Stelle ist die schon
erwähnte Unterstützung einer domänenspezifischen Sprache (DSL),
mit der ein Benutzer die Applikation steuern kann.
Wir werden im Folgenden betrachten, wie wir Groovy-eigene
Möglichkeiten zur Integration benutzen können, was uns Java seit der
Version 6 an Integrationsmöglichkeiten bietet, und wie Spring [Spring-
Framework] Groovy integriert.
10.2 Grundsätzliche Zusammenhänge
Groovy bietet uns grundsätzlich zwei verschiedene Möglichkeiten, mit
Groovy-Klassen oder -Skripten umzugehen. Diese sind uns natürlich
schon begegnet, aber im Zusammenhang mit der Integration von
Groovy und Java ist es sehr wichtig, sich die Unterschiede ins Gedächt-
nis zu rufen
10.2.1 Explizite Übersetzung
Bei der expliziten Übersetzung verwenden wir den Groovy-Compiler,
um Klassendateien zu erzeugen, bevor wir diese verwenden.
Wenn wir dies tun, dann erhalten wir Klassendateien mit Byte-
code, die jeder Java-Klassenlader ohne Probleme laden kann. Wir müs-
sen also nur die Klassendateien und das Groovy-Archiv zum Klassen-
pfad hinzufügen und können starten.
10.2.2 Implizite Übersetzung
Wenn wir die implizite Übersetzung durch den Klassenlader wählen
(die mit Skripten normale Variante), dann führt dieser die exakt glei-
chen Schritte wie der Groovy-Compiler durch (tatsächlich wird dieser
auch aufgerufen), aber der resultierende Bytecode wird nicht in eine
Datei geschrieben, sondern im Speicher als Basis für die entstehende
Klasse verwendet.
Der Klassenlader versucht bei der Übersetzung auch Abhängigkei-
ten zu anderen Java- beziehungsweise Groovy-Klassen aufzulösen und
diese zu laden. Hierbei wird die Annahme getroffen, dass eine Groovy-
Klasse in einer Datei des gleichen Namens zu finden ist.
48510.2 Grundsätzliche Zusammenhänge
Dies kann dazu führen, dass Klassen, die in Dateien mit anderem
Namen deklariert worden sind, nicht gefunden werden können. Dies
ist aber intuitiv verständlich und passiert in der Praxis extrem selten.
10.2.3 Vor- und Nachteile
Übersetzungs- und Ladezeit
Die implizite Übersetzung ist für uns extrem bequem, denn die Ent-
wicklungszyklen werden verkürzt, und wir müssen nicht erst explizit
übersetzen, bevor wir unser Programm verwenden können. Natürlich
verschieben wir aber damit die Übersetzungszeit in die Ladezeit hinein,
was bei größeren Projekten hinderlich sein kann.
Während wir für ein kleines Groovy-Programm nicht unbedingt
eine Entwicklungsumgebung starten, ist dies für größere Projekte
eigentlich selbstverständlich. Mit einer Entwicklungsumgebung ist
aber das Argument der Verzögerung durch den expliziten Überset-
zungsschritt hinfällig, da heutige Entwicklungsumgebungen das im
Hintergrund machen können. Sobald wir also eine Entwicklungsum-
gebung starten, ist im Normalfall der Zeitpunkt gekommen, zu dem
wir von der impliziten zur expliziten Übersetzung wechseln.
Spätestens hier wird dann auch die Verwendung von Ant, Gant
beziehungsweise Maven (oder ähnlichen Werkzeugen) ein Thema.
Klassenlader-Problematik
Wenn wir den Groovy-Klassenlader für das Laden von Groovy-
Dateien verwenden wollen, bedeutet dies natürlich, dass wir ihn in die
Klassenladerhierarchie einbringen müssen.
Es gibt aber genügend Fälle, in denen wir dies nicht machen wollen
oder können. Nehmen wir als Beispiel ein Framework, das die volle
Kontrolle über die Klassenladerhierarchie ausübt. Dann haben Sie ent-
weder Glück und der Groovy-Klassenlader wird unterstützt, oder Sie
sind gezwungen, aufgrund der Klassenladerbeschränkungen zur expli-
ziten Übersetzung zu wechseln.
Ein weiterer Aspekt an dieser Stelle ist die Zeit, die für die Überset-
zung benötigt wird. Während dies bei kleinen Programmen nicht im
mindesten ins Gewicht fällt, kann bei größeren Systemen, die unter
Last sind, hier durchaus messbare Zeit vergehen. Auch in diesem Fall
ist es besser, den Weg über den Groovy-Klassenlader aufzugeben und
die explizite Übersetzung zu wählen.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required