buaashang 2007-09-10
9.17 update:使用NonXADataSourceBean. Mysql在5.0版本和Connecter/J5.0版本后提供了XADatasource支持,如果使用了支持XADatasouce版本,可以参考2楼补充.
最近做的project中遇到要将数据库中的表分布到两台不同的服务器上的Mysql5.0中,project主要使用spring+ibatis。因此需要JTA的支持,但是tomcat不支持,所以就搜索开源的JTA实现。
最开始使用的是JOTM,但是使用中不能自动rollback,无论什么情况都commit。然后看到infoq上一篇文章提到AtomikosTransactionsEssentials,AtomikosTransactionsEssentials3.0是Atomikos开发的核心事务引擎,支持JDBC以及JMS的JTA/XA事务。易于部署,轻量级,同时支持JDBC以及JMS。
AtomikosTransactionsEssentials现在的版本是3.1.7,可以在http://www.atomikos.com/Main/TransactionsEssentialsDownloadForm下载,在发布包里的examples文件夹下面有些例子,非常实用,我在使用中参考里面的例子很容易配置成功。先将发布包里面dist目录下的atomikos-util.jar,transactions.jar,transactions-api.jar,transactions-jta.jarcopy到项目lib里面,如果使用hibernate则需要将另外两个hibernate相关的jar页copy到项目里面,spring配置文件如下:
事务的配置, 使用了spring2.0的语法,所以将namesapce也帖出来了.
这样配置以后就可以使用分布式事务,测试中出现异常时事务也自动提交。和JOTM相比AtomikosTransactionsEssentials更加稳定,它原来是商业项目,现在开源了。象mysql一样卖服务支持的。而且论坛页比较活跃,有问题很快可以解决。