關(guān)于事務(wù)( Transation ),大家肯定都不陌生了,因為作為一個 Web 程序開發(fā)人員來說,我們一般都會和數(shù)據(jù)庫打交道,然后對數(shù)據(jù)庫中的數(shù)據(jù)進行一系列的操作,那么為了保證我們對數(shù)據(jù)操作的合理性我們就不能不用到事務(wù),雖然事務(wù)的實現(xiàn)不需要我們?nèi)ゲ傩?,但是我們還是需要對事務(wù)進行一些了解,這樣我們才能夠明白我們?nèi)粘K褂玫臇|西,比如我們常用的開源框架 Spring 、 Hibernat 等都會涉及到事務(wù)的問題,雖然事務(wù)有很多不同的實現(xiàn),如符合 JTA 的事先, JDBC 的實現(xiàn)等等,但是其原理都是差不多的。
對于事務(wù)的理解,這個我覺得有必要說一下,一般大家看到的理解都是很正式的、書面的,有時候讓人覺得有些亂,并且細(xì)節(jié)的東西太多,在這里我就不說說課貼書了,呵呵,那我就把我自己的一點理解說一下:剛接觸到事務(wù)的時候,感覺還有些模糊,慢慢的感覺清晰了一些,事務(wù)是為了什么而產(chǎn)生的呢?就是為了對付并發(fā)而造成的對數(shù)據(jù)的修改以及讀取時的錯誤(或者說是一些不正常的現(xiàn)象),如果沒有并發(fā),沒有資源的同時訪問,估計也就用不到事務(wù)這個玩意了,呵呵,就像我們在單擊上使用的單用戶的軟件一樣,應(yīng)該不會用到事務(wù)吧,一般又沒有人跟你爭,控制個啥子啊!我覺得事務(wù)就可以這么理解。
而對于事務(wù)的分類,一般分為本地事務(wù),即一個數(shù)據(jù)庫的情況;再一個就是全局事務(wù),也就是多個數(shù)據(jù)庫的情況(其數(shù)據(jù)庫事務(wù)的控制稱為 XA ),具體的情況可以看下面幾個鏈接的介紹:
http://blog.csdn.net/ladofwind/archive/2006/09/08/1194812.aspx 關(guān)于數(shù)據(jù)庫事務(wù)的基本概念
http://www.huihoo.com/middleware/trade_middleware.html 里面有介紹關(guān)于 XA 的內(nèi)容
http://www.javaeye.com/topic/6302 對跨數(shù)據(jù)庫事務(wù)的一些討論(總結(jié)一下就是一般采用兩階段提交的方式來解決跨數(shù)據(jù)庫的事務(wù)問題)
http://msdn2.microsoft.com/zh-cn/library/ckawh9ct(VS.80).aspx MS 的關(guān)于單階段和多階段事務(wù)的提交的一些說明文檔
并且還要支持 XA 的數(shù)據(jù)庫連接池,開源的如 XAPool 等。
要說的就是這么多了,估計也基本夠在 Web 開發(fā)中對其有一個了解 ~ 如果有更加深入的內(nèi)容再進行討論和補充。