2017-11-16 13 views
3

Nashornの評価済み出力をJavaクラスファイルに変換して後で呼び出すことは可能ですか? (JSP - > Java - >クラスファイルなど)JavaクラスとしてコンパイルされたNashorn出力

NashornがHTML出力を生成するために使用するJavascriptファイルがあります。 javascriptファイルにはコンポーネントごとに異なる機能があり、それぞれのHTML出力を生成します。これらのコンポーネント関数は、そのコンポーネントのコンポーネント名とJSONデータを受け取る "renderServer"関数を通じて動的に呼び出されます。

private ScriptEngine nashorn; 
ScriptEngineManager scriptEngineManager = new ScriptEngineManager(null); 
     this.nashorn = scriptEngineManager.getEngineByName("nashorn"); 
     this.nashorn.eval(new FileReader(jsFile); 
String compName="myComponent1";// Component 1 name 
String jsonData="{....}";// JSON data input for myComponent 
String formatted = "JSON.parse('" + jsonData + "')"; 

String htmlRender = "renderServer(\"" + myComponent1 + "\"," + formatted + ");"; 

Object finalResult = nashorn.eval(htmlRender); 

私は評価のコンパイルされた出力を生成し、コンポーネント名と入力JSONを渡すことで、毎回nashorn.evalやっ代わりのようなJavaクラスを呼び出すようにしたいです。 それを達成することは可能ですか?

+0

いいえ、できません。 – Pointy

+0

@Pointy:本当ですか?それはRhinoで可能でした... –

+0

@ T.J.Crowder ?? JavaScriptを "ラップ"してJavaのように呼び出すことができますが、JavaScriptを実際にコンパイルするのと同じではありません。それはRhinoによってJavaScriptで評価されていましたが、Nashornについて知っていることから、評価方法はバイトコードに変換されているとは限りません。 – Pointy

答えて

0

いいえ、nashornによって生成されたバイトコードを永続化して通常のJavaクラスのように使用する方法はありません。コンパイルされたスクリプトのディスクキャッシュを有効にするための文書化されていない/サポートされていない "--persistent-code-cache"がありますが、これはNashornによって内部的に使用されています。これらのクラスを任意のクラスローダーでロードして、Javaコードからメソッドを呼び出すことはできません。

+0

jjsコマンドで--persistent-code-cacheを使用すると試行されますか? –

+0

はい、そうですが、これは文書化されていない/サポートされていないオプションであることに注意してください。 –

関連する問題