Java EE项目中异常设计及处理总结

标签: java ee 项目 | 发表时间:2014-05-26 15:07 | 作者:hi_henainchun
出处:http://www.iteye.com
异常,为我们处理非正常的业务流程提供了很好的解决方案,如果你有过dbase、c、pascal等过程式语言开发的经历,你一定会深刻体会到,异常机制给你的代码可读行、可维护性带来的好处,同时,程序的健壮性也得到了增强。
在 java项目中,异常设计要注意下面的几点。
一、自定义异常父类的选择
A、自定义异常的父类,可以选择为RuntimeException或Exception。RuntimeException是运行时异常,你可以选择它来做为你的异常父类,因为这种异常不受到编译器检查,因此,给予了程序员很大的灵活性,程序员可以处理这种异常,也可以不处理(实际上并不是不处理,而是不立即处理,等到一个合适的地方再进行处理)。选择RuntimeException作为父类,是很多框架常采用的,如果你是做底层框架的,可以选择 RuntimeException。
B、业务层异常,一般选择Exception作为父类,因为业务层异常比较重要,一般都是要由调用者进行处理或者是要告知调用者会发生这种异常。如果你的代码是提供给第三方厂商用的,业务层封闭统一的异常就显得非常的有必要。这类异常会强制要求程序员进行处理(异常转译或继续声明抛出),程序完整性、健壮性得到了加强。
二、业务层自定义异常结构的设计
A、业务层自定义异常可以考虑按子系统来划分,也就是说,每一个子系统(模块)都有自己的异常定义,每个子系统自己维护自己的,统一向调用者抛出。
B、根据业务类型,从逻辑上划分异常类型,比如:权限相关的,安全相关的,数据库相关的等等。
总的来说,这两种自定义异常也可以混合使用,因为有的时候,子系统(业务模块)本身就是从逻辑上进行划分的。
三、异常结构定义
异常类的父类选定后,再定义自己的异常结构。一般的异常类中,要定义这么一些东西。
A、描述字符串,说明异常的起因,或说明等。
B、异常码。定义一个int或String类型的异常码,异常码在整个系统中统一定义,根据异常继承结构,异常码也可以定义得有层次结构。异常码在大的系统中比较常见,Oracle ,Sqlserver等数据库产品中,或华为、中兴的一些驱动api中。
C、定义一个Throwable的成员变量,用以封装异常结构链。
D、定义无参数、有参数(String,Throwable)的构造方法。
四、在WEB三层模型中,异常的处理
在经典的三层架构模型中,通常都是这样来进行异常处理的:
A、持久层一般抛出的是RuntiomeException类型的异常,一般不处理,直接向上抛出。
B、业务层一般要封装自定义异常,统一向外抛出(这里要注意,如果用spring在业务层管理异常,一定要配置好异常回滚类型,因为spring默认只回滚RuntiomeException类型的)。我也见过一些想省事的人,业务层也不定义任何异常,也不进行try catch,如果业务层出现异常将在表现层进行处理及页面跳转。
C、表现层必须要处理业务层的异常,以正确向客户报告系统出现的问题,这里面是最后一道异常处理的地方。我也见过有懒人在业务层都不处理,直接在web.xml中配置errorPage的,但不建议这么做。
用好异常,对于项目的可维护性、健壮性都有极大的好处,当然,异常也不是万能的,在有些项目中并不适用,比如:纯算法项目,对性能要求极高的项目等,因为异常栈会对系统性能有一定开销,在这些项目中,最后还在老老实实用方法的返回值去标识方法执行的结果,用if else去处理业务逻辑中的非正常情况吧。
原文地址:http://blog.csdn.net/luqin1988/article/details/7970782

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java ee 项目] 推荐:

Java EE项目中异常设计及处理总结

