<a href="http://my.oschina.net/pingpangkuangmo/blog/413518">分布式事務系列(開篇)提出疑問和研究過程</a>
<a href="http://my.oschina.net/pingpangkuangmo/blog/415162">分布式事務系列(1.1)spring事務管理器platformtransactionmanager源碼分析</a>
<a href="http://my.oschina.net/pingpangkuangmo/blog/416038">分布式事務系列(1.2)spring事務體系</a>
<a href="http://my.oschina.net/pingpangkuangmo/blog/417479">分布式事務系列(2.1)分布式事務模型與接口定義</a>
<a href="http://my.oschina.net/pingpangkuangmo/blog/419374">分布式事務系列(3.1)jotm的分布式案例</a>
<a href="http://my.oschina.net/pingpangkuangmo/blog/420831">分布式事務系列(3.2)jotm分布式事務源碼分析</a>
<a href="http://my.oschina.net/pingpangkuangmo/blog/423210">分布式事務系列(4.1)atomikos的分布式案例</a>
userdao和logdao,操作分别如下:
即上述兩個jdbctemplate使用不同的資料庫。
userservice綜合上述兩個業務操作,使它們處于同一個事務中:
上述業務代碼我們看不到分布式事務的存在,這種正是我們想要的效果,分布式事務對業務透明。到底是如何來實作呢?
自行配置2個資料庫位址
我們平常使用的datasource,大部分是c3p0、dbcp等,這裡就不能使用它們了,需要換成可以模拟xa協定的datasource,這裡即atomikosnonxadatasourcebean。
我們知道分布式事務中需要一個事務管理器即接口javax.transaction.transactionmanager、面向開發人員的javax.transaction.usertransaction。對于atomikos來說分别對應如下:
com.atomikos.icatch.jta.usertransactionimp
com.atomikos.icatch.jta.usertransactionmanager
我們如果想使用分布式事務的同時,又想使用spring帶給我們的@transactional便利,就需要配置一個jtatransactionmanager,而該jtatransactionmanager是需要一個usertransaction執行個體的
這裡隻使用了atomikos,不像jotm還使用了xapool。
自行配置上述2個資料庫位址
我們平常使用的datasource,大部分是c3p0、dbcp等,這裡就不能使用它們了,需要換成可以atomikos自己的datasource,這裡即atomikosdatasourcebean。它需要使用支援xa的jdbc驅動。具體就是需要一個xadatasourceclassname,我們這裡使用的是mysql支援xa的的mysqlxadatasource,它實作了javax.sql.xadatasource接口,即可以産生xaconnection連接配接。
atomikos使用非xa資料庫驅動實作分布式事務 與 atomikos使用xa資料庫驅動實作分布式事務唯一配置上的不同就是這裡的datasource配置,其他内容都一樣。
本文介紹了atomikos使用xa資料庫驅動和非xa資料庫驅動兩種方式來實作分布式事務的案例,下一篇文章就來詳細說明下其中的原理。
在atomikos中,2pc的中的協調者是誰?參與者又是誰?
在xa資料庫驅動和非xa資料庫驅動兩種情況下,事務是怎麼開啟的?當執行業務操作的時候,參與者又是怎麼加入事務中的呢?2pc的過程又是怎麼進行的?事務是怎麼復原的?事務是怎麼送出的呢?