深入理解Java事物原理與應用
一、什麼是JAVA事務
通常的觀念認為,事務僅與資料庫相關。
事務必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性 (isolation)和永續性(durability)的縮寫。事務的原子性表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。一致性表示 當事務執行失敗時,所有被該事務影響的資料都應該恢復到事務執行前的狀態。隔離性表示在事務執行過程中對資料的修改,在事務提交之前對其他事務不可見。持 久性表示已提交的資料在事務執行失敗時,資料的狀態都應該正確。
通俗的理解,事務是一組原子操作單元,從資料庫角度說,就是一組SQL指令,要麼全部執行成功,若因為某個原因其中一條指令執行有錯誤,則撤銷先前執行過的所有指令。更簡答的說就是:要麼全部執行成功,要麼撤銷不執行。
既然事務的概念從資料庫而來,那Java事務是什麼?之間有什麼聯絡?
實際上,一個Java應用系統,如果要操作資料庫,則通過JDBC來實現的。增加、修改、刪除都是通過相應方法間接來實現的,事務的控制也相應轉移到Java程式程式碼中。因此,資料庫操作的事務習慣上就稱為Java事務。
二、為什麼需要Java事務
事務是為解決資料安全操作提出的,事務控制實際上就是控制資料的安全訪問。舉一個簡單例子:比如銀行轉帳業務,賬戶A要將自己賬戶上的1000元轉到B賬 戶下面,A賬戶餘額首先要減去1000元,然後B賬戶要增加1000元。假如在中間網路出現了問題,A賬戶減去1000元已經結束,B因為網路中斷而操作 失敗,那麼整個業務失敗,必須做出控制,要求A賬戶轉帳業務撤銷。這才能保證業務的正確性,完成這個操作就需要事務,將A賬戶資金減少和B賬戶資金增加方 到一個事務裡面,要麼全部執行成功,要麼操作全部撤銷,這樣就保持了資料的安全性。
三、Java事務的型別
Java事務的型別有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。
1、JDBC事務
JDBC 事務是用 Connection 物件控制的。JDBC Connection 介面( ection )提供了兩種事務模式:自動提交和手工提交。 ection 提供了以下控制事務的方法:
public void setAutoCommit(boolean) public boolean getAutoCommit() public void commit() public void rollback()
使用 JDBC 事務界定時,您可以將多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的範圍侷限於一個數據庫連線。一個 JDBC 事務不能跨越多個數據庫。
2、JTA(Java Transaction API)事務
JTA是一種高層的,與實現無關的,與協議無關的API,應用程式和應用伺服器可以使用JTA來訪問事務。
JTA允許應用程式執行分散式事務處理——在兩個或多個網路計算機資源上訪問並且更新資料,這些資料可以分佈在多個數據庫上。JDBC驅動程式的JTA支援極大地增強了資料訪問能力。
如果計劃用 JTA 界定事務,那麼就需要有一個實現 taSource 、 nnection 和 source 介面的 JDBC 驅動程式。一個實現了這些介面的驅動程式將可以參與 JTA 事務。一個 XADataSource 物件就是一個 XAConnection 物件的工廠。 XAConnection s 是參與 JTA 事務的. JDBC 連線。
您將需要用應用伺服器的管理工具設定 XADataSource .從應用伺服器和 JDBC 驅動程式的文件中可以瞭解到相關的指導。
J2EE應用程式用 JNDI 查詢資料來源。一旦應用程式找到了資料來源物件,它就呼叫 onnection() 以獲得到資料庫的連線。
XA 連線與非 XA 連線不同。一定要記住 XA 連線參與了 JTA 事務。這意味著 XA 連線不支援 JDBC 的自動提交功能。同時,應用程式一定不要對 XA 連線呼叫 it() 或者 back() .
相反,應用程式應該使用 n()、 it() 和 back() .
3、容器事務
容器事務主要是J2EE應用伺服器提供的,容器事務大多是基於JTA完成,這是一個基於JNDI的,相當複雜的API實現。相對編碼實現JTA事務管理, 我們可以通過EJB容器提供的容器事務管理機制(CMT)完成同一個功能,這項功能由J2EE應用伺服器提供。這使得我們可以簡單的指定將哪個方法加入事 務,一旦指定,容器將負責事務管理任務。這是我們土建的解決方式,因為通過這種方式我們可以將事務程式碼排除在邏輯編碼之外,同時將所有困難交給J2EE容 器去解決。使用EJB CMT的另外一個好處就是程式設計師無需關心JTA API的編碼,不過,理論上我們必須使用EJB.
四、三種Java事務差異
1、JDBC事務控制的侷限性在一個數據庫連線內,但是其使用簡單。
2、JTA事務的功能強大,事務可以跨越多個數據庫或多個DAO,使用也比較複雜。
3、容器事務,主要指的是J2EE應用伺服器提供的事務管理,侷限於EJB應用使用。
五、總結
Java事務控制是構建J2EE應用不可缺少的一部分,合理選擇應用何種事務對整個應用系統來說至關重要。一般說來,在單個JDBC 連線連線的情況下可以選擇JDBC事務,在跨多個連線或者資料庫情況下,需要選擇使用JTA事務,如果用到了EJB,則可以考慮使用EJB容器事務
以上這篇深入理解Java事務的原理與應用就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援。
-
2017上半年計算機二級Java練習題及答案
計算機等級證書是我們找工作的敲門磚,現在越來越多人重視計算機等級考試。下面是本站小編為大家帶來的2017上半年計算機二級Java練習題及答案,希望對大家的學習有幫助!一、單選題1、結構化程式設計主要強調的是______。A、程式的規模B、程式的易讀性C、程式的執...
-
java的String=a; a==null和a.equals(null)這兩個判斷有什麼區別
1、String的==與equal()在對字串的相等判斷,==判斷的是地址是否相同,equal()判斷的是字元值是否相同。大多數時候==跟equal()的結果都是相同的。這是因為String物件是不變模式的,如果你不是明確地new一個String物件,Java對於String物件的儲存預設的是會把新生成...
-
Java基本元素詳解
生活呆以是甜的,也可以是苦的,但不能是沒味的。你可以勝利,也可以失敗,但你不能屈服,以下是小編為大家搜尋整理了Java基本元素詳解,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!第二章基本元素第一章總結:一平臺&JDK&JRE&JVM&A...
-
linux下執行java程式的sh指令碼教程
文章主要介紹了linux下執行java程式的sh指令碼,僅供參考,但是設定的時候環境變數是最重要的,我就是環境變數一直不對,總是按網上查到的來,不明白怎麼回事,才一直出錯,其實環境變數就是你要執行的java程式所在的位置。接下來是小編為大家收集的linux下執行java程式的sh腳...