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