- - Java - 编程语言 - ITeye博客
异常,为我们处理非正常的业务流程提供了很好的解决方案,如果你有过dbase、c、pascal等过程式语言开发的经历,你一定会深刻体会到,异常机制给你的代码可读行、可维护性带来的好处,同时,程序的健壮性也得到了增强. 在 java项目中,异常设计要注意下面的几点. A、自定义异常的父类,可以选择为RuntimeException或Exception.

红帽的 PaaS 平台 OpenShift 支持 Java EE 6

- Jackphone - ITeye资讯频道
红帽公司刚对其旗下的 PaaS (Platform-as-a-Service) 平台—— OpenShift 做了改进,增加对 Java EE 6 的支持,这使得 OpenShift 成为第一个支持 Jaav EE 6 的 PaaS 解决方案平台. 该免费平台使用了最近刚发布的 JBoss Application Server 7  版本,用于帮助开发者在云端更便捷地构建和发布Java 的应用程序.

如何进行Java EE性能测试与调优

- - ITeye博客
性能测试不同于功能测试,不是对与错的检验,而是快与慢的衡量. 在进行真正的性能测试之前要先搞清楚目标:. 在确定的硬件条件下,可以支持的并发数越大越好,响应时间越快越好. 具体需要达到的并发数是多大,要求的响应时间是多快,由产品经理来提出. 在确定的硬件条件下,测试得到最大并发数和相应的响应时间之后.

影响Java EE性能的十大问题

- - 博客 - 伯乐在线
本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE、中间件和JVM技术. 他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题. 容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求. 制定合理的容量规划不仅会确保和跟踪当前IT生产能力和稳定性,同时也会确保新项目以最小的风险部署到现有的生产环境中.

JBoss AS 7.1全面兼容Java EE 6 Full Profile

- - InfoQ cn
上周发布了 JBoss AS 7.1,这是首款全面兼容Java EE 6 Full Profile的JBoss服务器,继Apache Geronimo和Oracle GlassFish之后,成为了 又一款全面兼容Java EE 6 Full Profile的开源服务器. 去年,JBoss AS 7.0完成了 Java EE 6 Web Profile认证,但Full Profile中还额外包含Java Message Service、WebServices和多项管理技术.

Java EE 7 三大新特性的介绍

- - 博客 - 伯乐在线
013 年 6 月中旬甲骨文公司发布了 Java EE 7,该版本的新特性主要集中在提高开发人员的生产力、加强对 HTML5 动态可伸缩应用程序的支持和进一步满足苛刻的企业需求这三个方面. Java EE 7 使得开发人员可以写更少的样板代码,通过丰富的组件来提供一个完整、全面、集成的堆栈来支持和构建最新的 Web 应用程序和框架,同时提供更具扩展性、丰富性和简易的功能.

遵循Java EE标准体系的开源GIS服务平台架构

- - CSDN博客Web前端推荐文章
传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229. 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229. 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229.

Java EE企业系统性能问题的原因和解决建议

- - InfoQ cn
Pierre-Hugues Charbonneau(昵称是P-H)是加拿大CGI公司的高级IT顾问和系统架构师. 近日他发表了题为《 导致Java EE企业性能问题的十大原因》的文章,列举了对Java EE企业系统性能影响最大的因素,并做出了很好的建议. 在文中,P-H首先指出,在设计和实现Java EE相关技术的时候,性能问题是我们所要面临的最大挑战之一.

遵循Java EE标准体系的开源GIS服务平台之二:平台部署

- - CSDN博客架构设计推荐文章
传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229. 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229. 传送门 ☞ GoF23种设计模式  ☞  转载请注明  ☞  http://blog.csdn.net/leverage_1229.

遵循Java EE标准体系的开源GIS服务平台之三:数据发布与访问

- - CSDN博客Web前端推荐文章
传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229. 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229. 传送门 ☞ GoF23种设计模式.         在GIS服务平台构建完毕之后,我们就要着手在此平台上提供服务以供客户端请求访问.