1

我有一個帶有JSON REST API的GAE應用程序。對於每個實體,我都有一個帶有物化代碼的DAO類,以及一個使用DAO的服務。該服務負責與實體相關的業務邏輯。一些對API的調用預計會在整個服務中使用邏輯,即在多個服務中調用方法。針對某個請求的對象化事務處理的最佳做法

我希望對API的每次調用都是一個事務,即或者所有數據存儲操作都成功並保留,或者如果發生異常,則所有數據存儲操作都會失敗並且它們都不會被保留。 我可以看到,如果我做了兩個單獨的of()。transact(...)並在它們之間引發異常,那麼第一個ofy.transact()的操作會持續存在,但不會是第二個。如果我執行了一個ofy().transact()並且在這裏執行一個數據存儲操作,然後拋出一個異常並執行第二個數據存儲操作,那麼這些操作都不會被持久化。 從這裏我假設只有在ofy()。transact()內引發異常時纔會發生回滾。

我的問題是: 如果我有一個跨服務的API調用,我需要在ofy()。transact中封裝對服務的調用,以確保發生異常時的回滾? 我想在DAO類中保留所有對象的使用,所以另一種解決方案會很棒。

感謝, -Louise

回答

1

事務是一個橫切關注點 - 基本上有點線程局部的狀態。當你開始一個交易時,它會跟隨該線程,直到交易完成(無論您將呼叫嵌套到transact()多少次)。

如果您不想在您的代碼庫中引用特定於Objectify的類,請自行創建transact()的包裝。事務性工作單元是一個廣泛的數據庫概念。

但是請記住,數據存儲區中的事務有一定的限制,您不能以通常使用RDBMS的方式將「啓動事務」應用於任何地方。

相關問題