資源描述:
《在spring中配置hibernate事務(wù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、本文主要探討怎么用Spring來裝配組件及其事務(wù)管理。在J2EE工程里連接到一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)并不是什么難題,但是如果要綜合組裝企業(yè)類的組件就變得復(fù)雜了。一個(gè)簡(jiǎn)單的組件有一個(gè)或多個(gè)數(shù)據(jù)庫(kù)支撐,所以,我們說到整合兩個(gè)或多個(gè)的組件時(shí),我們希望能夠維持跨組件的許多數(shù)據(jù)庫(kù)的運(yùn)作的原子性。J2EE提供了這些組件的容器,可以保證處理的原子性和獨(dú)立性。在沒有J2EE的情況下我們可以用Spring。Spring基于IoC模式(即反轉(zhuǎn)模式),不僅可以配置組件服務(wù),還可以配置相應(yīng)的方法。為了更好的實(shí)現(xiàn)本文的目的,我們使用Hibernate來做相應(yīng)的后臺(tái)開發(fā)。裝配組件事務(wù)假設(shè)
2、在組件庫(kù)里,我們已經(jīng)有一個(gè)審核組件(auditcomponent),里面有可以被客戶端調(diào)用的方法。接著,當(dāng)我們想要構(gòu)建一個(gè)處理訂單的體系,我們發(fā)現(xiàn)設(shè)計(jì)需要的OrderListManager組件服務(wù)同樣需要審核組件服務(wù)。OrderListManager創(chuàng)建和管理訂單,每一個(gè)服務(wù)都含有自己的事務(wù)屬性。當(dāng)這時(shí)調(diào)用審核組件,就可以把OrderListManager的處理內(nèi)容傳給它。也許將來新的業(yè)務(wù)服務(wù)(businessservice)同樣需要審核組件,那這時(shí)它調(diào)用的事務(wù)內(nèi)容已經(jīng)不一樣了。在網(wǎng)絡(luò)上的結(jié)果就是,雖然審核的功能保持不變,但是可以和別的事件功能組合在一
3、起,用這些方法屬性來提供不同的運(yùn)行時(shí)的處理參數(shù)。在圖1中有兩個(gè)分開的調(diào)用流程。在流程1里,如果客戶端含有一個(gè)TX內(nèi)容,OrderListManager要由一個(gè)新的TX開始或者參與其中,取決于客戶端在不在TX里以及OrderListManager方法指定的TX屬性。這在它調(diào)用AuditManager方法的時(shí)候仍然適用。圖1.裝配組件事務(wù)EJB體系通過裝配者聲明正確的事務(wù)屬性來獲得這種適應(yīng)性。我們不是在探討是否聲明事務(wù)管理,因?yàn)檫@會(huì)使運(yùn)行時(shí)的事務(wù)參數(shù)代碼發(fā)生改變。幾乎所有的J2EE工程提供了分布的事務(wù)管理來配合提交協(xié)議例如X/OpenXAspecifica
4、tion?,F(xiàn)在的問題是我們能不能不用EJB來獲得相同的功能?Spring是其中一種解決方案。來看一下Spring如何處理這樣的問題:用Spring來管理事務(wù)我們將看到的是一個(gè)輕量級(jí)的事務(wù)機(jī)制,實(shí)際上,它可以管理組件層的事務(wù)集成。Spring就是如此。它的優(yōu)點(diǎn)是我們可以不用捆綁在J2EE的服務(wù)例如JNDI數(shù)據(jù)庫(kù)。最棒的是如果我們想把這個(gè)事務(wù)機(jī)制與已經(jīng)存在的J2EE框架組合在一起,沒有任何問題,就好像我們找到了杠桿中完美的支撐點(diǎn)一樣。Spring的另一個(gè)機(jī)制是使用了AOP框架。這個(gè)框架使用了一個(gè)可以使用AOP的Springbeanfactory。在Spri
5、ng特定的配置文件applicationContext.xml里通過特定的組件層的事件來指定。6、="target">PROPAGATION_REQUIREDPROPAGATION_REQUIREDPROPAGATION_REQUIRED7、tem">PROPAGATION_REQUIRED,-com.example.exception.FacadeExceptionPROPAGATION_REQUIRED,readOnlyPROPAGATION_REQUIRED,readOnly
一旦我們?cè)诜?wù)層指定了事務(wù)屬性,它們就被一個(gè)繼承org.springframewo
8、rk.transaction.PlatformTransactionManager接口的類截獲