快速业务通道

一个用于J2EE应用程序的异常处理框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
hecked异常的一个例子:

public void updateUser(UserDTO userDTO) throws BaseAppException{   UserDAO userDAO = new UserDAO();   UserDAO.updateUser(userDTO);   ...   if(...)   throw new RegionNotActiveException("Selected region is not active"); } Controller Method: ... try{   User user = new User();   user.updateUser(userDTO); }catch(BaseAppException ex){   //ExceptionHandler is used to handle   //all exceptions derived from BaseAppException } ...

一个用于J2EE应用程序的异常处理框架(2)

时间:2011-01-03 bea ShriKant Vashishtha

迄今为止,我们已经说明,对于所有可能抛出checked异常并被Controller调用的方法,其throws子句中应该只包含checked异常。然而,这实际上暗示着我们在throws子句中不能包含其他任何应用程序异常。但是,如果需要基于catch块中某种类型的异常来执行业务逻辑,那又该怎么办呢?要处理这类情况,方法还可以抛出一个特定异常。记住,这是一种特例,开发人员绝对不能认为这是理所当然的。同样,此处讨论的应用程序异常应该扩展BaseAppException类。下面给出一个例子:

CustomerDAO method: //throws CustomerNotActiveException along with //BaseAppException public CustomerDTO getCustomer(InputDTO inputDTO) throws BaseAppException, CustomerNotActiveException {   . . .   //Make a DB call to fetch the customer   //details based on inputDTO   . . .   // if not details found   throw new CustomerNotActiveException("Customer is not active"); } Client method: //catch CustomerNotActiveException //and continues its processing public CustomerDTO getCustomerDetails(UserDTO userDTO) throws BaseAppException{   ...   CustomerDTO custDTO = null;   try{    //Get customer details    //from local database    customerDAO.getCustomerFromLocalDB();   }catch(CustomerNotActiveException){    ...    return customerDAO .activateCustomerDetails();   } }

在web应用程序层次上处理unchecked异常

所有unchecked异常都应该在web应用程序层次上进行处理。可以在web.xml文件中配置web页面,以便当应用程序中出现unchecked异常时,可以把这个web页面显示给终端用户。

把第三方异常包装到特定于应用程序的异常中

当一个异常起源于另一个外部接口(组件)时,应该把它包装到一个特定于应用程序的异常中,并进行相应处理。

例子:

try {   BeanUtils.copyProperties(areaDTO, areaForm); } catch (Exception se) {   throw new CopyPropertiesException("Exception occurred while using copy properties", se); }

这里,CopyPropertiesException扩展了java.lang.RuntimeException,我们将会记录它。我们捕捉的是Exception,而不是copyProperties方法可以抛出的特定checked异常,因为对于所有这些异常来说,我们都会抛出同一个unchecked CopyPropertiesException异常。

过多异常

您可能想知道,如果我们为每条错误消息创建一个异常,异常类自身是否会溢出呢?例如,如果“Order not found”是OrderNotFoundException的一条错误消息,您肯定不会让CustomerNotFoundException的错误消息为“Customer not found”,理由很明显:这两个异常代表同样的意义,惟一的区别在于使用它们的上下文不同。所以,如果可以在处理异常时指定上下文,我们无疑可以把这些异常合并为一个RecordNotFoundException。下面给出一个例子:

try{   ... }catch

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号