有没有人知道python延迟库的java版本?或者也许是关于如何实现一个的想法?
编辑:App引擎有http://code.google.com/appengine/articles/deferred.html,但该库仅用于python。我正在寻找类似的东西,但它适用于GAE / Java
答案 0 :(得分:3)
已经有关于延迟的Java版本的工作,但没有发布。搜索google-appengine-java组的档案可能会显示一些实现此目的的用户代码。请记住,它不像Python那样整洁 - 你必须声明一个实现特定接口的可序列化类,而在Python中几乎任何函数或方法都可以。
答案 1 :(得分:2)
您链接的延迟库依赖于App Engine中的任务队列API。 Task api在java中可用。但是,java作为一种语言并不能真正让你以python的方式传递函数/方法作为参数。因此,可能的情况是,延迟库的java版本看起来不如python版本。
如果你要创建一个(假设某人没有指出我们现有的那个),你可以定义一些类似Deferrable
的接口,并将你想要推迟的动作封装到一个满足该接口的对象中。然后,您必须实现可以处理这些对象的处理程序,并配置Queue
以使用该处理程序。
这里棘手的部分是让Deferrable接口易于使用且语法上很甜,因为与python相比,Java的动态性水平相对较低。
作为一种非常有限的实现,您可以说Deferrable只是一个需要运行的URL。然后你的可延迟接口只需要一个返回字符串的方法,你的处理程序可以非常简单。 OTOH,你刚刚将复杂性推到了实现该URL的任何地方。
答案 2 :(得分:2)
SDK 1.4.3添加了Java support for Deferred Tasks。
答案 3 :(得分:0)
Nah这只适用于python,没有揭示实现它的方法
答案 4 :(得分:0)
有 - JDeferred
JDeferred是一个类似于JQuery的延迟对象的Java Deferred / Promise库。
// deferred object and promise
Deferred deferred = new DeferredObject();
Promise promise = deferred.promise();
promise.done(new DoneCallback() {
public void onDone(Object result) {
...
}
}).fail(new FailCallback() {
public void onFail(Object rejection) {
...
}
}).progress(new ProgressCallback() {
public void onProgress(Object progress) {
...
}
}).always(new AlwaysCallback() {
public void onAlways(State state, Object result, Object rejection) {
...
}
});
// with the reference to deferred object, you can then trigger actions/updates
deferred.resolve("done");
deferred.reject("oops");
deferred.progress("100%");