GoogleAppEngineデータストアの競合状態で何が起こるかを理解しようとしています。私はObjectifyを使用しているので、ここではその表記を使用します。
@Cached
public class Car {
@Id
public Long id;
@Unindexed
public String owner = "C";
}
ownerここで、特定の車のを同時に変更しようとする2つの実行可能ファイルがあるとします。
Car myCar = ofy.get(Car.class, 10);
myCar.owner = "A"; // Other runnable uses "B"
ofy.put(myCar);
System.out.println(ofy.get(Car.class, 10).owner);
この場合、Car(10)が「A」または「B」のどちらによって「所有」されるかは不明であると推測されますが、エラーは報告されません。書き込みがデータストアに永続化されるまで、「敗者」には明らかではありません。printlnsの結果はどうなりますか?
トランザクションを使用した場合、実行可能ファイルの1つ(「敗者」)が例外を発生させたでしょうか?