从Java / Scala实例化Rhinoscript Native Objects

时间:2011-12-19 07:42:13

标签: java scala native rhino instantiation

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

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

    解析
  1. Snippet以发现引用变量的名称
  2. 从地图中检索变量并序列化为json字符串
  3. Json字符串被分配给脚本开头的类似命名的变量
  4. 评估扩充脚本
  5. 我正在试图弄清楚如何跳过json序列化阶段并创建直接的Rhinoscript本机对象以放置在脚本的“绑定”中。然后,所需的步骤是:

      解析
    1. Snippet以发现引用变量的名称
    2. 从地图中检索变量,转换为原生Rhinoscript等价物
    3. 原生对象放置在绑定
    4. 使用所述绑定评估原始脚本
    5. 您知道吗我在哪里可以找到如何实例化原生rhinoscript对象的文档或示例?

      如果你想修补我的scala学习项目可能会有所帮助。我提出的任何答案也应该出现在那里......

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

      提前致谢。

1 个答案:

答案 0 :(得分:2)

所以经过多次摆弄之后,我提出了一个足够的解决方案,虽然它没有产生我所希望的性能提升(仅提高10%)。

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

总结:

  1. Context.javaToJs()似乎并不适用于所有情况。 (java.lang.RuntimeException: No Context associated with current Thread
  2. 需要Scriptable类型的'范围'对象。我提出的解决方案并不漂亮,但它确实有效。
  3. 创建NativeArray:

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