Estoy usando el paquete javax.script. * Del JDK. Específicamente, estoy usando el motor JavaScript, que, por lo que he leído, parece estar basado en un intérprete Java-JavaScript desarrollado por Mozilla llamado Rhino.Interpretación de JavaScript en Java con Rhino: pausar/reanudar scripts
Lo que espero lograr es básicamente tener mi JavaScript capaz de "pausar" a sí mismo en un cierto punto del código (por ejemplo, a mitad de una llamada de función) y solo reanudarse más tarde cuando Java lo permita asi que.
Para ilustrar lo que quiero decir, imaginar el código 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");
}
Si la "pausa"/"ruptura" parte implica la unión en función de Java y se lleva una referencia a la ScriptEngine actual o lo que sea, que es genial conmigo Creo que eso es lo que probablemente implicará: detener el JavaScript desde Java.
Hice algunos google y encontré que la palabra clave aquí parece ser "continuaciones". Por lo que puedo decir, Rhino solo admite continuaciones en modo interpretado (en comparación con el modo compilado), lo que veo se logra al establecer el "contexto" en -2. Dado que el JDK ScriptEngine incorporado no parece mencionar nada acerca de los contextos (o tal vez me falta), ¿significa esto que tengo que descargar y usar la biblioteca Rhino de Mozilla directamente en su lugar?
¿Y son las continuación de Rhino lo que necesito para lograr esto? He encontrado a useful tutorial en continuaciones de Rhino, pero después de leerlo, no estoy 100% seguro de si esto podrá lograr lo que describí anteriormente. Si este es lo que estoy buscando, entonces mi siguiente pregunta es sobre la "serialización" mencionada: ¿esto significa que cuando reinicie mi script, todas las variables se habrán desactivado a menos que las serialice?
Actualización: Parece que esto es posible con Rhino. Esto es lo que tengo hasta ahora en mi JavaScript; después del código, voy a explicar lo que hace ...
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");
}
Mi "storePause()" función es una función de Java que he escrito, y se une a la de JavaScript, pero en este momento, no hace nada Mi próximo objetivo será desarrollar su código de forma tal que almacene la información de continuación y guiones como objetos Java, para que Java pueda reanudar el guión más tarde.
En este momento, lo que hace es pausar/"romper" el script después de imprimir "Hola" pero antes de imprimir "mundo", por lo que esto me demuestra que es posible pausar un script de esta manera.
Por lo tanto, todo lo que debería haber dejado para averiguar en este momento es cómo reanudar una continuación. Tenga en cuenta que lo anterior funciona con el motor de scripts JDK de forma predeterminada (no he tenido que preocuparme por el modo interpretado frente al modo compilado en este punto, parece ser el modo interpretado por defecto), pero parece el proceso de reanudar un script requerirá la biblioteca de Rhino de Mozilla.
El sitio de blog no responde. –
@JesseGlick gracias por el aviso. Parece que necesito mover mi sitio a un nuevo servidor web o algo. Mientras tanto, aquí hay una versión de archive.org: https://web.archive.org/web/20130730231256/http://www.joshforde.com/blog/index.php/2011/12/tutorial-continuations-in -mozilla-rhino-a-javascript-intérprete-para-java / – Josh1billion