java - 从 Java/Scala 实例化 Rhinoscript native 对象

标签 java scala native rhino instantiation

我正在尝试提高 javascript 代码段评估器的性能。这些脚本片段可以引用类似 json 对象图的字符串键控映射中存在的任意数量的变量(IE:Json AST)。我使用的是 JDK 1.6 和嵌入式 Rhinoscript 引擎 (v1.6R2)。

目前,处理采用以下形式:

  1. 解析代码片段以发现引用变量的名称
  2. 从映射中检索变量并将其序列化为 json 字符串
  3. Json 字符串在脚本开头分配给一个类似名称的变量
  4. 评估增强脚本

我试图弄清楚如何跳过 json 序列化阶段并创建直接的 Rhinoscript native 对象以放置在脚本的“绑定(bind)”中。所需的步骤将是:

  1. 解析代码片段以发现引用变量的名称
  2. 从 map 中检索变量并转换为本地 Rhinoscript 等效项
  3. 原生对象放置在绑定(bind)中
  4. 使用所述绑定(bind)评估原始脚本

你知道在哪里可以找到有关如何实例化 native rhinoscript 对象的文档或示例吗?

如果您想进行修补,我的 scala 学习项目可能会有一些用处。我想出的任何答案也应该出现在那里......

http://subversion.assembla.com/svn/freshcode_public/learn_scala/datastore/src/test/scala/pkg/script

提前致谢。

最佳答案

经过多次摆弄,我想出了一个足够的解决方案,尽管它没有带来我所希望的性能提升(仅快了 10%)。

该解决方案特定于 Scala/Lift/Json,包含在 ScriptingUtil.scala 中文件。

总结一下:

  1. Context.javaToJs() 似乎并非在所有情况下都有效。 (java.lang.RuntimeException:没有与当前线程关联的上下文)
  2. 需要Scriptable类型的“范围”对象。我想出的解决方案并不漂亮,但它有效。
  3. 创建 NativeArray:

    val na = new NativeArray(arr)
    na.setPrototype(ScriptableObject.getClassPrototype(scope, "Array"))
    

关于java - 从 Java/Scala 实例化 Rhinoscript native 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8558405/

相关文章:

java - 如何在特定位置创建断点,而断点后没有任何代码

java - OSGi:Import-Package/Export-Package 和Require-Capability/Provide Capability 有什么区别?

java - 如何解决 ColdFusion 9 中的死锁问题 : coldfusion. util.AbstractCache$Lock

java - 使用 Scala foreach 处理 CQEngine ResultSet 非常慢

java - 其他库的 Scalaz 类型类实例汇总

c++ - 跨平台硬件原生 OpenGL 库,可能带有多媒体?

c# - WPF 窗口应该是 native 所有者窗口的模式,但不是

java - 使用 aws-sdk-java 上传到 S3 存储桶时出现 PermanentRedirect 错误

scala - 如何在 Scala 中链接隐式?

javascript - react native : How do you implement DatePickerAndroid?