检测交易是否失败并重新运行客观化

时间:2015-09-08 08:54:27

标签: java google-app-engine transactions objectify

我使用objectify作为GAE数据存储区的接口,我想知道如何检测事务何时失败。也就是说,当你打电话

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

如果抛出异常,则再次调用vrun()方法。我想在发生这种情况时记录。我尝试了很多东西 - 用try / catch包含vrun()的内容,传递对布尔标志的引用等等。但这似乎不起作用。我可能会出错的任何想法?

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

1 个答案:

答案 0 :(得分:0)

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

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

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