[英]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();
}
}
這是否意味着,在tx.begin和tx.commit之間的任何代碼塊, 一次只能訪問一個進程/線程 ? tx.being和tx.commit是否類似於syncrhonized關鍵字? 但是同步保護是擴展到進程級別而不是線程級別嗎?
對於crementCounterBy,我們是否將方法標頭顯式聲明為已同步? 這是為了確保在整個Web環境中,一次只能有一個進程可以訪問crementCounterBy。 但是,同步保護僅適用於線程級別嗎? 同步關鍵字有幫助嗎? 還是只是多余的,我們將僅依靠tx.begin和tx.commit?
沒有。
是的,或者使用ynchronized(Object){}表示法。
該事務僅使您可以回滾自tx.begin()之后所做的任何更改。
您還必須考慮到,在您進行交易時,也可以從同步塊外部訪問ClubMembers。
使用鍵“ k12345”訪問ClubMember的其他功能將看到舊的計數器值,直到您提交為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.