检测事务是否失败并使用 objectify 重新运行

detect if transaction fails and is rerun with objectify

我正在使用 objectify 作为 GAE 数据存储的接口,并且想知道如何检测事务何时失败。也就是说,当您调用

ofy().transact(new VoidWork() {
    public void vrun() {
    //save entity, this may throw - concurrent modification exception 
    }
});

如果抛出异常,则再次调用vrun()方法。我想在发生这种情况时记录下来。我已经尝试了很多东西——用 try/catch 围绕 vrun() 的内容,传递对布尔标志的引用等。但这似乎不起作用。我有什么地方可能出错的想法吗?

我需要能够以编程方式检测事务是否失败,并在重新尝试之前执行一些代码。

使用 transactNew() 的重载来限制尝试次数:

ofy().transactNew(1, new VoidWork() {
    ...
});

这样您就可以自行管理重试。请注意,在 v5.1.6 之前,# 被错误地用作重试次数(而不是尝试)。在 v5.1.6 中,更正了行为以匹配文档。这是尝试次数。