筆記代碼學習_第1頁
筆記代碼學習_第2頁
筆記代碼學習_第3頁
筆記代碼學習_第4頁
筆記代碼學習_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

developerWorks中國>Javatechnology中用JDBC進行事務JTA簡JTA的事務界定控制事務developerWorks中國>Javatechnology中用JDBC進行事務JTA簡JTA的事務界定控制事務JTA方法使用JTA和JDBC日志記錄和DAODAO中的異常處理實現(xiàn)實例:關于對本文的評學習編譯更好的DAO的技級別:初SeanCSullivan(dao-article@),軟件工程20031015J2EE開發(fā)人員使用數(shù)據(jù)訪問對象(DataAccessObjectDAO)設計模式,以便將低級別的數(shù)據(jù)訪問邏輯與高級別的業(yè)務邏輯分離。實現(xiàn)DAO模式涉及比編寫數(shù)據(jù)訪問代碼更多的內容。在本文中,Java開發(fā)人員SeanC.Sullivan討論了DAO編程中三個常常被忽略的方面:事務界定、異常處理和日志記錄18個月中,我參加了一個由有才華的軟件工程師組成的小組,構建定制Web的(metrics)、庫存、貨運發(fā)票、項目管理數(shù)據(jù)和用戶信息。我們用JDBCAPI連接到我們公司的不同數(shù)據(jù)庫平臺上,并在整個應用程序中使用DAO設計模式文檔圖1顯示了應用程序和數(shù)據(jù)源之間的關系圖1.應用程序和數(shù)據(jù)在整個應用程序中使用數(shù)據(jù)訪問對象(DAO)使我們可以將底層數(shù)據(jù)訪問邏輯與業(yè)務邏輯分離來。我們構建了為每一個數(shù)據(jù)源提供GRUD(創(chuàng)建、讀取、更新、刪除)操作的DAO類在本文中,我將為您介紹構建更好的DAO類的DAO實現(xiàn)策略和技術。更確切地說,我將討論日志、異常處理和事務界定。您將學到如何將這三者結合到自己的DAO類中。本文假定您熟JDBCAPI、SQL和關系數(shù)據(jù)庫編程我們將以對DAO設計模式和數(shù)據(jù)訪問對象的概述開始file:///E|/scrapbook/data/20071126181813/index.html(第1/12頁)[2007-11-30文檔中國[選擇 使用條首 產(chǎn) 服務與解決方 支持與下 個性化服DAO模式是標準J2EE設計模式之一。開發(fā)人員用這種模式將底層數(shù)DAO模式是標準J2EE設計模式之一。開發(fā)人員用這種模式將底層數(shù)據(jù)訪問操作與高層輯分離開。一個典型的DAO實現(xiàn)有以下DAO工廠DAO接一個實現(xiàn)了DAO接口的具體數(shù)據(jù)傳輸對象(有時稱為值對象具體的DAO類包含訪問特定數(shù)據(jù)源的數(shù)據(jù)的邏輯。在下面一節(jié)中您將學習設計和實現(xiàn)數(shù)據(jù)訪問對象的技術。有關DAO設計模式的更多內容請參閱參考資料。DAO要記住的重要一點是它們是事務性對象。DAO所執(zhí)行的每一個操--如創(chuàng)建、更新或者刪除數(shù)據(jù)--都與一個事務相關聯(lián)。因此,事務界定的概念就變得特別重要了。事務界定是定義事務邊界的方式。規(guī)范描述了兩種事務界定的模型:編程(programmatic)和聲明式(declarative)。1分析了這兩種模型1.兩種事務界定的模聲明式事務界編程式事務界程序員用EJB部署描述符聲明事務屬性程序員負責編寫事務邏輯運行時環(huán)境容器)用這些屬性自動管理事務應用程序通過一個API控制事我們將側重于編程式事設計考如前所述,DAO是事務性對象。一個典型的作。在設計DAO時,首先要問自己以下執(zhí)行像創(chuàng)建、更新和刪除這樣的事務事務要如何開始事務應如何結束哪一個對象將負責開始一個事務哪一個對象將負責結束一個事務 是否要負責事務的開始和結束應用程序是否需要通過多個DAO訪問數(shù)據(jù)事務涉及到一個DAO還是多個DAO是否調DAO的方法了解上述問題的答案將有助于您選擇最適合的DAO的事務界定策略。在DAO中有兩種主要的界定事務的策略。一種方式是讓DAO負責界定事務,另一種將事務界定交給調用這個DAO方法的對象處理。如果選擇了前一種方式,那么就將事務代碼嵌入到DAO中。如果選擇式,那么事務界定代碼就是在DAO類外面。我們將使用簡單的代碼示例幫助您更好理解每一file:///E|/scrapbook/data/20071126181813/index.html(第2/12頁)[2007-11-30方式是如何清單1顯示了一個有兩種數(shù)據(jù)操作的方式是如何清單1顯示了一個有兩種數(shù)據(jù)操作的DAO:創(chuàng)建和更新1.DAO方清單2顯示了一個簡單的事務。事務界定在DAO類外面。注意在這個例子中調用者一個事務中結合多個DAO操作的清單2.調用者管理的這種事務界定策略對于需要在一個事務中訪問多個 的應用程序特別有用可以JDBCAPIJavaAPI(JavaTransactionAPIJTA)實現(xiàn)事務界定JDBC務界定比JTA事務界定要簡單,但是JTA提供了更多的靈活性。在下面一節(jié)中我將更深入地分JDBC進行事務JDBC事務是Connection對象控制的。JDBCConnection接口(java.sql.Connection)提供了兩種事務模式:自動提交和手工提交java.sql.Connection提供了voidsetAutoCommit(boolean)booleangetAutoCommit()voidcommit()void3顯示了如何JDBCAPI界定一個事務3.JDBCAPI進行事務界file:///E|/scrapbook/data/20071126181813/index.html(第3/12頁)[2007-11-30 //startthetransactiondao.updateWarehouseStatus(id2, //endthepublicvoidcreateWarehouseProfile(WHProfilepublicvoidupdateWarehouseStatus(WHIdentifierid,StatusInfo使用JDBC事務界定時,您可以將多個SQL語使用JDBC事務界定時,您可以將多個SQL語句結合到一個事務中。JDBC事務的一個缺點事務的范圍局限于一個數(shù)據(jù)庫連接。一個JDBC事務不能跨越多個數(shù)據(jù)庫。在下面,我們將看一下如何JTA進行事務界定。因為JTA不像JDBC那樣有名,所以我們首先做一個簡介。JavaAPI(JTA)及其同門Java事務服務(JavaTransactionServiceJTS)J2EE平臺提供了分布式事務服務。一個分布式的事務涉及一個事務管理器和一個或者多個資源管理器。一個資源管理器是任何類型的持久性的數(shù)據(jù)存儲。事務管理器負責協(xié)調所有事務參與者間的通信。事務管理器與資源管理器之間的關系如圖2所示圖2.一個事務管理器和資源管理JTA事務JDBC事務功能更強。JTA事務可以有多事務局限為一個數(shù)據(jù)庫連參與者。所有下列Java平臺組件都可以參與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對JMS隊JMS主符合J2EEJDOPersistenceManager對JMS隊JMS主符合J2EE連接體系結構(J2EEConnectorArchitecture)規(guī)范的資源適配JTA的事務JTA進行事務界定,應用程序要調用javax.transaction.UserTransaction接口中的方法。清單4顯示了對UserTransaction對象的典型JNDI查詢:4.UserTransaction對象JDNI查對象后,就可以開始事務了,如清單5當應用程序找到了5.JTA開始一個事當應用程序調用commit()時,事務管理器用一個兩階段的提交協(xié)議結束事務控制事務JTA 接口提供了以下事務控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應用程序調voidvoidrollback()int應用程序調用begin()開始事務。應用程序調用commit()或者rollback()結束事務。閱參考資料以了解更多關于用JTA進行事務管理的內JTA和開發(fā)人員通DAO類中JDBC進行底層數(shù)據(jù)操作。如果計劃JTA界定事務,那么就需要有一個實現(xiàn)javax.sql.XADataSource、javax.sql.XAConnection和javax.sql.XAResource接口的JDBC驅動程序。一個實現(xiàn)了這些接口的驅動程序將可以參與JTA事務。XADataSource對象就是一XAConnection對象的工廠XAConnection是參JTA事務JDBC連接您將需要用應用服務器的管理工具設置XADataSource。從應用服務器和JDBC文檔中可以了解到相關J2EE應用程序用JNDI查詢數(shù)據(jù)源。一旦應用程序找到了數(shù)據(jù)源對象,它就調用以獲得到數(shù)據(jù)庫的XA連接與XA連接不同。一定要記XA連接參JTA事務。這意味XA連接不支持JDBC的自動提交功能。同時,應用程序一定不要對XA連接調用java.sql.Connection.commit()或者java.sql.Connection.rollback()。相反,應用程序應該使用UserTransaction.begin()、UserTmit()和serTransaction.rollback()我們討論了如何用JDBC和JTA界定事務。每一種方式都有其優(yōu)點,您需要決定

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論