浏览 2998 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-11
由于主框架是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 CREATE TABLE `xa_test` ( `id` int(11) NOT NULL, `name` varchar(20) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Database test2 ddl CREATE TABLE `xa_test` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; UserDao,这里使用了两个,UserDao1和UserDao2,用以操作两个不同数据库的数据表(画蛇添足了,呵呵,为了描述清晰).Dao都继承自Spring的JdbcDaoSupport,使用JdbcTemplate进行数据库读写. UserDao1.java package com.xa.dao; import org.springframework.jdbc.core.support.JdbcDaoSupport; public class UserDao1 extends JdbcDaoSupport { public void insertData(String id, String name) { getJdbcTemplate().execute("insert into xa_test values('" + id + "'," + name + ")"); } } UserDao2.java package com.xa.dao; import org.springframework.jdbc.core.support.JdbcDaoSupport; public class UserDao2 extends JdbcDaoSupport { public void insertData(String id,String name){ getJdbcTemplate().execute("insert into xa_test values('"+ id +"',"+name+")"); } } 然后创建UserService和UserServiceImpl,在UserServiceImpl中,将调用Dao1和Dao2的insertData的方法同时插入两个数据库的内容,稍后,会将事务配置在service层. UserService.java package com.xa.service; public interface UserService { public void insertBothDatabase(String id,String name) throws Exception; } UserServiceImpl.java package com.xa.service; import com.xa.dao.UserDao1; import com.xa.dao.UserDao2; public class UserServiceImpl implements UserService { private UserDao1 dao1; private UserDao2 dao2; public void insertBothDatabase(String id, String name) throws Exception { dao1.insertData(id, name); dao2.insertData(id, name); } public UserDao1 getDao1() { return dao1; } public void setDao1(UserDao1 dao1) { this.dao1 = dao1; } public UserDao2 getDao2() { return dao2; } public void setDao2(UserDao2 dao2) { this.dao2 = dao2; } } UserServiceImpl.java的代码可以看到,在insertBothDatabase方法中,调用了两个Dao的方法. 一个简单的应用已经建立,随后下一节将说明如何配置JOTM以及在Spring中的相关配置. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |