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

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

在Java8(开放JDK)上运行Wildfly 8.2.1时,我面临一种奇怪的行为。我特别提到Java8,因为我没有在Java7上看到这个问题

当我的Wildfly模块启动时,我的代码使用Java RhinoScriptEngine加载Java脚本

    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)我没有传递类加载器,它使用的是当前的线程上下文加载器,显然它对依赖模块类没有可见性。我传递了一个类所使用的类加载器,该类是我模块的一部分,它可以工作。