さまざまなクラスローダー内でJavaScriptコードを実行する必要があります。Javaの場合、各タスクは個別のクラスローダーで実行されます。今、私はこれをjavascriptにする必要があります。
ScriptEngine
各クラスローダーでの新しいインスタンスを作成する必要がありますか、それともクラスローダー間で共有しても大丈夫ですか?
あなたの質問から、なぜそのようなクラスローダーの分離を探すのかは明らかではありません。だから、私はここでnashornのクラスローダーを要約しています-多分、あなたはあなたが探しているものを手に入れるでしょう。
Nashornとクラスローダー:
(1)と(2)はカスタマイズできません。nashornコードには、特権コードであるという前提があります。また、生成されたスクリプトクラスローダーとアダプターローダーについての仮定があります。
(3)は、デフォルトでは、nashornエンジンの作成時のスレッドコンテキストクラスローダーです。スレッドコンテキストクラスローダーがnullの場合、Nashorn独自のローダー(拡張ローダー)が使用されます。
したがって、Thread.setContextClassLoader APIを介して適切なスレッドコンテキストローダーを設定した後にNashornエンジンを作成すると、スクリプトエンジンの「アプリクラスローダー」を制御できます。
NashornScriptEngineFactory(nashorn固有のAPI https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/NashornScriptEngineFactory.html)を使用してスクリプトエンジンを作成しても問題がない場合、プログラムで任意のクラスローダーを「アプリクラスローダー」として渡すこともできます。ClassLoader引数を受け入れるNashornScriptEngineFactoryメソッドを確認することをお勧めします。
「アプリクラスローダー」に加えて、オプションで、「アプリクラスローダー」の前に検索される別の追加のクラスローダーを使用することもできます。これは、「-cp」または「-classpath」nashornコマンドラインオプションで指定されます。「nashorn.args」システムプロパティを介してスクリプトエンジンのnashornコマンドラインオプションを指定するか、NashornScriptEngineFactoryクラスのgetScriptEngineメソッドを使用してプログラムで渡すことができることに注意してください。参照:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes
お役に立てれば。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加