JTA是J2EE的规范之一,如果使用JTA,我们需要去实现相应接口。tomcat是web服务器,没有实现J2EE规范,如果我们需要在tomcat服务器使用JTA,需要自己去实现JTA的接口。本文介绍如何使用tomcat+JTA实现多数据源的分布式事务。
一 选型
tomcat需要使用插件实现JTA,常用插件有jotm和atomikos,本文以atomikos为例。jar如下:
atomikos-util-1.0.jar
cglib-nodep-2.2.2.jar
transactions-3.7.0.jar
transactions-api-3.7.0.jar
transactions-jdbc-3.7.0.jar
transactions-jta-3.7.0.jar
如果是maven项目,POM配置如下:
<span style="white-space:pre"> </span><dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.2.4</version>
</dependency>
二 配置数据库
我们使用了两个数据库做测试,模拟多数据源的业务场景。数据库如下:
两个数据库分别是log和user,每个数据库中创建一张表,分别是log和user,数据库类型都是MySQL(两个数据库类型不一致也可以)。
三 持久层
我们直接使用JdbcTemplate实现持久化,代码如下:
<span style="font-size:18px;">public class LogDao extends JdbcDaoSupport {
public boolean insertLog(String id, String content) {
JdbcTemplate template = getJdbcTemplate()