您的位置:首页 > 编程语言 > Java开发

spring+jotm+ibatis+mysql实现JTA分布式事务

2017-08-08 21:25 281 查看
1 环境

1.1 软件环境

spring-framework-2.5.6.SEC01-with-dependencies.zip
ibatis-2.3.4
ow2-jotm-dist-2.1.4-bin.tar.gz
MySQL-5.1
JDK1.5

1.2 创建数据库环境
注意mysql里数据库引擎为InnoDB,只有这样才能支持事务。

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE sqlMapConfig
3                 PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
4                 "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
5
6 <sqlMapConfig>
7         <settings cacheModelsEnabled="true" enhancementEnabled="true"
8                             lazyLoadingEnabled="true" errorTracingEnabled="true"
9                             useStatementNamespaces="true"/>
10
11         <sqlMap resource="com/lavasoft/stu/jtom/entity/sqlmap/TabB.xml"/>
12
13 </sqlMapConfig>


sql-map-config_B.xml

1 public class Test {
2     private static ApplicationContext ctx = ApplicationContextUtil.getApplicationContext();
3     private static StuJotmService ser = (StuJotmService) ctx.getBean("stuJotmService");
4
5     public static void test_() {
6         TabA a = new TabA();
7         a.setId(2L);
8         a.setName("aaa4");
9         a.setAddress("address a4");
10
11         TabB b = new TabB();
12         b.setId(3L);
13         b.setName("bbb3");
14         b.setAddress("address b5");
15
16         ser.saveAB(a, b);
17     }
18
19     public static void main(String[] args) {
20         test_();
21     }
22 }


2.3 测试效果

先运行Test文件,可以看到两个库两个表都正常插入值。





再把TabA的setId改为其他任意一个长整型,那么TabB肯定会报主键重复错,因为TabB的setId没改,那么如果事务生效的话,最后应该是两张表都没插入值,如果事务没生效,那么TabA会插入一条新的数据。



2.3 完整结构



完整代码下载:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: