浏览 7781 次
锁定老帖子 主题:DAO 设计4、事务处理(1)
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-28
java 代码
在 JDBC 中,调用事务处理并不复杂,因为 Connection 类提供了现成的方法,就是 setAutoCommit() 、commit() 和 rollback()。 我们希望 DAO 能够在这个基础上更加方便的处理事务:每个线程都执行各自的事务,一旦事务开始,线程中所有的 DAO 对象的操作都将处于该事务当中,随同事务一起提交和回滚,这样就能大大简化当一个事务需要连接多个数据库时的处理方式。 每个线程执行各自的事务,这同数据库本身处理事务的方式是一致的,不需要特别设计。另外每个线程还需要有各自的标识说明当前事务状态,用 ThredLocal 就可以了。 首先给 DAO 类增加事务处理的静态方法: DAO.java
可以看出,这几个方法都允许连续调用多次,但实际上只有第一次起了作用。 我们争论过是否实现“事务嵌套”。但实际上根据事务的定义,事务不存在“嵌套”的说法。想一想,如果“子事务”被 rollback 掉了,那么因为它执行不成功,“父事务”也必然会被 rollback 掉,否则就不叫事务了。这跟在同一个事务里没有区别。JDBC 也没有所谓“事务嵌套”的概念。 当事务开始之后,持有 Connection 的 DbExecutor 对象必须被缓存起来以供下次调用。它们被缓存在 GlobalTransaction 中(见下图)。一旦事务结束,GlobalTransaction 便会将线程中缓存的 DbExecutor 对象全部清掉。 DbExecutorFactory.java
GlobalTransaction.java
同时,DAO 对象在每次执行完数据库操作的时候,要判断一下当前是否处于事务当中。以 insert 方法为例: DAO.java
至此便实现了 DAO 对事务的处理。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-30
学习了
|
|
返回顶楼 | |
发表时间:2007-03-30
killvirus 写道 学习了
一样 |
|
返回顶楼 | |
发表时间:2007-03-30
http://www.iteye.com/post/177582
|
|
返回顶楼 | |
发表时间:2007-04-03
写得不错
|
|
返回顶楼 | |
发表时间:2007-04-08
ok 多看些源代码应该会更有心得
|
|
返回顶楼 | |