要辨別事務(wù)的邊界。就是啟動(dòng)事務(wù)和提交事務(wù)的邊界。 DAO對(duì)象的每個(gè)方法都對(duì)應(yīng)于一些數(shù)據(jù)庫(kù)操作。如果需要把兩個(gè)或更多個(gè)方法作為一個(gè)事務(wù),則需要在更高的層次定義事務(wù)。
Spring的一個(gè)好處是為事務(wù)提供了一個(gè)統(tǒng)一的抽象,不論底層是用什么實(shí)現(xiàn),如Hibernate, IBatis或者JDBC,都可以使用一個(gè)統(tǒng)一的接口。
如果用Spring來(lái)管理Hibernate事務(wù),最好不要直接使用Hibernate事務(wù)接口,因?yàn)檫@會(huì)造成混亂。如果使用Spring來(lái)管理Hibernate事務(wù),那么就調(diào)用Spring的接口。
事務(wù)中獲取的Connection必須是和事務(wù)關(guān)聯(lián)的那個(gè)Connection,不能直接調(diào)用DataSource的getConnection,如果得到的是不同的Connection,是無(wú)法實(shí)現(xiàn)事務(wù)的。因此,最好調(diào)用Spring的事務(wù)工具類。
事務(wù)管理器,事務(wù)狀態(tài),事務(wù)發(fā)起,事務(wù)提交,事務(wù)回滾等。
Spring事務(wù),對(duì)系統(tǒng)性能的影響有多大,那些更復(fù)雜的分布式事務(wù)如何處理,如何衡量它的性能損耗呢?
JTS是底層接口,JTA是高層接口。
JDBC事務(wù)是局部事務(wù),只能應(yīng)用于當(dāng)前數(shù)據(jù)庫(kù)。如果事務(wù)跨多個(gè)數(shù)據(jù)庫(kù),就必須使用分布式事務(wù)。這個(gè)時(shí)候可以采用JTA。
JTA事務(wù),涉及一個(gè)事務(wù)管理器和多個(gè)資源管理器。資源管理器可以是任何持久性數(shù)據(jù)存儲(chǔ)系統(tǒng),包括數(shù)據(jù)庫(kù)系統(tǒng)、MIS系統(tǒng)、JMS等。
JDBC驅(qū)動(dòng)只有實(shí)現(xiàn)了XAConnection和XAResource接口才能參與JTA事務(wù)。但是一些高級(jí)JavaEE服務(wù)器可以將普通JDBC驅(qū)動(dòng)模擬為支持XA的JDBC驅(qū)動(dòng),這個(gè)模擬過(guò)程是如何完成的?
XAConnection和JDBC Connection的事務(wù)操作是不同的,它絕不能自動(dòng)提交,也絕不能調(diào)用XAConnection的commit和rollback方法,只能調(diào)用UserTransaction對(duì)象的begin,rollback和commit方法。 如何看其底層實(shí)現(xiàn)機(jī)制。或者沒(méi)有必要。
如果只有單個(gè)數(shù)據(jù)庫(kù),使用JTA會(huì)帶來(lái)不必要的復(fù)雜性。不過(guò)對(duì)于Spring來(lái)說(shuō),使用哪種事務(wù)已經(jīng)不重要了,因?yàn)?span style="font-size: 8pt; color: red">它定義了一個(gè)統(tǒng)一的抽象事務(wù)編程模型。并配合聲明式事務(wù),選擇JDBC事務(wù),還是JTA事務(wù),所需要做的,僅僅是修改配置文件。 一般不會(huì)涉及代碼的修改,這是Spring的優(yōu)秀功能之一。
事務(wù)的隔離級(jí)別是由底層數(shù)據(jù)庫(kù)實(shí)現(xiàn)的。而事務(wù)的傳播行為這是應(yīng)用程序自己管理的。
Spring的一個(gè)好處是為事務(wù)提供了一個(gè)統(tǒng)一的抽象,不論底層是用什么實(shí)現(xiàn),如Hibernate, IBatis或者JDBC,都可以使用一個(gè)統(tǒng)一的接口。
如果用Spring來(lái)管理Hibernate事務(wù),最好不要直接使用Hibernate事務(wù)接口,因?yàn)檫@會(huì)造成混亂。如果使用Spring來(lái)管理Hibernate事務(wù),那么就調(diào)用Spring的接口。
事務(wù)中獲取的Connection必須是和事務(wù)關(guān)聯(lián)的那個(gè)Connection,不能直接調(diào)用DataSource的getConnection,如果得到的是不同的Connection,是無(wú)法實(shí)現(xiàn)事務(wù)的。因此,最好調(diào)用Spring的事務(wù)工具類。
事務(wù)管理器,事務(wù)狀態(tài),事務(wù)發(fā)起,事務(wù)提交,事務(wù)回滾等。
Spring事務(wù),對(duì)系統(tǒng)性能的影響有多大,那些更復(fù)雜的分布式事務(wù)如何處理,如何衡量它的性能損耗呢?
JTS是底層接口,JTA是高層接口。
JDBC事務(wù)是局部事務(wù),只能應(yīng)用于當(dāng)前數(shù)據(jù)庫(kù)。如果事務(wù)跨多個(gè)數(shù)據(jù)庫(kù),就必須使用分布式事務(wù)。這個(gè)時(shí)候可以采用JTA。
JTA事務(wù),涉及一個(gè)事務(wù)管理器和多個(gè)資源管理器。資源管理器可以是任何持久性數(shù)據(jù)存儲(chǔ)系統(tǒng),包括數(shù)據(jù)庫(kù)系統(tǒng)、MIS系統(tǒng)、JMS等。
JDBC驅(qū)動(dòng)只有實(shí)現(xiàn)了XAConnection和XAResource接口才能參與JTA事務(wù)。但是一些高級(jí)JavaEE服務(wù)器可以將普通JDBC驅(qū)動(dòng)模擬為支持XA的JDBC驅(qū)動(dòng),這個(gè)模擬過(guò)程是如何完成的?
XAConnection和JDBC Connection的事務(wù)操作是不同的,它絕不能自動(dòng)提交,也絕不能調(diào)用XAConnection的commit和rollback方法,只能調(diào)用UserTransaction對(duì)象的begin,rollback和commit方法。 如何看其底層實(shí)現(xiàn)機(jī)制。或者沒(méi)有必要。
如果只有單個(gè)數(shù)據(jù)庫(kù),使用JTA會(huì)帶來(lái)不必要的復(fù)雜性。不過(guò)對(duì)于Spring來(lái)說(shuō),使用哪種事務(wù)已經(jīng)不重要了,因?yàn)?span style="font-size: 8pt; color: red">它定義了一個(gè)統(tǒng)一的抽象事務(wù)編程模型。并配合聲明式事務(wù),選擇JDBC事務(wù),還是JTA事務(wù),所需要做的,僅僅是修改配置文件。 一般不會(huì)涉及代碼的修改,這是Spring的優(yōu)秀功能之一。
事務(wù)的隔離級(jí)別是由底層數(shù)據(jù)庫(kù)實(shí)現(xiàn)的。而事務(wù)的傳播行為這是應(yīng)用程序自己管理的。