spring是如何对Service进行事务管理的

2012-11-12

  本人也很想弄清楚spring是如何对Service进行事务管理的,并且还去看了一下spring框架关于事务管理几个相关类的源码,可惜由于本人功力有限,只看懂了皮毛.

  既然源代码看不懂,那么只有运用例子进行测试,虽然笨了点,不过管是白猫还是黑猫,能捉老鼠就是好猫.:)

  为引起不必要的争论,本帖子只针对本案例的测试结果进行小结,并保证此测试代码在本人的运行环境绝对正确.

  开发环境:

  OS:windows 2003 Server

  Web Server: jakarta-tomcat-5.0.28

  DataBase Server: MS SQL Server 2000 (打了SP3补丁)

  IDE: Eclipse 3.2.0+MyEclipse 5.0GA

  测试案例系统结构:

  web层<---->Service层<---->DAO层

  web层使用struts 1.1,DAO使用的spring的JDBC,spring版本1.2

  数据库中有两张表:

  student1和Student2,表结构相同:id,name,address.其中id为主键且为自增长型.

  student1表中有一条记录:

  id  name       address

  1   xiaoming    wuhan

  student2表中记录为空

  测试情形一:

  web层捕获异常并处理,DAO层不捕获异常,Service也不捕获异常.

  Service层接口:

  public interface StudentManagerService {

  public void  bus_method();

  }

  DAO层接口

  public interface StudentDAO {

  public void  deleteStudent1();

  public void  insertStudent2();

  }

  StudentDAO接口的实现:

  public class StudentDAOImp extends JdbcDaoSupport implements StudentDAO{

  //删除student1表中的id=1的记录

  public void  deleteStudent1(){

  JdbcTemplate jt=this.getJdbcTemplate();

  jt.update("delete from student1 where id=1");

  }

  //将student1表中删除的记录插入到student2中,但是此方法实现有错,因为

  //id字段设置为自增长的,所以在插入记录时我们不能指定值

  public void  insertStudent2(){

  JdbcTemplate jt=this.getJdbcTemplate();

  String arg[]=new String[3];

  arg[0]="1";

  arg[1]="xiaoming";

  arg[2]="wuhan";

  jt.update("insert student2(id,name,address) values(?,?,?)",arg);

  }

  }

  StudentManagerService 接口的实现:

  public class StudentManagerServiceImp implements StudentManagerService{

  private StudentDAO  stdDAO;

  public void setStdDAO(StudentDAO   stdDAO){

  this.stdDAO=stdDAO;

  }

  //此方法为事务型的:删除student1中的记录成功且插入student2的记录也成功,

  //如果insertStudent2()方法执行失败,那么deleteStudent1()方法也应该会失败

  public void  bus_method(){

  this.stdDAO.deleteStudent1();

  this.stdDAO.insertStudent2();

  }

  }

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com