java事物詳解

来源:https://www.cnblogs.com/-zpy/archive/2018/06/01/9123981.html
-Advertisement-
Play Games

一、什麼是Java事務 通常的觀念認為,事務僅與資料庫相關。 事務必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性 (isolation)和持久性(durability)的縮寫。事務的原子性表示事務執行過程中的任何失敗都將導 ...


一、什麼是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應用使用。 
五、總結 
事務控制是構建J2EE應用不可缺少的一部分,合理選擇應用何種事務對整個應用系統來說至關重要。一般說來,在單個JDBC 連接連接的情況下可以選擇JDBC事務,在跨多個連接或者資料庫情況下,需要選擇使用JTA事務,如果用到了EJB,則可以考慮使用EJB容器事務。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介: 定義了演算法家族,分別封裝起來,可以讓他們之間相互替換。此模式可以讓演算法的變化,不會影響到使用演算法的客戶。【行為型模式】 結構圖: 優點: 缺點: 應用場景: 需要在不同時間應用不同的業務規則時,就可以使用策略模式處理這種變化的可能性。 註意事項: 示例: 1.結構類圖的實現: Strateg ...
  • 主從資料庫:主要是數據上的讀寫分離; 資料庫的讀寫分離的好處?1. 將讀操作和寫操作分離到不同的資料庫上,避免主伺服器出現性能瓶頸;2. 主伺服器進行寫操作時,不影響查詢應用伺服器的查詢性能,降低阻塞,提高併發;3. 數據擁有多個容災副本,提高數據安全性,同時當主伺服器故障時,可立即切換到其他伺服器 ...
  • 通常,向方法中傳遞的都是基本數據類型,而向方法中傳遞數組時,就需要考慮記憶體的分配 向方法之中傳遞數組,或者將一個數組的值傳給另一個數組,都會產生新的棧記憶體。引用之中對數組的改變會影響到原數組(其實就是在原數組的堆記憶體上操作)。當引用操作完成之後,引用產生的占記憶體不再只想原數組的堆記憶體。 ...
  • urllib庫的使用,非常簡單。 只要幾句代碼就可以把一個網站的源代碼下載下來。 官方文檔:https://docs.python.org/2/library/urllib2.html urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, ...
  • 很早想造個輪子了,聽說不想造輪子的程式員不是好程式員,用慣了Apache的眾多開源項目,卻沒看過開源一句代碼。最近看了幾篇賣焦慮的文章之後,突然變得慌張起來,於是在百忙之中難得一點閑第一次打開了JDK的源碼包。初讀:晦澀難懂,3千多行代碼,全英文註釋,有一些陌生的語法和調用陌生的類足矣嚇退一個中年程... ...
  • 原創 煤球數目 有一堆煤球,堆成三角棱錐形。具體:第一層放1個,第二層3個(排列成三角形),第三層6個(排列成三角形),第四層10個(排列成三角形),....如果一共有100層,共有多少個煤球? 請填表示煤球總數目的數字。註意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。 層數 1 ...
  • 大家好,併發編程 進入第十一章。 前面兩節,我們講了協程中的單任務和多任務 這節我們將通過一個小實戰,來對這些內容進行鞏固。 在實戰中,將會用到以下知識點: 多線程的基本使用 Queue消息隊列的使用 Redis的基本使用 asyncio的使用 . 動態添加協程 在實戰之前,我們要先瞭解下在asyn ...
  • Step 0: 使用新的 virtualenv 環境 建議使用 1.11.4 版本的 Django Step 1: 新建一個 django 項目 創建一個應用程式 在 myechartsite/settings.py 中註冊應用程式 我們先編輯 urls.py.這文件在 Django 里的功能是把前 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...