<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA事務,JTA,JDBC,JDO,DAO,JNDI概念(轉載)

    一、什么是Java事務

    通常的觀念認為,事務僅與數據庫相關。 
    事務必須服從ISO/IEC所制定的ACID原則。

    ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。

    事務的原子性表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。

    一致性表示當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行前的狀態。

    隔離性表示在事務執行過程中對數據的修改,在事務提交之前對其他事務不可見。

    持久性表示已提交的數據在事務執行失敗時,數據的狀態都應該正確。


         
    通俗的理解,事務是一組原子操作單元,從數據庫角度說,就是一組SQL指令,要么全部執行成功,若因為某個原因其中一條指令執行有錯誤,則撤銷先前執行過的所有指令。更簡答的說就是:要么全部執行成功,要么撤銷不執行。


    既然事務的概念從數據庫而來,那Java事務是什么?之間有什么聯系?  實際上,一個Java應用系統,如果要操作數據庫,則通過JDBC來實現的。增加、修改、刪除都是通過相應方法間接來實現的,事務的控制也相應轉移到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 接口( java.sql.Connection )提供了兩種事務模式:自動提交和手工提交。 java.sql.Connection 提供了以下控制事務的方法:

    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 界定事務,那么就需要有一個實現 javax.sql.XADataSource  javax.sql.XAConnection  javax.sql.XAResource接口的 JDBC 驅動程序。一個實現了這些接口的驅動程序將可以參與 JTA 事務。一個 XADataSource 對象就是一個XAConnection 對象的工廠。 XAConnection s 是參與 JTA 事務的 JDBC 連接。 
    您將需要用應用服務器的管理工具設置 XADataSource 。從應用服務器和 JDBC 驅動程序的文檔中可以了解到相關的指導。 
    J2EE 
    應用程序用 JNDI 查詢數據源。一旦應用程序找到了數據源對象,它就調用 javax.sql.DataSource.getConnection() 以獲得到數據庫的連接。 
         XA 
    連接與非 XA 連接不同。一定要記住 XA 連接參與了 JTA 事務。這意味著 XA 連接不支持 JDBC 的自動提交功能。同時,應用程序一定不要對 XA 連接調用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,應用程序應該使用 UserTransaction.begin() UserTransaction.commit()  serTransaction.rollback() 

    3、容器事務 
         
    容器事務主要是J2EE應用服務器提供的,容器事務大多是基于JTA完成,這是一個基于JNDI的,相當復雜的API實現。相對編碼實現JTA 事務管理,我們可以通過EJB容器提供的容器事務管理機制(CMT)完成同一個功能,這項功能由J2EE應用服務器提供。這使得我們可以簡單的指定將哪個方法加入事務,一旦指定,容器將負責事務管理任務。這是我們土建的解決方式,因為通過這種方式我們可以將事務代碼排除在邏輯編碼之外,同時將所有困難交給 J2EE容器去解決。使用EJB CMT的另外一個好處就是程序員無需關心JTA API的編碼,不過,理論上我們必須使用EJB 
    四、三種事務差異 
    1
    JDBC事務控制的局限性在一個數據庫連接內,但是其使用簡單。 
    2
    JTA事務的功能強大,事務可以跨越多個數據庫或多個DAO,使用也比較復雜。 
    3
    、容器事務,主要指的是J2EE應用服務器提供的事務管理,局限于EJB應用使用。 


    JTA

    Java事務API(JTA;Java Transaction API)和它的同胞Java事務服務(JTS;Java Transaction Service),為J2EE平臺提供了分布式事務服務。一個分布式事務(distributed transaction)包括一個事務管理器(transaction manager)和一個或多個資源管理器(resource manager)。一個資源管理器(resource manager)是任意類型的持久化數據存儲。事務管理器(transaction manager)承擔著所有事務參與單元者的相互通訊的責任。下圖顯示了事務管理器和資源管理的間的關系。


    JTA事務比JDBC事務更強大。一個JTA事務可以有多個參與者,而一個JDBC事務則被限定在一個單一的數據庫連接。下列任一個Java平臺的組件都可以參與到一個JTA事務中:

    JDBC連接

    • JDO PersistenceManager 對象
    • JMS 隊列
    • JMS 主題
    • 企業JavaBeans(EJB)
    • 一個用J2EE Connector Architecture 規范編譯的資源分配器。


    DAO

    DAO是Data Access Object數據訪問接口,數據訪問:顧名思義就是與數據庫打交道。夾在業務邏輯與數據庫資源中間。對數據庫進行CURD(增刪查改操作)。

     

      在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應用,應該將所有對數據源的訪問操作抽象封裝在一個公共API中。用程序設計的語言來說,就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數據源進行交互的時候則使用這個接口,并且編寫一個單獨的類來實現這個接口在邏輯上對應這個特定的數據存儲。


    JDBC

    JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為工具/數據庫開發人員提供了一個標準的API,據此可以構建更高級的工具和接口,使數據庫開發人員能夠用純 Java API 編寫數據庫應用程序,同時,JDBC也是個商標名。

     

    有了JDBC,向各種關系數據發送SQL語句就是一件很容易的事。換言之,有了JDBC API,就不必為訪問Sybase數據庫專門寫一個程序,為訪問Oracle數據庫又專門寫一個程序,或為訪問Informix數據庫又編寫另一個程序等等,程序員只需用JDBC API寫一個程序就夠了,它可向相應數據庫發送SQL調用。同時,將Java語言和JDBC結合起來使程序員不必為不同的平臺編寫不同的應用程序,只須寫一遍程序就可以讓它在任何平臺上運行,這也是Java語言“編寫一次,處處運行”的優勢。


    簡單地說,JDBC 可做三件事:與數據庫建立連接、發送 操作數據庫的語句并處理結果。


    JDO

    JDO(Java Data Object )是一個JAVA用于存取某種數據倉庫中的對象的標準化API。JDO提供了透明的對象存儲,因此對開發人員來說,存儲數據對象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,因為它可以在任何數據底層上運行。JDBC只是面向關系數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,比如關系數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。


    JNDI

    英文全稱是:Java Naming and Directory Interface

    術語解釋:一組幫助做多個命名和目錄服務接口的API。

    JNDI(Java Naming and Directory Interface)是SUN公司提供的一種標準的Java命名系統接口,JNDI提供統一的客戶端API,通過不同的訪問提供者接口JNDI SPI的實現,由管理者將JNDI API映射為特定的命名服務和目錄系統,使得Java應用程序可以和這些命名服務和目錄服務之間進行交互。集群JNDI實現了高可靠性JNDI[8],通過服務器的集群,保證了JNDI的負載平衡和錯誤恢復。在全局共享的方式下,集群中的一個應用服務器保證本地JNDI樹的獨立性,并擁有全局的JNDI樹。每個應用服務器在把部署的服務對象綁定到自己本地的JNDI樹的同時,還綁定到一個共享的全局JNDI樹,實現全局JNDI和自身JNDI的聯系。


     

    JNDI(Java Naming and Directory Interface)是一個應用程序設計的API,為開發人員提供了查找和訪問各種

     

    命名和目錄服務的通用、統一的接口,類似JDBC都是構建在抽象層上。

     

    JNDI可訪問的現有的目錄及服務有:DNS、XNam 、Novell目錄服務、LDAP(Lightweight Directory Access Protocol 輕型目錄訪問協議)、 CORBA對象服務、文件系統、Windows XP/2000/NT/Me/9x的注冊表、RMI、
    DSML v1&v2、NIS。

     


    JNDI與JDBC

    JNDI提供了一種統一的方式,可以用在網絡上查找和訪問服務。通過指定一個資源名稱,該名稱對應于數據庫或命名服務中的一個記錄,同時返回數據庫連接建立所必須的信息。

    JNDI主要有兩部分組成:應用程序編輯接口和服務供應商接口。應用程序編程接口提供了Java應用程序訪問各種命名和目錄服務的功能,服務供應商接口提供了任意一種服務的供應商使用的功能。

    posted on 2011-12-05 15:17 小羅 閱讀(713) 評論(0)  編輯  收藏 所屬分類: DataBase


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    Web Framework

    常上的技術網站

    查找資料的java網站

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品视频免费一区二区| 亚洲AV日韩AV永久无码色欲| 四虎免费影院ww4164h| 亚洲中文字幕无码久久2017| 一区二区免费视频| 亚洲永久永久永久永久永久精品| 国产麻豆视频免费观看| 一级看片免费视频| 亚洲一级黄色大片| 亚洲熟妇无码另类久久久| 成在线人视频免费视频| 亚洲伊人色一综合网| 亚洲永久精品ww47| 日本高清免费aaaaa大片视频| 先锋影音资源片午夜在线观看视频免费播放 | 亚洲字幕AV一区二区三区四区| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久久久久曰本AV免费免费| 免费在线观看一区| 亚洲av成人综合网| 国产国拍亚洲精品mv在线观看| 久久精品国产大片免费观看| 亚洲av无码兔费综合| 亚洲国产日韩在线人成下载| 亚洲一级黄色视频| 免费无码又爽又刺激毛片| 免费无码中文字幕A级毛片| 一级黄色毛片免费看| 国产亚洲人成在线播放| 亚洲AV无码一区二区三区人| 人人狠狠综合久久亚洲婷婷| 亚洲AV无码乱码精品国产| 在线免费观看毛片网站| 亚洲精品国产免费| 久久成人免费大片| 久久高潮一级毛片免费| 免费国产黄网站在线看| 亚洲国产精品网站在线播放| 久久精品国产99国产精品亚洲| 亚洲avav天堂av在线不卡| 国产精品V亚洲精品V日韩精品|