Direkte Ausführung mit dem Rhino-API

Ohne Umwege


Die Kombination von Java und JavaScript eröffnet viele Möglichkeiten, durch die Sicherheitsbrille betrachtet manchmal sogar zu viele. Im zweiten Teil dieser Serie geht es um das Rhino-API, mit dem sich JavaScript direkt ausführen lässt – ohne den Umweg über das standardisierte Prozedere des JSR 223. Der direkte Weg eröffnet nicht nur neue Möglichkeiten, sondern kann den Skripten per Sandbox Grenzen setzen. Skripte aus nicht vertrauenswürdiger Quelle können so nicht mehr auf alle Klassen in der JVM zugreifen.

Artikelserie

Teil 1: JavaScript per Scripting-API auf dem Server ausführen

Teil 2: Direkte Einbindung der Rhino Engine

Im ersten Teil habe ich gezeigt, wie einfach über das in JSR 223 definierte API JavaScript aus Java-Programmen heraus ausgeführt werden kann. Dazu gehören auch der Datenaustausch zwischen den beiden Welten und Aufrufe von Funktionen/Methoden in beiden Richtungen.

Hinter dem JSR 223 [1], dessen Implementierung zum standardisierten Sprachumfang von Java gehört, steckt in Oracles JVM eine abgespeckte Version von Rhino [2]. Oracle (oder war es damals noch Sun?) hat dabei die Packages von org.mozilla nach sun.org.mozilla umbenannt. Neben der immer noch klar zu erkennenden Herkunft ergeben sich daraus einige Konsequenzen: Erst einmal sollte klar sein, dass man in seinem Anwendungscode nie direkt Klassen aus dem sun.* Namensraum einbindet, solcher Code funktioniert mit großer Wahrscheinlichkeit nicht auf Java-Implementierungen anderer Hersteller. Wie wir im ersten Teil gesehen haben, ist dies aber auch in den meisten Fällen nicht notwendig. Der JSR 223 bietet von sich aus schon eine leicht zu nutzende Schnittstelle. Außerdem unterstützt die Schnittstelle auch weitere Sprachen. Eine (nicht unbedingt vollständige) Liste der unterstützten Sprachen findet man unter [3]. Die geänderten Package-Namen eröffnen die Möglichkeit, parallel zu der abgespeckten Implementierung der JVM das originale js.jar von Mozilla in den Klassenpfad aufzunehmen. Nutzt man die dort liegenden Klassen, erhält man sowohl Zugriff auf die durch den JSR 223 verdeckten Features als auch auf die Features, die aus Platz- und Kompatibilitätsgründen in der abgespeckten Version nicht vorhanden sind.

Start mit Rhino, wie geht’s?

Nun aber zur Praxis: Wie ruft man mit Rhino ein Skript auf? Eine Factory für mehrere Sprachen entfällt, Rhino spricht nur JavaScript. Gestartet wird mit einem statischen Methodenaufruf Context.enter(), der beim ersten Aufruf im Thread einen neuen Context...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang