下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、關(guān)于Java事務(wù)原理的探討摘要:一般情況下,J2EE應(yīng)用服務(wù)器支持JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、EJB容器管理事務(wù)。本文將向您詳細(xì)介紹Java事務(wù)的概念、原理、類型及應(yīng)用。Java事務(wù)控制是構(gòu)建J2EE應(yīng)用不可缺少的一部分,合理選擇應(yīng)用何種事務(wù)對(duì)整個(gè)應(yīng)用系統(tǒng)來說至關(guān)重要。關(guān)鍵詞:Java事務(wù);EJB;事務(wù)處理;JTA一、JAVA事務(wù)的概念 一般的概念認(rèn)為:事務(wù)僅與數(shù)據(jù)庫相關(guān)。 在數(shù)據(jù)庫操作中,一項(xiàng)事務(wù)是指由一條或多條對(duì)數(shù)據(jù)庫更新的sql語句所組成的一個(gè)不可分割的工作單元。只有當(dāng)事務(wù)中的所有操作都正常完成了,整個(gè)事務(wù)才能被提交到數(shù)據(jù)庫,如果有一項(xiàng)操作沒有完
2、成,就必須撤消整個(gè)事務(wù)。我們通過提交commit()或是回滾rollback()來結(jié)束事務(wù)的操作。關(guān)于事務(wù)操作的方法都位于接口java.sql.Connection中。 Java事務(wù)必須服從ISO/IEC所制定的ACID原則。ACID是原子性、一致性、隔離性和持久性的縮寫。事務(wù)的原子性表示事務(wù)執(zhí)行過程中的任何失敗都將導(dǎo)致事務(wù)所做的任何修改失效。一致性表示當(dāng)事務(wù)執(zhí)行失敗時(shí),所有被該事務(wù)影響的數(shù)據(jù)都應(yīng)該恢復(fù)到事務(wù)執(zhí)行前的狀態(tài)。隔離性表示在事務(wù)執(zhí)行過程中對(duì)數(shù)據(jù)的修改,在事務(wù)提交之前對(duì)其他事務(wù)不可見。持久性表示已提交的數(shù)據(jù)在事務(wù)執(zhí)行失敗時(shí),數(shù)據(jù)的狀態(tài)都應(yīng)該正確。 通俗的理解,事務(wù)是一組原子操作單元,從
3、數(shù)據(jù)庫角度說,就是一組SQL指令,要么全部執(zhí)行成功,若因?yàn)槟硞€(gè)原因其中一條指令執(zhí)行有錯(cuò)誤,則撤銷先前執(zhí)行過的所有指令。更簡答的說就是:要么全部執(zhí)行成功,要么撤銷不執(zhí)行。 一個(gè)Java應(yīng)用系統(tǒng),如果要操作數(shù)據(jù)庫,則通過JDBC來實(shí)現(xiàn)的。增加、修改、刪除都是通過相應(yīng)方法間接來實(shí)現(xiàn)的,事務(wù)的控制也相應(yīng)轉(zhuǎn)移到Java程序代碼中。因此,數(shù)據(jù)庫操作的事務(wù)習(xí)慣上就稱為Java事務(wù)。 二、Java事務(wù)的必要性 事務(wù)是為解決數(shù)據(jù)安全操作提出的,事務(wù)控制實(shí)際上就是控制數(shù)據(jù)的安全訪問。一個(gè)簡單例子:比如銀行轉(zhuǎn)帳業(yè)務(wù),武漢賬戶A要將自己賬戶上的800元轉(zhuǎn)到深圳B賬戶下面,A賬戶余額首先要減去800元,然后B賬戶要增加
4、800元。該交易的偽碼表示如下: begin transaction accountA := accountA - 800 accountB := accountB + 800 commit transaction 假如在中間網(wǎng)絡(luò)出現(xiàn)了問題,A賬戶減去800元已經(jīng)結(jié)束,B因?yàn)榫W(wǎng)絡(luò)中斷而操作失敗,那么整個(gè)業(yè)務(wù)失敗,必須做出控制,要求A賬戶轉(zhuǎn)帳業(yè)務(wù)撤銷。這才能保證業(yè)務(wù)的正確性,完成這個(gè)操走就需要事務(wù),將A賬戶資金減少和B賬戶資金增加方到一個(gè)事務(wù)里面,要么全部執(zhí)行成功,要么操作全部撤銷,這樣就保持了數(shù)據(jù)的安全性。 事務(wù):所有步驟要么全部完成,要么一個(gè)都不做。否則數(shù)據(jù)完整性將被破壞。因?yàn)槭聞?wù)中的所有步
5、驟被看作一個(gè)統(tǒng)一的整體,所以事務(wù)一般被定義為一個(gè)不可分割的工作單元。 三、Java事務(wù)的類型及差異 Java事務(wù)的類型有三種:JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、容器事務(wù)。一般情況下,最好不要在程序中同時(shí)使用上述三種事務(wù)類型,比如在JTA事務(wù)中嵌套JDBC事務(wù)。第二方面,事務(wù)要在盡可能短的時(shí)間內(nèi)完成,不要在不同方法中實(shí)現(xiàn)事務(wù)的使用 1、JDBC事務(wù) JDBC 事務(wù)是用 Connection 對(duì)象控制的。打開一個(gè)連接對(duì)象Connection時(shí),缺省是auto-commit模式,每個(gè) SQL語句都被當(dāng)作一個(gè)事務(wù),即每次執(zhí)行一個(gè)語句,都會(huì)自動(dòng)的得到事務(wù)確認(rèn)。JDBC
6、 Connection 接口(java.sql.Connection )提供了兩種事務(wù)模式:自動(dòng)提交和手工提交。 java.sql.Connection 提供了以下控制事務(wù)的方法: public void setAutoCommit(boolean) public boolean getAutoCommit() public void commit() public void rollback() 使用 JDBC 事務(wù)界定時(shí),您可以將多個(gè) SQL 語句結(jié)合到一個(gè)事務(wù)中。JDBC 事務(wù)的一個(gè)缺點(diǎn)是事務(wù)的范圍局限于一個(gè)數(shù)據(jù)庫連接。一個(gè) JDBC 事務(wù)不能跨越多個(gè)數(shù)據(jù)庫。 2、JTA(Java Tr
7、ansaction API)事務(wù) JTA是一種高層的,與實(shí)現(xiàn)無關(guān)的,與協(xié)議無關(guān)的API,應(yīng)用程序和應(yīng)用服務(wù)器可以使用JTA來訪問事務(wù)。 JTA允許應(yīng)用程序執(zhí)行分布式事務(wù)處理在兩個(gè)或多個(gè)網(wǎng)絡(luò)計(jì)算機(jī)資源上訪問并且更新數(shù)據(jù),這些數(shù)據(jù)可以分布在多個(gè)數(shù)據(jù)庫上。JDBC驅(qū)動(dòng)程序的JTA支持極大地增強(qiáng)了數(shù)據(jù)訪問能力。 如果計(jì)劃用 JTA 界定事務(wù),那么就需要有一個(gè)實(shí)現(xiàn) javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驅(qū)動(dòng)程序。一個(gè)實(shí)現(xiàn)了這些接口的驅(qū)動(dòng)程序?qū)⒖梢詤⑴c JTA 事務(wù)。一個(gè) XAData
8、Source 對(duì)象就是一個(gè) XAConnection 對(duì)象的工廠。 XAConnection s 是參與 JTA 事務(wù)的 JDBC 連接。您將需要用應(yīng)用服務(wù)器的管理工具設(shè)置 XADataSource .從應(yīng)用服務(wù)器和 JDBC 驅(qū)動(dòng)程序的文檔中可以了解到相關(guān)的指導(dǎo)。 J2EE應(yīng)用程序用 JNDI 查詢數(shù)據(jù)源。一旦應(yīng)用程序找到了數(shù)據(jù)源對(duì)象,它就調(diào)用 javax.sql.DataSource.getConnection() 以獲得到數(shù)據(jù)庫的連接。XA 連接與非 XA 連接不同。一定要記住 XA 連接參與了 JTA 事務(wù)。這意味著 XA 連接不支持 JDBC 的自動(dòng)提交功能。同時(shí),應(yīng)用程序一定不要對(duì)
9、 XA 連接調(diào)用 java.sql.Cmit() 或者 java.sql.Connection.rollback()相反,應(yīng)用程序應(yīng)該使用 UserTransaction.begin()、 UserTmit() 和 serTransaction.rollback() . 3、容器事務(wù) 容器事務(wù)主要是J2EE應(yīng)用服務(wù)器提供的,容器事務(wù)大多是基于JTA完成,這是一個(gè)基于JNDI的,相當(dāng)復(fù)雜的API實(shí)現(xiàn)。相對(duì)編碼實(shí)現(xiàn)JTA事務(wù)管理,我們可以通過EJB容器提供的容器事務(wù)管理機(jī)制(CMT)完成同一個(gè)功能,這項(xiàng)功能由J2EE應(yīng)用服務(wù)器提供。這使得我們可
10、以簡單的指定將哪個(gè)方法加入事務(wù),一旦指定,容器將負(fù)責(zé)事務(wù)管理任務(wù)。這是我們土建的解決方式,因?yàn)橥ㄟ^這種方式我們可以將事務(wù)代碼排除在邏輯編碼之外,同時(shí)將所有困難交給J2EE容器去解決。使用EJB CMT的另外一個(gè)好處就是程序員無需關(guān)心JTA API的編碼,不過,理論上我們必須使用EJB. 4、三種Java事務(wù)差異 1、JDBC事務(wù)控制的局限性在一個(gè)數(shù)據(jù)庫連接內(nèi),但是其使用簡單。 2、JTA事務(wù)的功能強(qiáng)大,事務(wù)可以跨越多個(gè)數(shù)據(jù)庫或多個(gè)DAO,使用也比較復(fù)雜。 3、容器事務(wù),主要指的是J2EE應(yīng)用服務(wù)器提供的事務(wù)管理,局限于EJB應(yīng)用使用。 四、總結(jié) Java事務(wù)控制是構(gòu)建J2EE應(yīng)用不可缺少的一部分,合理選擇應(yīng)用何種事務(wù)對(duì)整個(gè)應(yīng)用系統(tǒng)來說至關(guān)重要。一般說來,在單個(gè)JDBC 連接連接的情況下可以選擇JDBC事務(wù),在跨多個(gè)連接或者數(shù)據(jù)庫情況下,需要選擇使用JTA事務(wù),如果用到了EJB,則需要考慮使用EJB容器事務(wù)。 參考文獻(xiàn): 【1】齊勇,趙季中,侯迪,沈鈞毅,曾斌異. 基于Web的中間件系統(tǒng)集成框架應(yīng)用服務(wù)器的研究
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 賓館餐飲部炊事人員招聘協(xié)議
- 鐵路給水設(shè)施改造施工協(xié)議
- 消防隊(duì)電工設(shè)施保障招聘合同
- 學(xué)校衛(wèi)生維護(hù)合同
- 商場(chǎng)噴淋管道施工協(xié)議
- 住宅小區(qū)散水施工合同
- 企業(yè)信息安全風(fēng)險(xiǎn)管理協(xié)議
- 高校交通運(yùn)輸采購合同規(guī)范
- 主題公園花園施工合同樣本
- 2023年初中英語聽課心得體會(huì) 初中英語聽課心得體會(huì)閱讀(優(yōu)質(zhì))相關(guān)范文多篇集錦
- 山東師范大學(xué)《計(jì)算機(jī)基礎(chǔ)》期末考試復(fù)習(xí)題及參考答案
- 2023年內(nèi)蒙古自治區(qū)鄉(xiāng)村醫(yī)生招聘筆試模擬試題及答案解析
- 年產(chǎn)1000萬件日用陶瓷陶瓷廠工藝設(shè)計(jì)
- 新能源汽車概論試題庫及答案
- 城管部門廉潔教育PPT廉潔清風(fēng)進(jìn)城管精華心靈促發(fā)展PPTPPT課件(帶內(nèi)容)
- 年會(huì)小品劇本 搞笑年會(huì)小品劇本;過年
- 小學(xué)廉政教育讀本校本教材
- 2022專精特新小巨人企業(yè)發(fā)展報(bào)告
- GB/T 14361.1-1993船用纖維索滑車木殼滑車
- GB/T 10801.2-2002絕熱用擠塑聚苯乙烯泡沫塑料(XPS)
評(píng)論
0/150
提交評(píng)論