這2天學習了atomikos事務控制框架,其中看到有3種數據源,分別是,SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean。
在看atomikos文檔的時候,一直有個疑點,就是文檔好像強調要用xadatasource,用nonxadatasource好像就不支持事務了。
但是這3個數據源有2個是xadatasource,另一個是nonxadatasource。那看起來就矛盾了。於是實驗了一下,用AtomikosNonXADataSourceBean做數據源,
同時操作2個數據源,在后一個數據源操作中故意拋出異常。結果數據都沒有保存進數據庫。
后台也顯示rollback成功了。
所以nonxadatasource也可以用。
百度百科里說,
連接
XA連接區別於非XA連接。要記住的是XA連接是一個JTA事務中的參與者。這就意味着XA連接不支持JDBC的自動提交特性。也就是說應用程序不必在XA連接上調用java.sql.Connection.commit()或java.sql.Connection.rollback()。相反,應用程序應該使用UserTransaction.begin()、UserTransaction.commit()和UserTransaction.rollback().
區別可能就在這了,如果用xadatasource就可以用UserTransaction.begin()這些操作,
如果用nonxadatasource,就不支持這些操作了。
這只是猜想,具體待驗證。
