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

标签 javascript java-8 wildfly-8 rhino

我遇到了在 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 服务描述

  1. Thread.currentThread().getContextClassLoader() - 构造 ScriptEngineManage 时不带参数
  2. Bootrap 类加载器 - 当使用 null 参数构造 ScriptEngineManager 时
  3. 类加载器——在构造 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/

相关文章:

javascript - D3 js函数返回未定义

javascript - 由于 'lifting state up',无法访问事件对象

Java 8 FlatMap - 在嵌套表单中添加项目并使用 FlatMap 检索对象

java - Eclipse + Java 8 + 动态网络模块

java - 关于产品的 Wildfly JAX-RS 问题

jakarta-ee - hibernate将 "0_"附加到表名

javascript - 如何从 google 脚本将值传递到 html 页面

javascript - 如何在不刷新的情况下通知数据发生变化?

java-8 - 在java 8中找到具有最大数量小写字符的字符串

java - Hibernate 4.3.10 中的 EJB3PersistEventListener 在哪里?