在Spring中集成Hibernate事務
發表于:2007-07-04來源:作者:點擊數:
標簽:
"""""" 本文試圖解釋如何使用Spring來集成組件(包括組件的事務關系)。在J2EE應用程序中,連接到單個存儲數據沒有什么困難。但是一旦要求集成企業級組件的時候,情況就復雜了。一個組件一般會受到一個或多個存儲數據的支持,因此當我們提到集成一個或多個組
""""""
本文試圖解釋如何使用Spring來集成組件(包括組件的事務關系)。在J2EE應用程序中,連接到單個存儲數據沒有什么困難。但是一旦要求集成企業級組件的時候,情況就復雜了。一個組件一般會受到一個或多個存儲數據的支持,因此當我們提到集成一個或多個組件的時候,我們就認為需要跨越多個組件、維護多個數據存儲中的原子操作。J2EE
服務器為這些組件提供了一個容器,這個容器可以管理這些事務性原子操作和跨組件的隔離。如果我們沒有使用J2EE服務器,Spring可以幫助我們。Spring在集成組件服務和它們相關的事務關系的時候,是基于控制倒置(Inversion of Control)的。
集成(Assembling)組件事務 假設在我們的企業組件庫中,已經擁有了一個審計(audit)組件,客戶端可以調用它的服務方法。后來,當我們希望建立一個訂單
處理系統的時候,我們發現了一個設計
需求:OrderListManager組件服務也需要審計組件服務。OrderListManager建立和管理訂單,因此所有的OrderListManager服務都有自己的事務屬性。當我們在OrderListManager服務內部調用審計組件的時候,會把OrderListManager服務的事務關系(context)傳遞到審計服務中。也許在未來某個時候,某個新的業務服務組件也需要審計組件服務,但是該審計服務將會在一個完全不同的事務關系中被調用。其實際結果是,雖然審計組件的功能仍然沒有變化,但是它可以與其它的業務服務功能組合使用,使用混合和匹配(mix-and-match)的事務屬性來提供不同的運行時(
run time)事務行為。
圖1顯示了兩個相互獨立的調用關系流。在流1中,如果客戶端擁有TX關系,OrderListManager要么參與它,要么啟動一個新的TX,這依賴于Client是否在某個TX中,以及為OrderListManager方法提供了什么樣的TX屬性。OrderListManager服務接下來調用AuditManager方法的時候,這樣的解釋也是正確的。