何為分布式事務
一個事務包含多個操作,多個操作操作了多個數據源,這樣的事務稱為分布式事務
和普通事務的區別
單一數據源,事務管理可以借助數據源本地事務完成,實現簡單
分布式事務之困難:不可簡單的借助數據源本地事務完成
為什么:
但是這樣的事務有保障嗎?
1、提交時,db1提交成功,db2網絡不通
2、提交時con1提交完成,此時應用重啟了或者應用及其斷電了
分布式事務管理需要什么?
分布式事務管理需要:
1協調各數據源提交、回滾、以及應對通信異常的管理機制
2數據源需要支持這種機制
3應對應用恢復的機制
從上面可以得出,做分布式事務管理需要的參與者
如果是這樣,那么
1 事務管理器協調數據源,兩者之間需要通信,並需要一套協議規范
2為應對網絡,主機故障等,事務管理器,數據源需要記錄相關的事務日志
何為XA規范
X/Open(The open group)提出的分布式事務處理規范,分布式事務處理的工業標准
XA-DTP
X/Open Distributed Transaction Processing(DTP)model分布式事務處理模型
XA-流程
XA-兩階段提交
JTA是什么?
JTA: Java Transaction Api
Java 根據XA規范提出的事務處理規范
目的:同意API,簡化程序員的學習,簡化編程
JTA-API-構成
面向TM、RM提供商的API:
面向編程者的API:
UserTransaction
Jta-tm實現提供商
JavaEE應用服務器內建JTA事務管理(TM),提供商:
Weblogic,websphere
開源、獨立的JTA事務管理器(TM)組件:
Java Open Transaction Manager(JOTM)
JBoss TS
Bitronix Transaction Manager(BTM)
Atomikos
Narayana
Jta-rm實現提供商
在連接池組件中一般也會提供包裝實現:
Spring中應用JTA
Spring 自身並未提供jta TM實現,但提供了很好的集成
根據TM的提供者不通,分為兩種應用方式
方式一:使用JavaEE服務器內建的TM,用法做如下配置即可
或
說明:JtaTransactionManager通過JNDI找到服務器提供的java:comp/UserTransaction,
java:comp/TransactionManager
應用使用的數據源需是支持xa的數據源
方式二:在沒有實現TM的應用服務器上(Tomcat,jetty),將獨立的TM組件集成到
我們的應用中
一:使用輕量級服務器+集成TM組件
二:使用輕量級服務器+集成TM組件
1、引入TM組件的jar(以Atomikos為例)
2、配置數據源,一定要是XA數據源
3、配置事務管理器TM
TransactionManager的實現bean
UserTransaction的實現bean
spring的JtaTransactionManager(注入TM、UserTransaction)
准備兩個數據源