【轉】關於JTA,XA,ACID


對於我們這種初學者,可能會使用spring帶給我們的@Transactional,可能了解JTA,可能會使用jotm、atomikos,又會遇到一些名詞XA,支持XA的數據庫驅動等等諸多問題,然后就會愈加混亂,自然形成一個疑問,龐大的事務體系的全貌到底是什么樣?

   XA是由X/Open組織提出的分布式事務的規范。XA規范主要定義了(全局)事務管理器(Transaction Manager)和(局部)資源管理器(Resource Manager)之間的接口。XA接口是雙向的系統接口,在事務管理器(Transaction Manager)以及一個或多個資源管理器(Resource Manager)之間形成通信橋梁。XA之所以需要引入事務管理器是因為,在分布式系統中,從理論上講(參考Fischer等的論文),兩台機器理論上無法達到一致的狀態,需要引入一個單點進行協調。事務管理器控制着全局事務,管理事務生命周期,並協調資源。資源管理器負責控制和管理實際資源(如數據庫或JMS隊列)

 

 

2 需要解決的疑惑

下面就要具體列出一系列需要解決的問題

2.1 對於事務模型

  • 三種事務模型是什么?各自的特點是什么?各自的缺陷是什么?

2.2 spring對於事務模型的支持

  • spring自己的一系列接口設計:

    • PlatformTransactionManager 事務管理器
    • TransactionDefinition 事務定義
    • TransactionStatus 事務狀態

    等等

  • 上述一系列接口的實現是如何對非分布式和分布式事務的支持的呢?

2.3 針對分布式事務的規范

  • X/Open DTP模型是什么?幾個重要的概念是什么?

  • XA規范是什么?

  • 2PC是什么?

2.4 針對JTA

  • JTA是什么?JTS又是什么?

  • JTA與上述的規范又是什么關系?

  • JTA的接口都有哪些?分別是什么作用

  • JTA接口中有一個javax.transaction.TransactionManager,如何理解它與上述的PlatformTransactionManager呢?即它們各自的職責是什么?

2.5 對於JTA實現

  • 分布式事務需要數據庫和驅動程序支持的嗎?還是使用一般的數據庫和驅動程序也可以實現分布式事務?

  • XADataSource與DataSource、XAConnection與Connection等等接口

  • 某些應用服務器沒有實現JTA,如tomcat,某些應用服務器實現了JTA,如JBoss,具體是怎么實現的呢?

  • jotm、atomikos又是怎么來實現JTA的呢?需不需要數據庫和驅動程序對XA的支持?

  • 2PC對於初學者經常淪為一種概念,在代碼中是如何體現的呢?如何模擬2PC呢?

3 研究過程

先從非分布式事務開始,趁機理解Spring對於事務的支持原理,然后過渡到分布式事務,理解分布式事務的概念,源碼分析分布式事務框架jotm、atomikos,理解它們實現分布式事務的原理。

3.1 非分布式事務

  • 1 jdbc事務開發的缺點
  • 2 spring實現的編程式事務原理
  • 3 spring利用AOP實現的聲明式事務的接口設計與實現原理,為后面與jotm、atomikos的集成做鋪墊
  • 4 深刻理解了上面的例子后,再來看事務的三種模型,各自的特點、各自的缺陷

3.2 分布式事務的一系列概念

  • 1 X/Open DTP模型、XA規范、2PC
  • 2 JTA、JTS概念
  • 3 JTA接口定義的理解

3.3 JTA的實現

  • 1 jotm的例子,以及源碼分析實現分布式事務的原理(如何體現2PC的過程)
  • 2 atomikos對非XADataSource和XADataSource的支持的例子,以及源碼分析實現分布式事務的原理(如何體現2PC的過程)
  • 3 JBoss支持分布式事務的原理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM