30 December 2007

Spring 2.x - Dynamic language support

Seit der Version 2.0 unterstützt das Spring Framework dynamische Skriptsprachen wie JRuby, Groovy und BeanShell. Bezüglich JRuby und BeanShell kann ich an dieser Stelle nichts aussagen, da ich die beiden Sprachen nicht genauer kennen. Bezüglich Groovy und Spring hingegen möchte ich ein paar Worte verlieren.

In Groovy hat man die Möglichkeit sogenannte Groovy Skripte anzulegen, welche dann zur Laufzeit als Klasse kompiliert und ausgeführt wird. Diese Skripte ermöglichen gewisse Applikationslogik in Skripte auszulagern und Anpassungen diesen dann ohne erneutes kompilieren (durch den Entwickler oder den Buildrechner à la Continous Integration) durchführen zu können. Über die Nachteile (Einspielen von bösartigem Code, erhöhter Sicherheitsaufwand) dieser Variante möchte ich an dieser Stelle nicht weiter eingehen.

Im nachfolgenden Beispiel sieht man wie man in Spring 2.x (XSD Version, mit der alten DTD Version geht das nicht) ein Groovy Skript als Spring Bean bekannt macht. Mittels dem Attribut refresh-check-delay erhält man die Möglichkeit Spring mitzuteilen, in welchem Zeitinterval es das Groovy Skript auf Veränderungen testen soll. Dieser Mechanismus lässt sich laut Dokumentation auch ausschalten, indem man einen negativen Wert angibt.
<lang:groovy id="messenger" refresh-check-delay="5000"
script-source="classpath:Messenger.groovy">
<lang:property name="message" value="I Can Do The Frug" />
</lang:groovy>
Ein weiteres neues Feature ist die Spring inline dynamic language, welches es dem Entwickler ermöglicht direkt in der spring.xml Datei Groovy Code einzubetten.
<lang:groovy id="messenger">
<lang:inline-script>
package org.springframework.scripting.groovy;

import org.springframework.scripting.Messenger

class GroovyMessenger implements Messenger {

String message
}
</lang:inline-script>
<lang:property name="message" value="I Can Do The Frug" />
</lang:groovy>
Gemäss den Angaben von SpringSource (ehem. Interface21) kann der Einsatz von dynamischen Skriptsprachen in Zusammenhang mit Spring in nachfolgenden Punkten Sinn machen.
  • Scripted Spring MVC Controllers
  • Scripted Validators
Anmerkung: Die Codebeispiele sind alle aus der Spring Dokumentation (Spring 2.5) übernommen worden.

No comments: