版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
developerWorks中國(guó)>Javatechnology中用JDBC進(jìn)行事務(wù)JTA簡(jiǎn)JTA的事務(wù)界定控制事務(wù)developerWorks中國(guó)>Javatechnology中用JDBC進(jìn)行事務(wù)JTA簡(jiǎn)JTA的事務(wù)界定控制事務(wù)JTA方法使用JTA和JDBC日志記錄和DAODAO中的異常處理實(shí)現(xiàn)實(shí)例:關(guān)于對(duì)本文的評(píng)學(xué)習(xí)編譯更好的DAO的技級(jí)別:初SeanCSullivan(dao-article@),軟件工程20031015J2EE開發(fā)人員使用數(shù)據(jù)訪問對(duì)象(DataAccessObjectDAO)設(shè)計(jì)模式,以便將低級(jí)別的數(shù)據(jù)訪問邏輯與高級(jí)別的業(yè)務(wù)邏輯分離。實(shí)現(xiàn)DAO模式涉及比編寫數(shù)據(jù)訪問代碼更多的內(nèi)容。在本文中,Java開發(fā)人員SeanC.Sullivan討論了DAO編程中三個(gè)常常被忽略的方面:事務(wù)界定、異常處理和日志記錄18個(gè)月中,我參加了一個(gè)由有才華的軟件工程師組成的小組,構(gòu)建定制Web的(metrics)、庫存、貨運(yùn)發(fā)票、項(xiàng)目管理數(shù)據(jù)和用戶信息。我們用JDBCAPI連接到我們公司的不同數(shù)據(jù)庫平臺(tái)上,并在整個(gè)應(yīng)用程序中使用DAO設(shè)計(jì)模式文檔圖1顯示了應(yīng)用程序和數(shù)據(jù)源之間的關(guān)系圖1.應(yīng)用程序和數(shù)據(jù)在整個(gè)應(yīng)用程序中使用數(shù)據(jù)訪問對(duì)象(DAO)使我們可以將底層數(shù)據(jù)訪問邏輯與業(yè)務(wù)邏輯分離來。我們構(gòu)建了為每一個(gè)數(shù)據(jù)源提供GRUD(創(chuàng)建、讀取、更新、刪除)操作的DAO類在本文中,我將為您介紹構(gòu)建更好的DAO類的DAO實(shí)現(xiàn)策略和技術(shù)。更確切地說,我將討論日志、異常處理和事務(wù)界定。您將學(xué)到如何將這三者結(jié)合到自己的DAO類中。本文假定您熟JDBCAPI、SQL和關(guān)系數(shù)據(jù)庫編程我們將以對(duì)DAO設(shè)計(jì)模式和數(shù)據(jù)訪問對(duì)象的概述開始file:///E|/scrapbook/data/20071126181813/index.html(第1/12頁)[2007-11-30文檔中國(guó)[選擇 使用條首 產(chǎn) 服務(wù)與解決方 支持與下 個(gè)性化服DAO模式是標(biāo)準(zhǔn)J2EE設(shè)計(jì)模式之一。開發(fā)人員用這種模式將底層數(shù)DAO模式是標(biāo)準(zhǔn)J2EE設(shè)計(jì)模式之一。開發(fā)人員用這種模式將底層數(shù)據(jù)訪問操作與高層輯分離開。一個(gè)典型的DAO實(shí)現(xiàn)有以下DAO工廠DAO接一個(gè)實(shí)現(xiàn)了DAO接口的具體數(shù)據(jù)傳輸對(duì)象(有時(shí)稱為值對(duì)象具體的DAO類包含訪問特定數(shù)據(jù)源的數(shù)據(jù)的邏輯。在下面一節(jié)中您將學(xué)習(xí)設(shè)計(jì)和實(shí)現(xiàn)數(shù)據(jù)訪問對(duì)象的技術(shù)。有關(guān)DAO設(shè)計(jì)模式的更多內(nèi)容請(qǐng)參閱參考資料。DAO要記住的重要一點(diǎn)是它們是事務(wù)性對(duì)象。DAO所執(zhí)行的每一個(gè)操--如創(chuàng)建、更新或者刪除數(shù)據(jù)--都與一個(gè)事務(wù)相關(guān)聯(lián)。因此,事務(wù)界定的概念就變得特別重要了。事務(wù)界定是定義事務(wù)邊界的方式。規(guī)范描述了兩種事務(wù)界定的模型:編程(programmatic)和聲明式(declarative)。1分析了這兩種模型1.兩種事務(wù)界定的模聲明式事務(wù)界編程式事務(wù)界程序員用EJB部署描述符聲明事務(wù)屬性程序員負(fù)責(zé)編寫事務(wù)邏輯運(yùn)行時(shí)環(huán)境容器)用這些屬性自動(dòng)管理事務(wù)應(yīng)用程序通過一個(gè)API控制事我們將側(cè)重于編程式事設(shè)計(jì)考如前所述,DAO是事務(wù)性對(duì)象。一個(gè)典型的作。在設(shè)計(jì)DAO時(shí),首先要問自己以下執(zhí)行像創(chuàng)建、更新和刪除這樣的事務(wù)事務(wù)要如何開始事務(wù)應(yīng)如何結(jié)束哪一個(gè)對(duì)象將負(fù)責(zé)開始一個(gè)事務(wù)哪一個(gè)對(duì)象將負(fù)責(zé)結(jié)束一個(gè)事務(wù) 是否要負(fù)責(zé)事務(wù)的開始和結(jié)束應(yīng)用程序是否需要通過多個(gè)DAO訪問數(shù)據(jù)事務(wù)涉及到一個(gè)DAO還是多個(gè)DAO是否調(diào)DAO的方法了解上述問題的答案將有助于您選擇最適合的DAO的事務(wù)界定策略。在DAO中有兩種主要的界定事務(wù)的策略。一種方式是讓DAO負(fù)責(zé)界定事務(wù),另一種將事務(wù)界定交給調(diào)用這個(gè)DAO方法的對(duì)象處理。如果選擇了前一種方式,那么就將事務(wù)代碼嵌入到DAO中。如果選擇式,那么事務(wù)界定代碼就是在DAO類外面。我們將使用簡(jiǎn)單的代碼示例幫助您更好理解每一file:///E|/scrapbook/data/20071126181813/index.html(第2/12頁)[2007-11-30方式是如何清單1顯示了一個(gè)有兩種數(shù)據(jù)操作的方式是如何清單1顯示了一個(gè)有兩種數(shù)據(jù)操作的DAO:創(chuàng)建和更新1.DAO方清單2顯示了一個(gè)簡(jiǎn)單的事務(wù)。事務(wù)界定在DAO類外面。注意在這個(gè)例子中調(diào)用者一個(gè)事務(wù)中結(jié)合多個(gè)DAO操作的清單2.調(diào)用者管理的這種事務(wù)界定策略對(duì)于需要在一個(gè)事務(wù)中訪問多個(gè) 的應(yīng)用程序特別有用可以JDBCAPIJavaAPI(JavaTransactionAPIJTA)實(shí)現(xiàn)事務(wù)界定JDBC務(wù)界定比JTA事務(wù)界定要簡(jiǎn)單,但是JTA提供了更多的靈活性。在下面一節(jié)中我將更深入地分JDBC進(jìn)行事務(wù)JDBC事務(wù)是Connection對(duì)象控制的。JDBCConnection接口(java.sql.Connection)提供了兩種事務(wù)模式:自動(dòng)提交和手工提交java.sql.Connection提供了voidsetAutoCommit(boolean)booleangetAutoCommit()voidcommit()void3顯示了如何JDBCAPI界定一個(gè)事務(wù)3.JDBCAPI進(jìn)行事務(wù)界file:///E|/scrapbook/data/20071126181813/index.html(第3/12頁)[2007-11-30 //startthetransactiondao.updateWarehouseStatus(id2, //endthepublicvoidcreateWarehouseProfile(WHProfilepublicvoidupdateWarehouseStatus(WHIdentifierid,StatusInfo使用JDBC事務(wù)界定時(shí),您可以將多個(gè)SQL語使用JDBC事務(wù)界定時(shí),您可以將多個(gè)SQL語句結(jié)合到一個(gè)事務(wù)中。JDBC事務(wù)的一個(gè)缺點(diǎn)事務(wù)的范圍局限于一個(gè)數(shù)據(jù)庫連接。一個(gè)JDBC事務(wù)不能跨越多個(gè)數(shù)據(jù)庫。在下面,我們將看一下如何JTA進(jìn)行事務(wù)界定。因?yàn)镴TA不像JDBC那樣有名,所以我們首先做一個(gè)簡(jiǎn)介。JavaAPI(JTA)及其同門Java事務(wù)服務(wù)(JavaTransactionServiceJTS)J2EE平臺(tái)提供了分布式事務(wù)服務(wù)。一個(gè)分布式的事務(wù)涉及一個(gè)事務(wù)管理器和一個(gè)或者多個(gè)資源管理器。一個(gè)資源管理器是任何類型的持久性的數(shù)據(jù)存儲(chǔ)。事務(wù)管理器負(fù)責(zé)協(xié)調(diào)所有事務(wù)參與者間的通信。事務(wù)管理器與資源管理器之間的關(guān)系如圖2所示圖2.一個(gè)事務(wù)管理器和資源管理JTA事務(wù)JDBC事務(wù)功能更強(qiáng)。JTA事務(wù)可以有多事務(wù)局限為一個(gè)數(shù)據(jù)庫連參與者。所有下列Java平臺(tái)組件都可以參與JTAJDBC連file:///E|/scrapbook/data/20071126181813/index.html(第4/12頁)[2007-11-30importjava.sql.*;//DataSourceds=obtainDataSource();Connectionconn=ds.getConnection();//pstmt=conn.prepareStatement("UPDATEMOVIES...");pstmt.setString(1,"TheGreatEscape");//...//JDOPersistenceManager對(duì)JMS隊(duì)JMS主符合J2EEJDOPersistenceManager對(duì)JMS隊(duì)JMS主符合J2EE連接體系結(jié)構(gòu)(J2EEConnectorArchitecture)規(guī)范的資源適配JTA的事務(wù)JTA進(jìn)行事務(wù)界定,應(yīng)用程序要調(diào)用javax.transaction.UserTransaction接口中的方法。清單4顯示了對(duì)UserTransaction對(duì)象的典型JNDI查詢:4.UserTransaction對(duì)象JDNI查對(duì)象后,就可以開始事務(wù)了,如清單5當(dāng)應(yīng)用程序找到了5.JTA開始一個(gè)事當(dāng)應(yīng)用程序調(diào)用commit()時(shí),事務(wù)管理器用一個(gè)兩階段的提交協(xié)議結(jié)束事務(wù)控制事務(wù)JTA 接口提供了以下事務(wù)控publicvoidfile:///E|/scrapbook/data/20071126181813/index.html(第5/12頁)[2007-11-30//DataSourceds=obtainXADataSource();Connectionconn=pstmt=conn.prepareStatement("UPDATEMOVIES...");pstmt.setString(1,"SpinalTap");////importjavax.naming.*;//InitialContextctx=newUserTransactionutx=(UserTransaction)txObj;voidvoidrollback()int應(yīng)用程序調(diào)voidvoidrollback()int應(yīng)用程序調(diào)用begin()開始事務(wù)。應(yīng)用程序調(diào)用commit()或者rollback()結(jié)束事務(wù)。閱參考資料以了解更多關(guān)于用JTA進(jìn)行事務(wù)管理的內(nèi)JTA和開發(fā)人員通DAO類中JDBC進(jìn)行底層數(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ū)⒖梢詤⑴cJTA事務(wù)。XADataSource對(duì)象就是一XAConnection對(duì)象的工廠XAConnection是參JTA事務(wù)JDBC連接您將需要用應(yīng)用服務(wù)器的管理工具設(shè)置XADataSource。從應(yīng)用服務(wù)器和JDBC文檔中可以了解到相關(guān)J2EE應(yīng)用程序用JNDI查詢數(shù)據(jù)源。一旦應(yīng)用程序找到了數(shù)據(jù)源對(duì)象,它就調(diào)用以獲得到數(shù)據(jù)庫的XA連接與XA連接不同。一定要記XA連接參JTA事務(wù)。這意味XA連接不支持JDBC的自動(dòng)提交功能。同時(shí),應(yīng)用程序一定不要對(duì)XA連接調(diào)用java.sql.Connection.commit()或者java.sql.Connection.rollback()。相反,應(yīng)用程序應(yīng)該使用UserTransaction.begin()、UserTmit()和serTransaction.rollback()我們討論了如何用JDBC和JTA界定事務(wù)。每一種方式都有其優(yōu)點(diǎn),您需要決定
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游餐飲員工績(jī)效總結(jié)
- 木材銷售工作總結(jié)
- 服裝店衛(wèi)生衛(wèi)生規(guī)范標(biāo)準(zhǔn)
- 十年級(jí)化學(xué)學(xué)科的教學(xué)工作總結(jié)
- 制冷空調(diào)行業(yè)人力資源管理實(shí)踐
- 《疼痛治療》課件
- 《房地產(chǎn)市場(chǎng)簡(jiǎn)報(bào)》課件
- 2021年廣東省汕尾市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年四川省德陽市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年內(nèi)蒙古自治區(qū)烏海市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 期末模擬練習(xí)(試題)(含答案)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)西師大版
- 《孫子兵法》與執(zhí)政藝術(shù)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 九宮數(shù)獨(dú)200題(附答案全)
- MOOC 國(guó)際商務(wù)-暨南大學(xué) 中國(guó)大學(xué)慕課答案
- 某醫(yī)院后備人才梯隊(duì)建設(shè)方案
- 二年級(jí)上冊(cè)英語教案Unit6 Lesson22︱北京課改版
- 桂枝加龍骨牡蠣湯_金匱要略卷上_方劑加減變化匯總
- 電機(jī)與電氣控制技術(shù)PPT課件
- 廢棄鉆井泥漿和壓裂返排液無害化處理研究報(bào)告
- 論文-基于單片機(jī)的搶答器.doc
- 《AFM簡(jiǎn)介實(shí)驗(yàn)》ppt課件
評(píng)論
0/150
提交評(píng)論