我遇到了在 Java 8 (Open JDK) 上运行的 Wildfly 8.2.1 的奇怪行为。我特别提到 Java 8,因为我没有在 Java 7 上看到这个问题。
在启动我的 Wildfly 模块时,我有使用 Java RhinoScriptEngine 加载 JavaScript 的代码。
List<ScriptEngineFactory> engineFactories = engineManager.getEngineFactories();
ScriptEngine scriptEngine = engineManager.getEngineByName("js");
由于 scriptEngine
被分配为 null
,我添加了调试日志并注意到 engineFactories
只是一个空的 List
(好吧,engineFactories
本身只是为了调试目的而被获取)。但是,在模块启动完成后,这段代码有效,并列出了 RhinoScriptEngineFactory
。
Java 8 中是否有一些 Wildfly 8.2 不知道的更改,或者我是否需要向我的模块添加显式依赖项?
最佳答案
脚本引擎管理器使用 service provider枚举 ScriptEngineFactory 的所有实现的机制。在可访问的资源中搜索 ScriptEngineFactory 服务描述
- Thread.currentThread().getContextClassLoader() - 构造 ScriptEngineManage 时不带参数
- Bootrap 类加载器 - 当使用 null 参数构造 ScriptEngineManager 时
- 类加载器——在构造 sw 时使用特定的类加载器
如何创建 ScriptEngineManager?
如果您构建不带参数的 ScriptEngineManager:当模块启动时和模块启动完成时返回 Thread.currentThread().getContextClassLoader() 是什么?
你能为你的模块附加(上传到 pastebin 或其他地方)module.xml 吗?
在 java 8 中,rhino 脚本引擎被 nashorn 脚本引擎取代。你真的在加载模块后得到 RhinoScriptEngineFactory 吗?还是 NashornScriptEngine?
关于javascript - Wildfly 8.2 - ScriptEngineManager.getEngineFactories 在服务器启动时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42533123/