`

关于commerce里的出错处理

阅读更多

1. commnad里遇到系统级异常(如db related exception),cache住,并且封装成ECSystemException来抛出。

例如:
                try {
                       
                        OrderItemAccessBean[]        abOrderItems                = getOrderItems(aabOrder);
                        BigDecimal                                dOrderProductTotal        = BIG_DECIMAL_ZERO;
                       
                        for(int i = 0; i < abOrderItems.length; i++) {
                                dOrderProductTotal = (dOrderProductTotal == null ? abOrderItems[i].getTotalProductInEJBType() : dOrderProductTotal.add(abOrderItems[i].getTotalProductInEJBType()));
                        }
                       
...
                       
                }
                catch(CreateException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, getClass().getName(), strMethod, new Object[] { e.toString() }, e); }
                catch(FinderException e) { throw new ECSystemException(ECMessage._ERR_FINDER_EXCEPTION, getClass().getName(), strMethod, new Object[] { e.toString() }, e); }
                catch(NamingException e) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, getClass().getName(), strMethod, new Object[] { e.toString() }, e); }
                catch(RemoteException e) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, getClass().getName(), strMethod, new Object[] { e.toString() }, e); }
               



2. command里遇到应用级别的异常(如参数校验失败,业务逻辑检查不通过),主动抛出ECApplicationException异常。

例如:
                try {
                        String[] strUsageIds = aRequestProperties.getArray(CalculationConstants.EC_USAGE_ID, null);
                        if(strUsageIds != null) {
                                inUsageIds = new Integer[strUsageIds.length];
                                for(int i = 0; i < strUsageIds.length; i++) { inUsageIds[i] = new Integer(strUsageIds[i]); }
                        }
                }
                catch(NumberFormatException e) {
                        throw new ECApplicationException(ECMessage._ERR_BAD_MISSING_CMD_PARAMETER, getClass().getName(), strMethod, new Object[] { CalculationConstants.EC_USAGE_ID });
                }



3. 抛出异常时需要提供ECMessage,如果ECMessage里面没有合适的定义好的ECmessage可用,你就需要定义自己的ECMessage,提供resource bundle,message key,message parameters。

4. 抛出异常时需要指定出错处理页面ErrorView,这样commerce上层架构捕获异常以后自动跳转到出错页面,没有指定出错处理页面的,下面默认的出错页面被默认使用。

        /**
         * Default value of the generic application error task parameter.
         */
        public static final String GENERIC_APPLICATION_ERROR_TASK =
                "GenericApplicationError";
        /**
         * Default value of the generic application error task parameter.
         */
        public static final String GENERIC_SYSTEM_ERROR_TASK = "GenericSystemError";


5. 出错页面可以通过ErrorDataBean来获取异常中的消息,从而作出适当的异常处理。


一个sample error view的例子(StoreOpenClose.jsp)
<%
String exMsg = "" ;
ErrorDataBean errorBean = new ErrorDataBean();
try {
        DataBeanManager.activate (errorBean, request);

        String exKey = errorBean.getMessageKey();

        //If the message type in the ErrorDataBean is type SYSTEM then
        //display the system message.  Otherwise the message is type USER
        //so display the user message.
        if ( errorBean.getECMessage().getType() == ECMessageType.SYSTEM ) {
                exMsg = errorBean.getSystemMessage();
        } else {
                exMsg = errorBean.getMessage();
        }
       
        if (exKey.equals( "_ERR_GENERIC" )) {
                String[] paramObj = (String[])errorBean.getMessageParam();
                exMsg = paramObj[0];
        }
} catch (Exception ex) {
        exMsg = "" ;
}
%>

...

function initialize() {    
        if ( " <%= hasIndexFile %> " == "false" ) {
                for ( var i=0; i<parent.NAVIGATION.document.DialogForm.elements.length; i++) {
                        if (parent.NAVIGATION.document.DialogForm.elements[i].name == "opencloseLaunchStoreButton" ) {
                                parent.NAVIGATION.document.DialogForm.elements[i].disabled = true ;
                        }
                }
        }

        parent.setContentFrameLoaded( true );
       
        if ( " <%= UIUtil.toJavaScript(exMsg) %> " != "" )
                alertDialog( " <%= UIUtil.toJavaScript(exMsg) %> " );
       
        <%
        if ( (exMsg.equals( "" )) && (actionPerformed != null ) && (!actionPerformed.equals( "" )) ) {
        %>
                alertDialog( " <%= UIUtil.toJavaScript((String)opencloseNLS.get( "opencloseSuccess" )) %> " );
        <%
        }
        %>
}

分享到:
评论

相关推荐

    第讲-电子数据交换优秀文档.ppt

    传统的手工处理方式效率低下且易出错,因此诞生了EDI,旨在通过计算机自动处理和传输商业文件,以实现业务流程的自动化。 2. **EDI的定义及内涵**: - 主体:EDI涉及的是行政、商业、运输等行业中的格式化信息交换...

    电子单证标准化及应用技术.pptx

    电子单证,源于对传统纸面单证传递方式的革新,通过计算机技术实现了规范化、格式化的数据传输和处理。在传统的单证传递中,信息需要通过人工录入和纸面传递,效率低下且易出错。而电子单证则直接在数据库间交换,...

    EJB3+Struts2+GWT Demo

    在"E-Commerce"这个压缩包中,我们可以找到项目的源代码,包括EJB3的实体bean、会话bean,Struts2的Action类,以及GWT的客户端代码。开发者可以通过阅读和分析这些代码,了解如何将这三者有效地整合在一起,以实现一...

    08EDI电子商务系统.pptx

    传统贸易过程中,文件制作、传输和处理主要依靠人力,导致了高成本、低效率和易出错等问题。EDI通过电子手段解决了这些问题,实现了商业信息的快速、准确、自动化的交换,减少了重复劳动,降低了交易成本,提高了...

    基于电子商务的网上购物

    4. 错误处理与异常捕获:JSP中的错误页面可以处理用户请求出错的情况,通过try-catch语句块,可以捕获并处理程序运行时可能出现的异常,提高系统的稳定性。 三、电子商务系统的安全性 1. 数据加密:在传输敏感信息...

    111572862834036电子商务考试复习.docx

    * 传统商务具有成本高,易出错,处理速度慢等缺点,极大地制约了商务活动的效率和规模. 六、网络商品交易中心的特点 优点: * 网络商品交易中心为买卖双方展现了一个巨大的世界市场,参加者还可以通过网络商品交易...

    webMethods公司简介.doc

    4. 提高供应链的效率,帮助客户降低业务成本:通过简化业务流程,实现供应链上下游之间业务流程的自动化,实现实时的信息交换,降低周转时间,提高生产力,降低库存,降低出错率,优化供应链。 5. 提高 IT 投资的...

    ecommerce

    在电子商务(E-commerce)领域,Java技术发挥着至关重要的作用,因为它的稳定性和安全性使得它成为构建大型在线购物平台的理想选择。在这个名为"ecommerce"的项目中,我们可以推测这可能是一个基于Java的电子商务...

    2022秋信息管理系统复习题汇总知识.pdf

    它是数据经过处理后具有意义的数据,有助于决策和理解。 3. 数据是对客观事实记录下来的可鉴别的符号,选项B正确。它是信息的基础,通过编码和解码转化为有意义的信息。 4. 信息按管理层次分为战略信息、战术信息...

    ecomerce

    在电子商务(E-commerce)领域,JavaScript 是一种至关重要的技术,它为在线购物体验提供了丰富的交互性和动态性。本文将深入探讨JavaScript在电子商务网站中的应用及其重要性。 首先,JavaScript 使得用户界面更具...

Global site tag (gtag.js) - Google Analytics