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);
Neueste Kommentare
Noch keine Kommentare zu Scripting mit Java: Das Bean Scripting Framework
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.