Javascript Wildfly 8.2-ScriptEngineManager.GetEngineFactorys在服务器启动时为空
在Java8(开放JDK)上运行Wildfly 8.2.1时,我面临一种奇怪的行为。我特别提到Java8,因为我没有在Java7上看到这个问题 当我的Wildfly模块启动时,我的代码使用Java RhinoScriptEngine加载Java脚本Javascript Wildfly 8.2-ScriptEngineManager.GetEngineFactorys在服务器启动时为空,javascript,java-8,wildfly-8,rhino,Javascript,Java 8,Wildfly 8,Rhino,在Java8(开放JDK)上运行Wildfly 8.2.1时,我面临一种奇怪的行为。我特别提到Java8,因为我没有在Java7上看到这个问题 当我的Wildfly模块启动时,我的代码使用Java RhinoScriptEngine加载Java脚本 List<ScriptEngineFactory> engineFactories = engineManager.getEngineFactories(); ScriptEngine scriptEngine = eng
List<ScriptEngineFactory> engineFactories = engineManager.getEngineFactories();
ScriptEngine scriptEngine = engineManager.getEngineByName("js");
List engineFactories=engineManager.getEngineFactories();
ScriptEngine ScriptEngine=engineManager.getEngineByName(“js”);
由于scriptEngine
被分配为null
,我添加了调试日志,并注意到engineFactories
只是一个空的列表(engineFactories
本身仅用于调试目的)。但是,在模块启动完成后,这段代码将正常工作,并列出RhinoScriptEngineFactory
Java 8中是否存在Wildfly 8.2不知道的更改,或者是否需要向模块添加显式依赖项?脚本引擎管理器使用该机制枚举ScriptEngineFactory的所有实现。在可从访问的资源中搜索ScriptEngineFactory服务描述
Thread.currentThread().getContextClassLoader()-在构造不带参数的ScriptEngineManage时
Bootrap类加载器-使用null参数构造ScriptEngineManager时
类加载器-使用特定类加载器构造时
如何创建ScriptEngineManager
如果构造ScriptEngineManager而不带参数:当模块引导和模块引导完成时,返回Thread.currentThread().getContextClassLoader()的是什么
您可以为您的模块附加(上传到pastebin或其他地方)module.xml吗
在Java8中,rhino脚本引擎被nashorn脚本引擎取代。在加载模块后,您是否真的获得RhinoScriptEngineFactory?或者是纳什引擎 您可能必须使用“nashorn”
而不是“js”
。或者,我认为,“javascript”
可能适用于Rhino和Nashorn。对不起,我不能更确切地说;我试图看看我自己的代码做了什么。但是,在启动完成后,通过应用程序中的另一个功能,相同的代码可以完美地工作。它确实使用Rhino引擎。是的,这看起来很奇怪。你在服务器启动后的什么时候执行engineManager.getEngineFactories()?这与类加载有关。因此,有两个问题-i)rhino JAR是我的模块所依赖的另一个jboss模块的一部分,这解释了为什么它在服务器启动完成后工作。ii)我没有传递类加载器,它使用的是当前的线程上下文加载器,显然它对依赖模块类没有可见性。我传递了一个类所使用的类加载器,该类是我模块的一部分,它可以工作。