Создание собственных объектов Rhinoscript из Java / Scala

1

Я пытаюсь улучшить производительность оценщика фрагментов javascript. Эти фрагменты script могут ссылаться на любое количество переменных, которые существуют в строковой карте json-подобных графиков объектов (IE: Json AST). Я использую JDK 1.6 и встроенный движок Rhinocript (v1.6R2).

В настоящее время обработка принимает форму:

  • Разбирается фрагмент, чтобы обнаружить имена ссылочных переменных
  • Переменные извлекаются с карты и сериализуются в строку json
  • Строка Json назначается одинаково названной переменной в начале script
  • Оценить расширенный script

Я пытаюсь выяснить, как пропустить этап сериализации json и создать прямые родственные объекты Rhinocript для размещения в 'bindings' для script. Тогда требуемые шаги:

  • Разбирается фрагмент, чтобы обнаружить имена ссылочных переменных
  • Переменные извлекаются с карты и преобразуются в родные эквиваленты Rhinocript
  • Собственные объекты помещаются в привязки
  • Оценка исходного script с указанными привязками

Знаете ли вы, где я могу найти документацию или примеры того, как создавать экземпляры собственных rhinocript?

Мой учебный проект scala может быть полезен, если вы хотите возиться. И любой ответ, который я придумал, должен появиться там тоже...

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

Спасибо заранее.

  • 0
    Прошу прощения, если мне не хватает чего-то важного, но зачем использовать носорога, а не интерпретатора scala напрямую?
  • 0
    Я оцениваю JavaScript во время выполнения в контейнере сервлета. Это не упражнение для разработки, а особенность нашего продукта, и переводчик scala недоступен. Но спасибо, что спросил.
Показать ещё 1 комментарий
Теги:
native
instantiation
rhino

1 ответ

2
Лучший ответ

Итак, после многократной игры я придумал адекватное решение, хотя это не привело к увеличению производительности, на которое я надеялся (всего на 10% быстрее).

Решение относится к Scala/Lift/Json и содержится в файле ScriptingUtil.scala.

Подводя итог:

  • Context.javaToJs(), похоже, не работает во всех случаях. (java.lang.RuntimeException: No Context associated with current Thread)
  • Требуется объект "scope" типа Scriptable. Решение, которое я придумал, не очень красивое, но оно работает.
  • Чтобы создать NativeArray:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню