Scripting mit Java: Das Bean Scripting Framework

Derzeit wird JSR223 („Scripting for the Java platform“, basierend auf der Arbeit an BSF) der letzten öffentlichen Prüfung unterzogen, über die Integration in die Java-Plattform wird abgestimmt. Aber das ist noch Zukunftsmusik. Wer jetzt schon Javas Scriptingfunktionen ausprobieren will, muss BSF 2.3 verwenden, welches auf der Jakarta-Website zu finden ist. Leider ist die Dokumentation reichlich lückenhaft und im Resources-Bereich finden sich viele tote Links. Von daher empfiehlt es sich, den Quellcode herunterzuladen und die javadoc-Dateien mit Ant zu erstellen, falls man die Dokumente zur BSF-API benötigt.

Das BSF ist eine einzelne jar-Datei, die man dem Klassenpfad hinzufügen muss. Es enthält selber keine Sprachen, unterstützt aber standardmäßig Rhino, Jython, Jacl und Net Rexx; Bean Shell, Jruby, Judo Script, Groovy und Object Script bringen alle ihre BSF-Unterstützung mit. Die Sprachen, die man verwenden möchte, muss man selber herunterladen und die entsprechenden jar-Dateien ebenfalls dem Klassenpfad hinzufügen. Für das Beispiel in diesem Artikel benötigt man Jython und Groovy.

Sobald man den Klassenpfad entsprechend ergänzt hat, kann man mit dem Programmieren beginnen. Als Erstes benötigt man einen BSF-Manager:


BSFManager bsfmanager=
new BSFManager();

Der BSF-Manager ermöglicht den Zugriff auf die Script-Engines (BSF-Engines), welche als Schnittstelle zwischen der Scriptsprache und dem Framework dienen. Jede Sprache hat dabei ihre eigene BSF-Engine, welche mit dem BSF-Manager registriert werden muss. Das BSF bringt Engines für die erwähnten unterstützten Sprachen mit und registriert diese automatisch.

Es gibt zwei Möglichkeiten, ein Script auszuführen, entweder über den Aufruf von Eval() oder Exec(). Eval() gibt ein Ergebnis vom Script zurück.

Der erste Parameter ist der Name der Sprache. Der zweite ist eine „Quell“-Angabe: Bei Scripts in Dateien ist dies üblicherweise der Dateiname, in diesem Fall wird allerdings ein literaler String ausgewertet, so dass hier ein Dummywert eingesetzt wurde. Die nächsten beiden Ganzzahlen sind Werte für Zeilen und Spalten als Hilfe, wenn das Script einen Fehler erzeugt. Und schließlich folgt das eigentliche Script, in diesem Fall eine schlichte Berechnung. Eval() und Exec() lösen beide eine BSFException aus, falls etwas im Script schief geht, daher wird der Code in einen try…catch-Block eingeschlossen. Wenn man den Code ausführt, ergibt sich folgende Ausgabe:


org.python.core.PyInteger 54

Damit hat man erfolgreich ein Script ausgeführt. Man beachte, dass der Rückgabewert in diesem Fall eine Instanz von PyInteger ist. Um daraus einen Integer-Wert zu machen, behandelt man den Rückgabewert einfach als String (wie im Beispiel durchgeführt).

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

MadMxShell: Hacker verbreiten neue Backdoor per Malvertising

Die Anzeigen richten sich an IT-Teams und Administratoren. Ziel ist der Zugriff auf IT-Systeme.

2 Tagen ago

April-Patches für Windows legen VPN-Verbindungen lahm

Betroffen sind Windows 10 und Windows 11. Laut Microsoft treten unter Umständen VPN-Verbindungsfehler auf. Eine…

2 Tagen ago

AMD steigert Umsatz und Gewinn im ersten Quartal

Server-CPUs und Server-GPUs legen deutlich zu. Das Gaming-Segment schwächelt indes.

2 Tagen ago

Google stopft schwerwiegende Sicherheitslöcher in Chrome 124

Zwei Use-after-free-Bugs stecken in Picture In Picture und der WebGPU-Implementierung Dawn. Betroffen sind Chrome für…

4 Tagen ago

Studie: 91 Prozent der Ransomware-Opfer zahlen Lösegeld

Die durchschnittliche Lösegeldzahlung liegt bei 2,5 Millionen Dollar. Acht Prozent der Befragten zählten 2023 mehr…

4 Tagen ago

DMA: EU stuft auch Apples iPadOS als Gatekeeper ein

Eine neue Analyse der EU-Kommission sieht vor allem eine hohe Verbreitung von iPadOS bei Business-Nutzern.…

4 Tagen ago