【发布时间】:2012-07-06 19:17:07
【问题描述】:
我在下面有一个类似的代码,我正在尝试找出事务锁定:
DAOT.repeatInTransaction(new Transactable() {
@Override
public void run(DAOT daot)
{
Points points = daot.ofy().find(Points.class, POINTS_ID);
// do something with points
takes_a_very_long_time_delay(); // perhaps 10 secs
daot.ofy().put(points);
}
});
上面的代码是在 Java servlet 中执行的。例如,该操作预计工作 10 秒。在此期间,我有一个测试将调用另一个 servlet,该 servlet 将删除 Points 实体,我预计删除操作将失败或至少在上述事务完成后删除实体。
但是,在上述代码执行期间,实体已被删除。在我的实际应用程序中,我添加了异常处理以在尝试访问或编辑不存在的实体时抛出异常。
从那里,应用程序在我执行将删除上面代码中的实体的 servlet 之后抛出“Entity not found" 异常。
虽然我已经在使用 GAE Transactions,但是我认为我仍然缺少一些东西,这就是我的测试失败的原因。
使用 Delete servlet 删除事务的代码:
DAOT.repeatInTransaction(new Transactable() {
@Override
public void run(DAOT daot)
{
Points points = daot.ofy().find(Points.class, POINTS_ID);
daot.ofy().delete(points);
}
});
我如何确保像delete 这样针对实体的新操作将等到当前操作在事务期间在实体上发生?
【问题讨论】:
标签: google-app-engine objectify