Я использую пакет javax.script. * JDK.В частности, я использую движок JavaScript, который, судя по тому, что я прочитал, основан на интерпретаторе JavaScript-in-Java, разработанном Mozilla под названием Rhino.
Чего я надеюсь добитьсяв основном, чтобы мой JavaScript мог «останавливать» себя в определенной точке кода (скажем, на полпути через вызов функции) и возобновлять себя только позже, когда Java это позволяет.
Чтобы проиллюстрировать, чтоЯ имею в виду, представьте этот код JavaScript:
function myJSFunction() {
print("Hello ");
mysteriousPauseFunction(); // this is the part I'm wondering about. basically, the script should break here and resume later at Java's discretion...
// upon reaching this comment, we know now that Java has told JavaScript that it's okay to resume, so the next line will now be executed...
print("world");
}
Если часть «пауза» / «разрыв» включает в себя привязку функции Java и передачу ей ссылки на текущий ScriptEngine или что-то еще, это круто для меня.Я думаю, что это, вероятно, будет связано с приостановкой JavaScript изнутри Java.
Я немного погуглил и обнаружил, что ключевое слово здесь выглядит как «продолжение».Из того, что я могу сказать, Rhino поддерживает только продолжения в интерпретируемом режиме (в отличие от скомпилированного режима), что, как я вижу, достигается путем установки «контекста» в -2.Поскольку встроенный JDK ScriptEngine, кажется, ничего не упоминает о контекстах (или, может быть, я его упускаю), означает ли это, что мне придется вместо этого загружать и использовать библиотеку Mozilla Rhino напрямую?
И Rhino?продолжения что мне нужно для этого?Я нашел полезное руководство по продолжениям Rhino, но, прочитав его, я не уверен на 100%, сможет ли это выполнить то, что я описал выше.Если это , что я ищу, тогда мой следующий вопрос касается упомянутой «сериализации»: означает ли это, что когда я возобновлю свой сценарий, все переменные будут сброшены, если я их не сериализую??
Обновление: Похоже, это возможно с Rhino.Вот что у меня есть в моем JavaScript;после кода я объясню, что он делает ...
var end = new Continuation();
function myJSFunction()
{
print("Hello ");
var kont = new Continuation();
storePause(script, kont); // script is previously bound by Java into the JavaScript. it is a reference to the script itself.
end();
print("world");
}
Моя функция "storePause ()" - это функция Java, которую я написал, и она привязана к JavaScript, но сейчасничего не делает.Моя следующая цель будет сделать его код таким, чтобы он сохранял информацию о продолжении и сценарии как объекты Java, чтобы Java могла возобновить выполнение сценария позднее.
Прямо сейчас, то, что он делает, это приостанавливает / «ломает»сценарий после «Hello» печатается, но до «world», так что это доказывает мне, что можно приостановить сценарий таким образом.
Итак, все, что мне нужно было выяснить наэтот момент, как возобновить продолжение.Обратите внимание, что вышеперечисленное работает по умолчанию с использованием механизма сценариев JDK (на данном этапе мне не нужно было беспокоиться о интерпретируемом режиме по сравнению с компилируемым режимом - похоже, по умолчанию это интерпретированный режим), но это похоже на процесс возобновления скриптапотребуется библиотека Mozilla's Rhino.