簡體   English   中英

Google App Engine中的JDO交易

[英]JDO Transaction in Google App Engine

我正在閱讀以下教程

請看下面的代碼示例。

import javax.jdo.Transaction;

import ClubMembers;   // not shown

// ...
        // PersistenceManager pm = ...;

        Transaction tx = pm.currentTransaction();

        try {
            tx.begin();

            ClubMembers members = pm.getObjectById(ClubMembers.class, "k12345");
            members.incrementCounterBy(1);
            pm.makePersistent(members);

            tx.commit();
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
        }
  1. 這是否意味着,在tx.begin和tx.commit之間的任何代碼塊, 一次只能訪問一個進程/線程 tx.being和tx.commit是否類似於syncrhonized關鍵字? 但是同步保護是擴展到進程級別而不是線程級別嗎?

  2. 對於crementCounterBy,我們是否將方法標頭顯式聲明為已同步? 這是為了確保在整個Web環境中,一次只能有一個進程可以訪問crementCounterBy。 但是,同步保護僅適用於線程級別嗎? 同步關鍵字有幫助嗎? 還是只是多余的,我們將僅依靠tx.begin和tx.commit?

  1. 沒有。

  2. 是的,或者使用ynchronized(Object){}表示法。

該事務僅使您可以回滾自tx.begin()之后所做的任何更改。

您還必須考慮到,在您進行交易時,也可以從同步塊外部訪問ClubMembers。

使用鍵“ k12345”訪問ClubMember的其他功能將看到舊的計數器值,直到您提交為止。

暫無
暫無

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

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