关于Spring,EJB以及事物

最近在开发过程中遇到了事物处理的问题,目前项目的代码中对事物的处理存在各种各样的问题:


1、事物边界不明确。具体表现在:有些程序员将事物是写在DAO里面的,而有些是写在Service层的,有些是在控制层(Servlet)的...


特别是写在DAO里面的会存在很大的问题,比如当某个DAO只是完成一系列操作的一部分的时候,在他内部却将整个事物提交了,可能会造成数据的不完整性。


后来花了很大的力气,统一将事物(边界)放在Service层。考虑到一个Service基本上可以看做是一个完整的业务逻辑,所以事物(的边界)放在Service层是比较合理的。


但是还是可能会存在一些问题,比如一个Service只是其他Service的一部分....如果在Service内部将事物提交了,还是会影响数据的完整性....

 

2、事物的回滚写的乱七八糟的!


3、事物过长。主要表现在两个方面:


1)表结构比较复杂,完成一个业务逻辑,需要操作很多个表,这个时候不得不将事物拉长,如果并发量大了,很容易造成死锁的现象。

2)有些程序员代码写的不规范,在一个方法的开始就conn.setAutoCommit(false);,而下面还要做N多与事物无关的操作!这样无疑是人为的拉长了事物的时间。


---------

在解决以上两个问题,特别是确定事物边界的时候,感觉非常的头痛,这个时候想到只有一个比事物更高层次的东西,才能去合理的、有效的管理这些事物!---这不就是EJB/Spring中的事物管理容器吗?!


想想Spring中的声明式的事物....整个代码看不到一句conn.setAutoCommit(false);....

哎,感叹一下,继续我的JDBC吧。


----------

开源框架之所以出现并流行,是有其道理的,是程序员们在长期"斗争"总结出解决问题(比如上面提到的事物问题)的方法,经验。要学习其精华!

 

--------------

解耦--开发可维护,可扩展,可复用的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值