Wir möchten Nashorn in einem Servlet verwenden. Die Idee ist, eine Singleton-Instanz von ScriptEngine zu verwenden, die bei jeder Anfrage wiederverwendet wird. Bei jeder Anforderung wird eine neue EngineScope-Bindung erstellt, und die Überprüfung wird mit dieser Bindung ausgeführt. Dann wird die Bindung gelöscht. Es werden keine gemeinsamen Objekte an die Bindungen übergeben (nur die Anfrage-/Antwortobjekte vom Servlet).Nashorn: gleichzeitige Bewertung mit Singleton ScriptEngine? Gewinde sicher?
Innerhalb der Servlets kann die Singleton-Instanz von ScriptEngine gleichzeitig in verschiedenen Threads ausgewertet werden, wird dies ordnungsgemäß funktionieren oder wird es zu einem Threading-Problem kommen? Hier ist ein Code, der die Idee gibt:
Ich frage mich nur, ob Sie ein bisschen mehr Details über Ihre Einrichtung geben könnten. Wir hatten ähnliche Nebenläufigkeitsprobleme mit Nashorn in einer Webanwendung (serverseitiges Rendering mit React). Wir haben versucht, die Engine in einem ThreadLocal einzubinden, aber die Leistung war sehr schlecht. Wir experimentieren jetzt mit CompiledScript und Invocable. Wie groß ist Ihr Pool? Ich nehme an, wenn Sie keine Anfragen erhalten, die der Thread-Pool-Größe entsprechen, werden Sie Probleme bekommen ... – mryan
Ich entschied mich für einen Pool von Nashorn-Engines. Mein erster Versuch war, einfach einen Pool von Engines zu haben und jedesmal neue Bindings neu zu erstellen (aber das schien jedes Mal, wenn das Script aufgerufen wird, das erneute Kompilieren der Nashorn-Skripte zu erzwingen. Also habe ich ein Wrapper-Objekt erstellt Die Skripte werden nicht jedes Mal neu kompiliert, wenn das Servlet das gleiche Skript aufruft.Wenn das Servlet beendet ist, wird das Wrapper-Objekt an den Pool zurückgegeben – adamM
Ein Reaper-Thread wird so oft aufgerufen die Leistung ist gut genug. Etwas langsamer als ein normales Servlet, aber gut. Es gibt eine Menge kleiner Details darüber, wie man die Skripte aus der Datei lädt, ohne sie neu zu kompilieren. Ich denke über Open Source nach , was denkst du? – adamM