トランザクションのロックを理解しようとしているのと同様のコードが以下にあります。
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サーブレット内から実行されます。たとえば、操作は10秒間機能することが期待されます。その間に、エンティティを削除する別のサーブレットを呼び出すテストがありますPoints
。上記のトランザクションが終了した後、削除操作が失敗するか、少なくともエンティティを削除することを期待していました。
ただし、上記のコードが実行されている間にエンティティが削除されました。私の実際のアプリケーションでは、存在しないエンティティにアクセスまたは編集しようとしたときに例外をスローするための例外処理を追加しました。
そこから、Entity not found"
上記のコードでエンティティを削除するサーブレットを実行した直後に、アプリケーションが「例外」をスローします。
私はすでにGAEトランザクションを使用していますが、まだ何かが足りないと思います。そのため、テストは失敗します。
Deleteサーブレットを使用したdeleteトランザクションのコード:
DAOT.repeatInTransaction(new Transactable() {
@Override
public void run(DAOT daot)
{
Points points = daot.ofy().find(Points.class, POINTS_ID);
daot.ofy().delete(points);
}
});
delete
エンティティのなどの新しい操作が、トランザクション中にエンティティで現在の操作が発生するまで待機するようにするにはどうすればよいですか?