Scripting mit Java: Das Bean Scripting Framework

Exec() funktioniert wie Eval(), nur liefert es keinen Rückgabewert. Man mag sich fragen, wie der Java-Code dann überhaupt mit dem Script interagiert. Es müssen die Java-Objekte innerhalb des Scripts sichtbar gemacht werden. BSF-Manager kümmert sich um diese Aufgabe mithilfe von zwei Methoden: registerBean und declareBean. Trotz der Verwendung des Begriffs „Bean“ kann man dem Script beliebige Java-Objekte übergeben:


Targets targets=new Targets();
bsfmanager.registerBean("targets",targets);

Dies ermöglicht es dem Script, auf ein Objekt über dessen Namen zuzugreifen, zum Beispiel in Jython:


bsf.lookupBean("targets")

Falls man kein Lookup von Instanzen durchführen will, kann man declareBean() verwenden: declareBean fügt das Objekt der Lookup-Tabelle hinzu, versucht aber auch, in allen aufgerufenen Scripts automatisch eine Variable zu erzeugen.


bsfmanager.declareBean(
"targets",targets,Target.class);

Das bedeutet, dass man mit der Namensgebung etwas vorsichtig sein muss, um Probleme mit Namespaces zu umgehen, zugleich vermeidet man so aber auch überflüssige Lookups in den Scripts.

Wenn die Scripts erst einmal prinzipiell funktionieren, kann man als Nächstes dem Code beibringen, nicht nur literale Strings und hartcodierte Sprachnamen als Scripts zu übernehmen. Angenommen, die Scripts liegen in Dateien vor: der folgende Code veranlasst dann den BSF-Manager, anhand des Dateinamens zu bestimmen, welche Sprache verwendet werden soll:


String scriptlanguage=
bsfmanager.getLangFromFilename(
scriptfilename);

Man muss den eigentlichen Inhalt der Datei in einen String laden, um das Script ausführen zu können. Das scheint etwas umständlich zu sein, aber man bedenke, dass die zu ladenden Scripts auch in einer Datenbank abgelegt sein können, über ihren Dateinamen referenziert werden oder man einen Script-Cache implementiert haben kann. Da ist es praktischer, wenn das BSF mit Strings für die Scripts arbeitet und dem Programmierer die Aufgabe überlässt, wie er die Scripts lädt. Im Beispielcode gibt es dafür die Methode getStringFromFile:


String scriptcode=getStringFromFile(
scriptfilename);

Und schließlich soll der Code ausgeführt werden:


bsfmanager.exec(
scriptlanguage,scriptfilename,0,0,scriptcode);

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

Sicherheitslücken in Überwachungskameras und Video-Babyphones

Schwachstellen aus der ThroughTek Kaylay-IoT-Plattform. Dringend Update-Status der IoT-Geräte prüfen.

6 Tagen ago

AWS investiert Milliarden in Cloud-Standort Brandenburg

Fast acht Milliarden Euro fließen in die deutsche Region der AWS European Sovereign Cloud. Das…

6 Tagen ago

DSL oder Kabel – Welcher Anschluss passt zu Ihnen?

Internet in den eigenen vier Wänden ist heutzutage nicht mehr wegzudenken. Denn egal, ob Homeoffice…

6 Tagen ago

Hochsichere Software für Electronic Knee Boards der Bundeswehrpiloten

Im Rahmen der umfassenden Digitalisierung der Bundeswehr ersetzen Electronic Knee Boards die herkömmlichen Handbücher von…

6 Tagen ago

Mai-Patchday: Microsoft schließt zwei aktiv ausgenutzte Zero-Day-Lücken

Sie betreffen Windows 10, 11 und Windows Server. In SharePoint Server steckt zudem eine kritische…

7 Tagen ago

Firefox 126 erschwert Tracking und stopft Sicherheitslöcher

Mozilla verteilt insgesamt 16 Patches für Firefox 125 und älter. Zudem entfernt der Browser nun…

7 Tagen ago