Google App Engine:python延迟库的Java版本?

时间:2010-12-13 18:11:09

标签: google-app-engine

有没有人知道python延迟库的java版本?或者也许是关于如何实现一个的想法?

编辑:App引擎有http://code.google.com/appengine/articles/deferred.html,但该库仅用于python。我正在寻找类似的东西,但它适用于GAE / Java

5 个答案:

答案 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%");