一个用于J2EE应用程序的异常处理框架 - 编程入门网
转发到该方法。我们将在ThreadLocal变量expDisplayDetails中设置这些内容。
但是,为什么要使用java.lang.ThreadLocal变量呢?expDisplayDetails是BaseAppDispatchActiion类中的一个受保护数据成员,这也是它需要是线程安全的原因。java.lang.ThreadLocal对象在这里便可派上用场。 异常处理程序 在上一部分中,我们讨论了如何对异常处理进行抽象。下面给出一些应该满足的约束: 识别异常类型并获得相应的错误代码,该错误代码可用于显示一条消息给终端用户。 记录异常。底层的日志记录机制被隐藏,可以基于一些环境属性对其进行配置。 您可能已经注意到了,我们在表示层中捕捉的惟一异常就是BaseAppException。由于所有checked异常都是BaseAppException的子类,这意味着我们要捕捉BaseAppException的所有派生类。基于类名称来识别错误代码再容易不过了。
可以基于异常类的名称在一个XML文件(exceptioninfo.xml)中对错误代码进行配置。下面给出异常配置的一个例子:
正如您看到的那样,我们把这个异常变为显式,要使用的消息代码是messagecode.employeeconfirmation。然后,为了实现国际化的目的,可以从ResourceBundle提取实际的消息。我们很清楚,不需要对这类异常执行日志记录,因为它只是一条确认消息,而不是一个应用程序错误。 让我们看一看上下文敏感异常的一个例子:
一个用于J2EE应用程序的异常处理框架(5)时间:2011-01-03 bea ShriKant Vashishtha在这里,这个表达式的contextind为true。在handleException方法中传递的上下文可用于创建惟一的错误代码。例如,如果我们把order.getOrder当作一个上下文进行传递,结果得到的消息代码就是异常的消息代码和所传递的上下文的串联。因此,我们获得了一个像messagecode.recordnotfound.order.getOrder这样的惟一消息代码。 对于每个异常来说,可以把exceptioninfo.xml 中的数据封装到一个叫做ExceptionInfoDTO的数据传输对象(data transfer object,DTO)。现在,我们还需要一个占位符,用于缓存这些对象,因为我们不想在异常出现时反复解析XML文件和创建对象。这项工作可以委托给一个叫做ExceptionInfoCache的类来完成,这个类将会在从exceptioninfo.xml文件读取ExceptionInfoDTO对象信息之后缓存所有这些对象。 现在您是否弄清楚了这整个过程?这种方法的核心部分是ExceptionHandler实现,该实现将使用封装在ExceptionInfoDTO中的数据来获取消息代码,创建ExceptionDTO对象,然后基于在给定异常的ExceptionInfoDTO中指定的日志记录类型来记录它。 下面是ExceptionHandler实现的handleException方法:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |