一. 前言:
在写这篇博客之前,我们需要弄清楚两个概念:本地事务和分布式事务。
本地事务:只处理单一数据源,比如单个数据库。
分布式事务:处理多种异构的数据源, 比如某个业务操作中同时包含JDBC和JMS
或者某个操作需要访问多个不同的数据库。
Java通过JTA完成分布式事务,JTA本身只是一种规范, 本篇博客将使用JOTM作为实现, 后续还会使用Atomikos实现。
---JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——
在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
---JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且资源开放的独立的事务管理器。
---Atomikos TransactionsEssentials 是一个为Java平台提供增值服务的并且开源类事务管理器
二. 业务背景:
假定我们有这样一个需求:当我们新建一个用户的时候需要往一个DB中插入一条用户记录,
还需要往另一个DB中记录日志。因为是不同的DB操作,所以这里就涉及到分布式事务的处理。
三. 代码实现:
2. 建表语句:
create database log;
DROP TABLE IF EXISTS `log`;
CREATE TABLE `log` (
`id` varchar(20) NOT NULL,
`content` varchar(100) default NULL,
PRIMARY KEY (`id`)
);
create database user;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` varchar(20) NOT NULL,
`name` varchar(40) default NULL,
PRIMARY KEY (`id`)
);
3. 配置文件ApplicationContext.xml