博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring JTA应用JOTM & Atomikos I Application
阅读量:6250 次
发布时间:2019-06-22

本文共 2639 字,大约阅读时间需要 8 分钟。

关于Spring JTA的介绍非常多了,这里就不再一再阐述其优越性怎么怎么了,直接开始正题。一个大致的需求如下,用户在进行增删改操作时,会同时更新2至3个数据库的数据表,操作需要事务来包裹,以便在操作其中一个数据库的数据表失败时,可以将其他数据库已执行的动作回滚。 

由于主框架是Spring,所以将研究的重点放在Spring所提供的的JTA事务上,google了很多资料,发现有几种实现的技术,如JOTM,Atomikos,以及J2EE容器所提供的JTA实现,如JBOSS也都提供了JTA的实现,不过个人喜好来讲,非常厌恶使用JNDI来访问容器组件,所以,重点放在JOTM和Atoimikos两种技术上面,JOTM网上很多资料介绍,配置也非常简单,相信大家通过google就可以快速的上手,本着研究的原则,少少了解了另一种实现技术Atomikos,发现使用方法也很简单,下面就用一个简单的例子来详细说明一下他们在Spring中的配置和使用方法。需要说明的一点是,这个例子也是当时学习两种技术,然后测试的例子,仅仅最后做了一些整理。 
初步的设想:一个包括Dao/Service/Test三层的简单应用,事务配置在service层.用来同时插入两个数据库(test,test2)的数据表xa_test,表结构非常简单,包含两个字段id,name,其中test2数据库中表xa_test的name字段不允许为空。 
使用的数据库为Mysql 5.0,数据库连接驱动版本5.0.8,这里需要注意,过低版本的Mysql或驱动可能不支持XA Datasource。 
Database test ddl 

Java代码  
  1. CREATE TABLE `xa_test` (  
  2.   `id` int(11) NOT NULL,  
  3.   `name` varchar(20default NULL  
  4. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;  

Database test2 ddl 

Java代码  
  1. CREATE TABLE `xa_test` (  
  2.   `id` int(11) NOT NULL,  
  3.   `name` varchar(20) NOT NULL  
  4. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;  

UserDao,这里使用了两个,UserDao1和UserDao2,用以操作两个不同数据库的数据表(画蛇添足了,呵呵,为了描述清晰).Dao都继承自Spring的JdbcDaoSupport,使用JdbcTemplate进行数据库读写. 
UserDao1.java 

Java代码  
  1. package com.xa.dao;  
  2.   
  3. import org.springframework.jdbc.core.support.JdbcDaoSupport;  
  4.   
  5. public class UserDao1 extends JdbcDaoSupport {  
  6.     public void insertData(String id, String name) {  
  7.         getJdbcTemplate().execute("insert into xa_test values('" + id + "'," + name + ")");  
  8.     }  
  9. }  

UserDao2.java 

Java代码  
  1. package com.xa.dao;  
  2.   
  3. import org.springframework.jdbc.core.support.JdbcDaoSupport;  
  4.   
  5. public class UserDao2 extends JdbcDaoSupport  
  6. {  
  7.     public void insertData(String id,String name){  
  8.         getJdbcTemplate().execute("insert into xa_test values('"+ id +"',"+name+")");  
  9.     }  
  10. }  

然后创建UserService和UserServiceImpl,在UserServiceImpl中,将调用Dao1和Dao2的insertData的方法同时插入两个数据库的内容,稍后,会将事务配置在service层. 
UserService.java 

Java代码  
  1. package com.xa.service;  
  2.   
  3. public interface UserService  
  4. {  
  5.     public void insertBothDatabase(String id,String name) throws Exception;  
  6. }  

UserServiceImpl.java 

Java代码  
  1. package com.xa.service;  
  2.   
  3. import com.xa.dao.UserDao1;  
  4. import com.xa.dao.UserDao2;  
  5.   
  6. public class UserServiceImpl implements UserService  
  7. {  
  8.     private UserDao1 dao1;  
  9.   
  10.     private UserDao2 dao2;  
  11.       
  12.     public void insertBothDatabase(String id, String name) throws Exception {  
  13.         dao1.insertData(id, name);  
  14.         dao2.insertData(id, name);  
  15.     }  
  16.   
  17.     public UserDao1 getDao1() {  
  18.         return dao1;  
  19.     }  
  20.   
  21.     public void setDao1(UserDao1 dao1) {  
  22.         this.dao1 = dao1;  
  23.     }  
  24.   
  25.     public UserDao2 getDao2() {  
  26.         return dao2;  
  27.     }  
  28.   
  29.     public void setDao2(UserDao2 dao2) {  
  30.         this.dao2 = dao2;  
  31.     }  
  32. }  

UserServiceImpl.java的代码可以看到,在insertBothDatabase方法中,调用了两个Dao的方法. 
一个简单的应用已经建立,随后下一节将说明如何配置JOTM以及在Spring中的相关配置.

http://docs.codehaus.org/display/BTM/Home

转载 http://tom-duan.iteye.com/blog/147593

你可能感兴趣的文章
opencv表面缺陷检测_工业产品表面缺陷检测方法
查看>>
kettle使用数据库来生成序列_时间序列数据库Influxdb的使用
查看>>
配置babel_关于 Babel 你必须知道的
查看>>
数据丢失与重复_消息队列重复消费和数据丢失问题(石衫面试突击学习笔记)...
查看>>
摄像头 火狐_为什么谷歌浏览器打不开电脑摄像头?
查看>>
两张图片合成一张_ps技巧:大光比照片后期曝光合成技法
查看>>
码条形码属性_条码生成器如何批量生成code 11码
查看>>
和lua的效率对比测试_不同编程语言能耗不同?看这27种语言对比!
查看>>
让某控件失去焦点_常用基本控件测试用例(一)
查看>>
天气模式_今年台风活跃期即将结束!下周天气将开启“大变脸”模式
查看>>
扫码枪关闭常亮模式_生意好时最怕收银出故障,这几个扫码枪的常见问题你一定要知道...
查看>>
如何双击打开vivado工程_利用TCL重建vivado工程
查看>>
mysql的引双向链表_Mysql高手系列 - 第22篇:mysql索引原理详解(高手必备技能)
查看>>
mysql in 查询改成_MySQL not in嵌套查询改写成外连接方式
查看>>
mysql community安装_MySQL Community Server 5.7安装详细步骤
查看>>
python处理多行字符串_python多行字符串
查看>>
java冒泡排序_用java写个冒泡排序?
查看>>
linux 开发java_做开发环境的操作系统是 Linux 好还是 Windows 好?
查看>>
java正文提取_Java网页正文提取工具
查看>>
blocked java_使用jstack排查多线程死锁、阻塞
查看>>