Wildfly 8.2 - ScriptEngineManager.getEngineFactories在服务器启动时为空

时间:2017-03-01 13:30:51

标签: javascript java-8 wildfly-8 rhino

我面临着在Java 8(Open JDK)上运行Wildfly 8.2.1的奇怪行为。我特别提到了Java 8,因为我没有在Java 7上看到这个问题。

在我的Wildfly模块启动时,我有使用Java RhinoScriptEngine加载JavaScripts的代码。

    List<ScriptEngineFactory> engineFactories = engineManager.getEngineFactories();
    ScriptEngine scriptEngine = engineManager.getEngineByName("js");

由于scriptEngine被分配为null,我添加了调试日志,并注意到engineFactories只是一个空的List(好吧,engineFactories本身正在提取仅用于调试目的)。但是,在模块启动完成后,这个确切的代码可以工作,并列出RhinoScriptEngineFactory

Java 8中是否存在Wildfly 8.2未发现的变化,或者我是否需要向模块添加显式依赖项?

1 个答案:

答案 0 :(得分:1)

脚本引擎管理器使用service provider机制枚举ScriptEngineFactory的所有实现。在可从

访问的资源中搜索ScriptEngineFactory服务描述
  1. Thread.currentThread()。getContextClassLoader() - 构造没有参数的ScriptEngnineManage时
  2. Bootrap类加载器 - 使用null参数构造ScriptEngnineManager时
  3. 类加载器 - 构造swith特定类加载器时
  4. 如何创建ScriptEngineManager?

    如果你构造没有参数的ScriptEngineManager:什么在模块启动时和模块启动完成时返回Thread.currentThread()。getContextClassLoader()?

    您可以为您的模块附加(上传到pastebin或某处)module.xml吗?

    在java 8中,rhino脚本引擎被nashorn脚本引擎取代。模块加载后你真的得到了RhinoScriptEngineFactory吗?或者是NashornScriptEngine?