J2EE中使用Spring进行事务和异常设计
来源:互联网 发布:有朋自远方来不亦说乎 编辑:程序博客网 时间:2024/05/16 05:37
Spring的事务实现采用基于AOP的拦截器来实现,如果没有在事务配置的时候注明回滚的checked exception,那么只有在发生了unchecked exception的时候,才会进行事务回滚。因此在DAO层和service层,最好抛出unckecked exception,毕竟对于数据库操作,使用unckecked exception更加合适,这个方面的例子hibernate就是一个,在hibernate2中,HibernateException还是checked exceptions,但是到了hibernate3中就成了unchecked exceptions,因为对于数据库操作来说,一旦出现异常,就是比较严重的错误,而且在client端基本上是无能为力的,所以使用unchecked exceptions更加合适。
另外,在DAO和service层的代码中,除非是为了异常的转化、重新抛出,否则不要捕捉和处理异常,否则AOP在拦截的时候就不能捕捉到异常,也就不能正确执行回滚。这一点通常很容易被忽视,只有在明白了spring的事务处理机制后,才能领会到。
对于hibernate的异常,spring会包装hibernate的upckecked hibernateException到DAOAccessException,并且抛出,在事务管理层,一旦接收到DAOAccessException就会触发事务的回滚,同时该异常会继续向上层抛出,供上层进一步处理,比如在UI层向用户反馈错误信息等。
在spring的事务管理环境下,使用unckecked exception可以极大地简化异常的处理,只需要在事务层声明可能抛出的异常(这里的异常可以是自定义的unckecked exception体系),在所有的中间层都只是需要简单throws即可,不需要捕捉和处理,直接到最高层,比如UI层再进行异常的捕捉和处理。
另外,在DAO和service层的代码中,除非是为了异常的转化、重新抛出,否则不要捕捉和处理异常,否则AOP在拦截的时候就不能捕捉到异常,也就不能正确执行回滚。这一点通常很容易被忽视,只有在明白了spring的事务处理机制后,才能领会到。
对于hibernate的异常,spring会包装hibernate的upckecked hibernateException到DAOAccessException,并且抛出,在事务管理层,一旦接收到DAOAccessException就会触发事务的回滚,同时该异常会继续向上层抛出,供上层进一步处理,比如在UI层向用户反馈错误信息等。
在spring的事务管理环境下,使用unckecked exception可以极大地简化异常的处理,只需要在事务层声明可能抛出的异常(这里的异常可以是自定义的unckecked exception体系),在所有的中间层都只是需要简单throws即可,不需要捕捉和处理,直接到最高层,比如UI层再进行异常的捕捉和处理。
- J2EE中使用Spring进行事务和异常设计
- spring中异常的使用--事务
- Spring - Jdbc的使用 和 Spring进行事务控制
- J2EE基础教程:Spring 事务
- [j2ee][spring]使用UnitilsJUnit4进行测试
- J2EE中使用Spring AOP框架和EJB组件
- spring事务常见问题、异常分析和解决方法
- Spring事务和异常回滚
- spring事务和数据库异常类别
- Spring事务回滚和异常类
- J2EE异常设计
- spring中事务注解使用
- 使用Spring实现异常统一处理【四】--error-page中对异常进行log
- spring事务异常
- Spring事务异常不回滚
- Spring 事务异常处理
- 使用ExceptionHandler进行Spring mvc 异常处理
- 大型J2EE项目中异常处理机制的设计
- 【黑马程序员】 java笔记——异常
- 记录Scrollview里的setContentOffset的动画冲突问题
- 如何在web中打开数据库中的文件
- 财务数字大小写转换函数代码
- 向 ReportViewer 报表中添加自定义代码
- J2EE中使用Spring进行事务和异常设计
- 2.28 Displaying Progress with UIProgressView
- failed to load properties file for project "..."
- hibernate的cascade
- ORACLE CONVERT DATABASE
- VLC SDK 获取
- MySQL的C语言API
- Tmux
- wpa_supplicant介绍与使用