咱們在作PB的兩層開發時候,老是本身控制數據庫事務的提交和會滾。沒有辦法,咱們只能這樣操做。sql
默認狀況下,在pb中,數據庫事務是從第一句SQL語句開始的,直到顯示執行commit或則rollback,另外,咱們可能除了使用sqlca這一系統自動定義的數據庫事務對象之外,可能會本身再建立一個或則幾個數據庫事務對象以操做不一樣的數據庫。數據庫
到了EAS下,咱們不能再用這樣的思路考慮問題了。函數
不少人老是試圖在組件中使用commit或則rollback來控制數據庫的提交和會滾,其實,在EAS下,組件中執行commit和rollback根本不會起到任何做用,EAS下,會自動將這兩句放棄而不真正執行,之因此還能夠在組件中寫這兩句,主要是爲了讓早期的兩層的系統能順利地移植到三層上來。另外,在組件中寫commit和rollback,爲非是爲了給本身的代碼增長一些信心罷了。對象
在組件中,數據庫事務已經被組件事務接管,對於客戶端來講,若是使用有狀態組件,則客戶端或組件中能夠控制組件事務的提交和會滾,而不能控制數據庫事務的提交和會滾。生命週期
若是是無狀態組件,則當客戶端調用完一個函數後,EAS將自動根據該組件的完成狀況,決定是提交組件事務仍是會滾組件事務。也就是說,無狀態組件不用顯式調用setcomplete()或則setabort(),但然,你也能夠顯示調用。事務
若是涉及到數據庫的操做,無論是有狀態組件仍是無狀態組件,你都要在發佈組件的時候,選擇組件事務爲「須要事務」,不然,一旦EAS操做數據庫失敗,會滾組件事務的時候,客戶端將會接受到一個TRANSACTION_ROLLACK的異常。不少人都覺得是EAS的BUG,實際上是對組件事務和組件的生命週期不理解形成的。開發