簡體   English   中英

Google AppEngine:了解數據存儲區交易

[英]Google AppEngine: understanding datastore transactions

最近,我遇到了GAE無法在一次交易中處理多個實體組的煩人問題。 Java偽代碼如下:

public void doit(EntityManager em, long id)
{
  Customer c = null;

  em.getTransaction().begin();

  if (id != 0)
    c = em.find(Customer.class, id);

  boolean create = (c == null);

  if (create)
    c = new Customer();

  c.setName("John Doe");

  if (create)
    em.persist(c);

  em.getTransaction().commit();  
}  

目的是在記錄存在的情況下更新客戶數據,否則創建記錄。 我最后遇到一個異常,抱怨事務中有多個實體組。 由於這些實體屬於不同的實體組,因此不允許在一次交易中查找/更新2個不同的客戶。
所以這是我的(一般)問題:
假設我有一個銀行應用程序,其帳戶實體具有余額字段。 我想在一次交易中將資金從一個帳戶轉移到另一個帳戶,以確保在轉移期間沒有人同時更新兩個帳戶的余額,並且在轉移失敗的情況下,我需要回滾所有內容。 GAE甚至可能出現上述情況嗎?


更新:使用本地dev GAE服務器嘗試XG事務(請參見下面的答案)時,請記住將以下內容添加到VM執行命令中(否則將不起作用):

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM