j2ee事務(wù)介紹.ppt_第1頁
j2ee事務(wù)介紹.ppt_第2頁
j2ee事務(wù)介紹.ppt_第3頁
j2ee事務(wù)介紹.ppt_第4頁
j2ee事務(wù)介紹.ppt_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、J2EE事務(wù)介紹,2011-02,什么是事務(wù) 事務(wù)隔離級別 事務(wù)傳播行為 Spring中的三種配置方法,議題,Atomicity:原子性 事務(wù)由一個或多個行為綁在一起組成,好像是一個單獨工作單元。原子性確保在事務(wù)中的所有操作要么都發(fā)生,要么都不發(fā)生。 Consistency:一致性 一旦一個事務(wù)結(jié)束了(不管成功與否),數(shù)據(jù)庫中數(shù)據(jù)的一致的。 Isolation:隔離性 事務(wù)應(yīng)該允許多個用戶操作同一個數(shù)據(jù),一個用戶的操作不會和其他用戶的操作相混淆。 Durability:持久性 一旦事務(wù)完成,事務(wù)的結(jié)果應(yīng)該持久化。,數(shù)據(jù)庫事務(wù) ACID,public interface TransactionD

2、efinition int getPropagationBehavior();/傳播行為 int getIsolationLevel();/隔離級別 int getTimeout();/超時時間 boolean isReadOnly();/只讀 ,事務(wù)特性定義,ISOLATION_DEFAULT Use the default isolation level of the underlying database. ISOLATION_READ_COMMITTED Indicates that dirty reads are prevented; non-repeatable reads and

3、 phantom reads can occur. ISOLATION_READ_UNCOMMITTED Indicates that dirty reads, non-repeatable reads and phantom reads can occur. ISOLATION_REPEATABLE_READ Indicates that dirty reads and non-repeatable reads are prevented; phantom reads can occur. ISOLATION_SERIALIZABLE Indicates that dirty reads,

4、non-repeatable reads and phantom reads are prevented.,隔離級別,Mary的原工資為1000,財務(wù)人員將Mary的工資改為了8000,但未提交事務(wù) Connection con1 = getConnection(); con.setAutoCommit(false); update employee set salary = 8000 where empId =Mary; 與此同時,Mary正在讀取自己的工資 Connection con2 = getConnection(); select salary from employee wher

5、e empId =Mary; mit(); Mary發(fā)現(xiàn)自己的工資變?yōu)榱?000,歡天喜地! 而財務(wù)發(fā)現(xiàn)操作有誤,而回滾了事務(wù),Mary的工資又變?yōu)榱?000 /con1 con1.rollback(); 像這樣,Mary記取的工資數(shù)8000是一個臟數(shù)據(jù)。,臟讀,在事務(wù)1中,Mary 讀取了自己的工資為1000,操作并沒有完成 con1 = getConnection(); select salary from employee empId =Mary; 在事務(wù)2中,這時財務(wù)人員修改了Mary的工資為2000,并提交了事務(wù). con2 = getConnection(); update emp

6、loyee set salary = 2000; mit(); 在事務(wù)1中,Mary 再次讀取自己的工資時,工資變?yōu)榱?000 /con1 select salary from employee empId =Mary; 在一個事務(wù)中前后兩次讀取的結(jié)果并不致,導(dǎo)致了不可重復(fù)讀。,不可重復(fù)讀,目前工資為1000的員工有10人。 事務(wù)1,讀取所有工資為1000的員工。 con1 = getConnection(); Select * from employee where salary =1000; 共讀取10條記錄 這時另一個事務(wù)向employee表插入了一條員工記錄,工資也為1000 con2

7、 = getConnection(); Insert into employee(empId,salary) values(Lili,1000); mit(); 事務(wù)1再次讀取所有工資為1000的員工 /con1 select * from employee where salary =1000; 共讀取到了11條記錄,這就產(chǎn)生了幻像讀。,幻想讀,PROPAGATION_REQUIRED 如果存在一個事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟一個新的事務(wù)。 PROPAGATION_SUPPORTS 如果存在一個事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行。 PROPAGATION_MANDA

8、TORY 支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。 PROPAGATION_REQUIRES_NEW 總是開啟一個新的事務(wù)。如果一個事務(wù)已經(jīng)存在,則將這個存在的事務(wù)掛起。 PROPAGATION_NOT_SUPPORTED 總是非事務(wù)地執(zhí)行,并掛起任何存在的事務(wù)。 PROPAGATION_NEVER 總是非事務(wù)地執(zhí)行,如果存在一個活動事務(wù),則拋出異常 PROPAGATION_NESTED 如果一個活動的事務(wù)存在,則運行在一個嵌套的事務(wù)中. 如果沒有活動事務(wù), 則按PROPAGATION_REQUIRED 屬性執(zhí)行。 嵌套事務(wù)一個非常重要的概念就是內(nèi)層事務(wù)依賴于外層事務(wù)。外層事務(wù)失敗時,會回

9、滾內(nèi)層事務(wù)所做的動作。而內(nèi)層事務(wù)操作失敗并不會引起外層事務(wù)的回滾。,事務(wù)的傳播行為,REQUIRES_NEW PROPAGATION_REQUIRES_NEW 啟動一個新的, 不依賴于環(huán)境的 內(nèi)部 事務(wù). 這個事務(wù)將被完全 commited 或 rolled back 而不依賴于外部事務(wù), 它擁有自己的隔離范圍, 自己的鎖, 等等. 當(dāng)內(nèi)部事務(wù)開始執(zhí)行時, 外部事務(wù)將被掛起, 內(nèi)務(wù)事務(wù)結(jié)束時, 外部事務(wù)將繼續(xù)執(zhí)行. NESTED PROPAGATION_NESTED 開始一個 嵌套的 事務(wù), 它是已經(jīng)存在事務(wù)的一個真正的子事務(wù). 潛套事務(wù)開始執(zhí)行時, 它將取得一個 savepoint. 如果這

10、個嵌套事務(wù)失敗, 我們將回滾到此 savepoint. 潛套事務(wù)是外部事務(wù)的一部分, 只有外部事務(wù)結(jié)束后它才會被提交. Conclusion: 由此可見, PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大區(qū)別在于, PROPAGATION_REQUIRES_NEW 完全是一個新的事務(wù), 而 PROPAGATION_NESTED 則是外部事務(wù)的子事務(wù), 如果外部事務(wù) commit, 潛套事務(wù)也會被 commit, 這個規(guī)則同樣適用于 roll back.,嵌套事務(wù) vs. 隔離事務(wù),class A /事務(wù)屬性 PROPAGATION_REQUIR

11、ED methodA() . methodB(); /事務(wù)屬性 PROPAGATION_REQUIRES_NEW methodB() . 此時外部程序?qū)ethodA的調(diào)用只會發(fā)起一個事務(wù),methodB的PROPAGATION_REQUIRES_NEW屬性不會起作用. 因為methodA是在內(nèi)部對methodB直接調(diào)用,AOP聲明式事務(wù)自然就不起作用了。 這就好比:即便你為一個bean配置了事務(wù),但如果別人直接去調(diào)用這個類的實現(xiàn)而不是你配置的那個AOP代理,那么這個調(diào)用就完全不是事務(wù)的了!因為聲明式事務(wù)都是通過事務(wù)代理類-即AOP層來實現(xiàn)的,類里面的直接調(diào)用是沒有通過AOP代理類的,它也不能可進(jìn)行攔截,所以被調(diào)用的方法的事務(wù)聲明不會生效。 但是外部程序?qū)ethodB的調(diào)用仍然是PROPAGATION_REQUIRES_NEW的。,常見誤解, PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論