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

http://tech.ddvip.com   2006年11月21日    社区交流

本文详细介绍一个用于J2EE应用程序的异常处理框架

  解决方案是使用模板方法(Template Method)设计模式(引自GOF:“它用于实现一个算法的不变部分,并把可变的算法部分留给子类来实现。”)。我们需要一个包含模板方法形式算法的基类。该算法将包含用于BaseAppException的try-catch块和对dispatchMethod方法的调用,方法实现(委托给派生类)如下面的基于Struts的Action中所示:

public abstract class BaseAppDispatchAction
extends DispatchAction{
 ...
 protected static ThreadLocal
 expDisplayDetails = new ThreadLocal();
 public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response) throws Exception{
  ...
  try{
   String actionMethod = request.getParameter(mapping.getParameter());
   finalDestination =dispatchMethod(mapping,form, request, response,actionMethod);
  }catch (BaseAppException Ex) {
   ExceptionDisplayDTO expDTO = (ExceptionDisplayDTO)expDisplayDetails
.get();
   IExceptionHandler expHandler = ExceptionHandlerFactory
.getInstance().create();
   ExceptionDTO exDto = expHandler.handleException(
expDTO.getContext(), userId, Ex);
   ActionErrors errors = new ActionErrors();
   errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(exDto .getMessageCode()));
   saveErrors(request, errors);
   return mapping.findForward(expDTO.getActionForwardName());
  } catch(Throwable ex){
   //log the throwable
   //throw ex;
  } finally {
   expDisplayDetails.set(null);
  }

  在Struts中,DispatchAction::dispatchMethod方法用于把请求转发给正确的Action方法,叫做actionMethod。

来源:bea    作者:ShriKant Vashishtha    责编:豆豆技术应用

正在加载评论...