检测事务是否失败并使用 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 中,更正了行为以匹配文档。这是尝试次数。
我正在使用 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 中,更正了行为以匹配文档。这是尝试次数。