關(guān)于事務(wù)( Transation ),大家肯定都不陌生了,因?yàn)樽鳛橐粋€(gè) Web 程序開(kāi)發(fā)人員來(lái)說(shuō),我們一般都會(huì)和數(shù)據(jù)庫(kù)打交道,然后對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行一系列的操作,那么為了保證我們對(duì)數(shù)據(jù)操作的合理性我們就不能不用到事務(wù),雖然事務(wù)的實(shí)現(xiàn)不需要我們?nèi)ゲ傩?,但是我們還是需要對(duì)事務(wù)進(jìn)行一些了解,這樣我們才能夠明白我們?nèi)粘K褂玫臇|西,比如我們常用的開(kāi)源框架 Spring Hibernat 等都會(huì)涉及到事務(wù)的問(wèn)題,雖然事務(wù)有很多不同的實(shí)現(xiàn),如符合 JTA 的事先, JDBC 的實(shí)現(xiàn)等等,但是其原理都是差不多的。

?

對(duì)于事務(wù)的理解,這個(gè)我覺(jué)得有必要說(shuō)一下,一般大家看到的理解都是很正式的、書(shū)面的,有時(shí)候讓人覺(jué)得有些亂,并且細(xì)節(jié)的東西太多,在這里我就不說(shuō)說(shuō)課貼書(shū)了,呵呵,那我就把我自己的一點(diǎn)理解說(shuō)一下:剛接觸到事務(wù)的時(shí)候,感覺(jué)還有些模糊,慢慢的感覺(jué)清晰了一些,事務(wù)是為了什么而產(chǎn)生的呢?就是為了對(duì)付并發(fā)而造成的對(duì)數(shù)據(jù)的修改以及讀取時(shí)的錯(cuò)誤(或者說(shuō)是一些不正常的現(xiàn)象),如果沒(méi)有并發(fā),沒(méi)有資源的同時(shí)訪問(wèn),估計(jì)也就用不到事務(wù)這個(gè)玩意了,呵呵,就像我們?cè)趩螕羯鲜褂玫膯斡脩舻能浖粯樱瑧?yīng)該不會(huì)用到事務(wù)吧,一般又沒(méi)有人跟你爭(zhēng),控制個(gè)啥子啊!我覺(jué)得事務(wù)就可以這么理解。

?

而對(duì)于事務(wù)的分類,一般分為本地事務(wù),即一個(gè)數(shù)據(jù)庫(kù)的情況;再一個(gè)就是全局事務(wù),也就是多個(gè)數(shù)據(jù)庫(kù)的情況(其數(shù)據(jù)庫(kù)事務(wù)的控制稱為 XA ),具體的情況可以看下面幾個(gè)鏈接的介紹:

http://blog.csdn.net/ladofwind/archive/2006/09/08/1194812.aspx 關(guān)于數(shù)據(jù)庫(kù)事務(wù)的基本概念

http://www.huihoo.com/middleware/trade_middleware.html 里面有介紹關(guān)于 XA 的內(nèi)容

http://www.javaeye.com/topic/6302 對(duì)跨數(shù)據(jù)庫(kù)事務(wù)的一些討論(總結(jié)一下就是一般采用兩階段提交的方式來(lái)解決跨數(shù)據(jù)庫(kù)的事務(wù)問(wèn)題)

http://msdn2.microsoft.com/zh-cn/library/ckawh9ct(VS.80).aspx MS 的關(guān)于單階段和多階段事務(wù)的提交的一些說(shuō)明文檔

?

并且還要支持 XA 的數(shù)據(jù)庫(kù)連接池,開(kāi)源的如 XAPool 等。

?

要說(shuō)的就是這么多了,估計(jì)也基本夠在 Web 開(kāi)發(fā)中對(duì)其有一個(gè)了解 ~ 如果有更加深入的內(nèi)容再進(jìn)行討論和補(bǔ)充。