Rhino:暂停、保存状态和恢复javascript的能力
我正在使用Rhino通过Java解释Java脚本。我的用例需要这些javascripts进行(多个)服务调用(RESTful/Webservices/httpget/POST)。其中一些服务调用本质上是异步的(有24小时的SLA) 在这种情况下,我希望能够暂停脚本的执行,序列化状态(将其保存在S3上,将密钥传递给异步服务的有效负载,该服务在回调时返回),并在从服务返回结果时恢复执行 我面临的挑战是ContinuationPending(扩展RuntimeException)不可序列化(因为上下文不可序列化) 问题:是否有其他方法来存储脚本的状态并从其序列化形式中获取它 Javascript:Rhino:暂停、保存状态和恢复javascript的能力,javascript,rhino,java-scripting-engine,Javascript,Rhino,Java Scripting Engine,我正在使用Rhino通过Java解释Java脚本。我的用例需要这些javascripts进行(多个)服务调用(RESTful/Webservices/httpget/POST)。其中一些服务调用本质上是异步的(有24小时的SLA) 在这种情况下,我希望能够暂停脚本的执行,序列化状态(将其保存在S3上,将密钥传递给异步服务的有效负载,该服务在回调时返回),并在从服务返回结果时恢复执行 我面临的挑战是ContinuationPending(扩展RuntimeException)不可序列化(因为上下文
function invokeFooService(arg) {
return foo.bar.Helper.invokeFooServiceAsync(arg);
}
function main() {
// Main JS function
..
var response = invokeFooService(arg);
if (..) {
..
}
}
function invokeFooService(arg) {
return foo.bar.Helper.invokeFooServiceAsync(arg);
}
function main() {
// Main JS function
..
var response = invokeFooService(arg);
if (..) {
..
}
}
爪哇:
我终于找到了解决办法。关键是使用ScriptableOutputStream(序列化)和ScriptableInputStream(反序列化)继续和作用域 下面是工作代码 Javascript:
function invokeFooService(arg) {
return foo.bar.Helper.invokeFooServiceAsync(arg);
}
function main() {
// Main JS function
..
var response = invokeFooService(arg);
if (..) {
..
}
}
function invokeFooService(arg) {
return foo.bar.Helper.invokeFooServiceAsync(arg);
}
function main() {
// Main JS function
..
var response = invokeFooService(arg);
if (..) {
..
}
}
爪哇: