`
yunzhongxia
  • 浏览: 648340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex异常处理设计

    博客分类:
  • flex
阅读更多

      Flex与服务器交互一般需要监听ResultEvent.RESULT事件和FaultEvent.FAULT事件。很多时候关注的是RESULT事件,FAULT事件在出现异常的情况下显得很有用。FAULT事件分为客户端和服务器端两大类。

      下图是一个客户端的错误信息,代码如下:

      

private function onFault(event:FaultEvent):void{
            Alert.show(event.toString());
}

       

    

   从弹出的信息中可以看出是因为amf的url地址不对造成的。

   下面来分析下FaultEvent对象。

    FaultEvent对象的一个重要属性就是fault,Fault 类表示远程过程调用 (RPC) 服务调用中存在错误。

    Fault的常用属性如下表:

   

 

      下面是服务器端的异常信息。

      

 

     与客户端异常信息对比可以发现:客户端的faultCode以Client开头,服务器端的faultCode以Server开头。

     在java端可能用的比较多的异常处理类似于:new Exception("用户ID不能为空");这些异常是受检验的异常,用户很容易知道该如何办,但是如果抛出一个运行时异常,例如:java.lang.NullPointerException。用户就傻了,我改如何处理呢?是我操作有误还是系统出现问题了。业务用户现在能做的就是在bug系统上报一个bug。

     一个好的异常处理架构应遵循以下规则:

    1 任何异常都不会导致应用系统的崩溃。
    2 在发生异常时,允许应用程序进行相应的处理。
    3 显示给用户的错误信息要清晰的描述发生了什么错误以及应该采取什么样的处理。
    4 如果需要辅助信息,错误信息还要帮助用户与帮助部门交互,为帮助部门团队提供必要的信息, 使他们能够快速的容易的重现错误。
    5 日志信息能为开发团队人员在识别错误、在应用程序代码中定位错误产生的位置以及修正错误提供必要的信息。
    6 错误处理代码不会降低应用程序代码的可读性。我们经常在网上查询oracle错误代码的处理方法。    

 

   在来回顾下,Fault对象的faultCode、faultDetail、faultString、rootCause。可以根据错误代码(faultCode)让用户做不同的处理,当然系统也可以记录下一些重要的异常信息作为系统优化的依据,文本说明(faultString)表示那个字段不能为空等提示信息,详细错误信息(faultDetail)可以知道错误更详细的信息,那个类的那个方法发生了什么异常。堆栈信息(rootCause)可以让我们更加清晰的看到错误的堆栈信息。

   下面是一个很常用的异常信息提示框,点击详细信息的时候,开发人员可以很容易的定位异常。

  

 

 

    我们知道了客户端Fault对象的数据结构后,就需要知道java端如何将java.lang.Exception转化为Fault的。以下主要说的是blazeds。

    flex.messaging.MessageException继承自LocalizedException,LocalizedException继承自RuntimeException。

   

    

public class LocalizedException extends RuntimeException
{
    /** @exclude - transient, the resourceLoader for localized strings doesn't need to serialize.  */
    protected transient ResourceLoader resourceLoader;
    /** @exclude */
    protected int number;
    /** @exclude */
    protected String message;
    /** @exclude */
    protected String details;
    /** @exclude */
    protected Throwable rootCause;

}

 

 

  可以很清晰的看到message对应Fault对象的faultString,details对应Fault对象的faultDetail,rootCause对应Fault对象的rootCause,number和Fault对象的code的对应还需要ResourceLoader从blazeds的errors.properties文件中加载相应的错误代码信息。例如:

 

10000=There was an unhandled failure on the server. {0}
10001=Null endpoint id arrived on message.
10002=No such endpoint: {0}
10003=No configured channel has an endpoint path ''{0}''.
10004=No destination with id ''{0}'' is registered with any service.
10005=Destination ''{0}'' not accessible over channel ''{1}''.
10006=Error occurred while attempting to convert an input argument''s type.
10007=Cannot invoke method ''{0}''.
10007-0-details=Method ''{0}'' not found.
10007-1-details={0} arguments were sent but {1} were expected.
10007-2-details=The expected argument types are ({0}) but the supplied types were ({1}) and converted to ({2}).
10007-3-details=The expected argument types are ({0}) but the supplied types were ({1}) with none successfully converted.
10007-4-details=The expected argument types are ({0}) but no arguments were provided.
10007-5-details=No arguments were expected but the following types were supplied ({0}).
10008=Cannot create class of type ''{0}''.
10008-0-details=Type ''{0}'' not found.

 

 

 将整个系统的异常进行分类是一个很难的事情,优秀的异常分类能让我们快速的定位错误发生的位置,该如何处理。

 如果系统中用到了spring那么很容易的用ApplicationContext加载资源文件,从资源文件中获得相应code的值。

 

 知道了以上的知识后,我们就可以很容易的实现flex的异常处理了,new出一个MessageException,设置messageException的各个属性就可以了。简单的代码如下;

 

MessageException flex=new MessageException();
flex.setCode("错误代码");
flex.setMessage("我的测试数据");
flex.setDetails("详细信息");
flex.setRootCause(flex.getCause());
throw flex;

 

如果你的系统用到了SPRING BLAZEDS INTEGRATION,那么请继续往下看。

我们的系统中也许有自己的异常处理类,不想每次抛出异常都是flex的MessageException,如果有一个转化器将会大大降低j2ee与blazeds的耦合度。

其实在SPRING BLAZEDS INTEGRATION中我们很容易实现异常信息转化。

配置如下:

<bean id="sdpExceptionTranslator" class="org.sdp.flex.SdpExceptionTranslator"/>
    <flex:message-broker id="_messageBroker"
		services-config-path="/WEB-INF/flex/services-config.xml">
		<!-- 异常转化类  -->
		<flex:exception-translator ref="sdpExceptionTranslator" />
	</flex:message-broker>

 exception-translator 属性定义了异常转化类的bean。该java只需要实现ExceptionTranslator 接口就可以了。handles方法判断要拦截的异常类,translate方法负责将一个java异常转化为blazeds异常。

 

 

public class SdpExceptionTranslator implements ExceptionTranslator {

	 /**
     * 
     * {@inheritDoc}
     */
    public boolean handles(Class<?> clazz) {
    	//判断要拦截的exception类型
        return ClassUtils.isAssignable(SdpException.class, clazz);
    }

    /**
     * 
     * {@inheritDoc}
     */
    public MessageException translate(Throwable t) {
        if (t instanceof SdpException) {
        	SdpException sdp=(SdpException) t;
            MessageException se = new MessageException();
            se.setCode(""+sdp.getNumber());
            se.setMessage(sdp.getMessage());
            se.setDetails(sdp.getDetails());
            se.setRootCause(t);
            return se;
        }
        return null;
    }

}

 

 

 

   限于时间限制,flex异常就先写到这里,有什么疑问可以给我留言。以后我会将自己的flex4+blazeds4+SPRING BLAZEDS INTEGRATION1.5+spring开发平台贡献出来,当然里面有更加详细的异常处理方法了,请大家多多关注我的博客。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 23.7 KB
  • 大小: 32.7 KB
  • 大小: 16.8 KB
  • 大小: 16.1 KB
6
1
分享到:
评论
9 楼 juedi 2015-01-08  
很好,是我需要的东东
8 楼 houyongbo03 2012-08-03  
请问如何获取 distnation,method,param 等信息
7 楼 bravowell 2011-07-20  
yunzhongxia 写道
bravowell 写道
问下你flex里面的提示框代码怎么写的,

自定义一个titlewindow就可以了

我是 想问如何拿到 distnation,method,param 等信息
6 楼 bravowell 2011-07-20  
flex怎么拿不到堆栈信息 ?
5 楼 yunzhongxia 2011-07-20  
bravowell 写道
问下你flex里面的提示框代码怎么写的,

自定义一个titlewindow就可以了
4 楼 bravowell 2011-07-20  
问下你flex里面的提示框代码怎么写的,
3 楼 bravowell 2011-07-19  
yunzhongxia 写道
bravowell 写道
正好用到这块 ,能发你的开发平台吗? bravowell@qq.com 谢谢。

谢谢你的关注,目前还不能与大家一起共享,以后会开源的。

:)碰到问题在咨询你
2 楼 yunzhongxia 2011-07-19  
bravowell 写道
正好用到这块 ,能发你的开发平台吗? bravowell@qq.com 谢谢。

谢谢你的关注,目前还不能与大家一起共享,以后会开源的。
1 楼 bravowell 2011-07-19  
正好用到这块 ,能发你的开发平台吗? bravowell@qq.com 谢谢。

相关推荐

    Flex 开发详细设计文档

    Flex开发涉及的技能包括ActionScript编程、MXML语法、XML数据处理、Flash Player或Adobe AIR平台的理解,以及良好的UI设计原则。这份详细设计文档为开发团队提供了一个清晰的指南,确保项目按照预定的规格和标准进行...

    flex 面试题flex

    AS2(ActionScript 2.0)与AS3(ActionScript 3.0)是两种不同的编程语言,AS3运行在AVM2虚拟机上,比AS2快,支持异常处理和强类型。AS3是面向对象的,而AS2则不是。 2. Flex开发框架及优缺点: - Cairngorm:...

    Flex3企业级Web应用系统设计与实现

    这个框架不仅涵盖了从前端到后端的完整数据流,而且还提供了模块化设计思路,如系统架构的分层设计、模块/接口设计以及异常捕捉设计等,这些都是构建稳定、高效企业级Web应用系统的关键。 #### 结语 《Flex3企业级...

    Java与Flex开发入门

    Java的核心特性包括垃圾回收、异常处理和多线程,使其成为企业级应用开发的理想选择。在Web开发领域,Java Servlets和JavaServer Pages(JSP)常用于构建动态网页,而Spring框架、Hibernate ORM和Struts等库则提供了...

    Flex做的登录表单

    通过异常处理机制,我们可以优雅地处理这些问题,给用户适当的反馈。 9. **状态管理**: 如果登录成功,可能会涉及到用户状态的管理,例如设置session或cookie来保持登录状态。Flex可以通过SharedObject或者在...

    FLEX强制类型转换

    6. **类型转换与异常处理**:在进行类型转换时,可以结合异常处理机制来更好地管理可能出现的问题。 #### 五、总结 通过上述介绍,我们可以看到FLEX中的强制类型转换是一个非常实用的功能。无论是使用`as`关键字...

    flex写的rss订阅程序

    Flex提供了事件驱动的异常处理,可以在程序中捕获和处理错误。 9. **用户界面设计**:为了提供良好的用户体验,RSS订阅程序需要有直观的界面设计。Flex提供了样式表和皮肤系统,可以根据需要自定义组件外观。 10. ...

    Flex与服务器端通信

    - **服务端接口设计**:为了与Flex的RemoteObject通信,C#服务器需要提供对应的方法接口,这些接口会被Flex客户端调用,实现业务逻辑的交互。 4. **Flex源码解析** - **ActionScript代码**:在Flex源码中,通常会...

    Flex4五子棋源码

    8. **错误处理和调试**:源码中应包含适当的错误处理机制,以确保程序在遇到异常情况时能够优雅地处理,同时,Flash Builder的调试工具可以帮助开发者定位和修复问题。 通过研究这个源码,开发者不仅可以学习到如何...

    C#与flex交互

    6. **异常处理和优化**: 在实际开发中,需要注意错误处理和性能优化,例如,确保调用方法的参数类型匹配,防止跨域安全问题,以及合理使用异步调用来避免阻塞UI线程。 以上就是关于C#与Flex交互的详细步骤和知识...

    flex整合java开发的资料

    8. **flex与JAVA开发指南.pdf**:这是一本全面的指南,可能涵盖了Flex与Java的完整开发流程,包括项目设置、数据通信、异常处理、性能优化等方面的内容。 学习和理解这些资料,开发者可以掌握如何有效地利用Flex...

    Flex面试题.pdf

    AS2基于AVM1,是非面向对象的,而AS3基于AVM2,是强类型的面向对象编程语言,具有更快的执行速度和异常处理机制。AS3提供了更好的类型检查和错误预防,增强了性能和稳定性。 2. Flex开发框架: - Cairngorm:...

    Flex实现的计算器

    对于计算器应用,测试包括确保所有运算符都能正确工作,以及边界条件和异常情况的处理。 8. **性能优化** 虽然Flex可以创建复杂的交互式应用,但需要注意性能优化。例如,减少不必要的重绘,合理使用组件缓存,...

    flex解析json的swc包(entity-flex-v1-02)及例子

    6. **异常处理**:在处理JSON时,要确保捕获可能出现的错误,例如无效的JSON格式、网络问题等。 通过深入理解这个SWC包的API和示例,开发者可以更好地掌握在Flex中处理JSON数据的方法,提高应用程序的性能和用户...

    java连接flex代码

    Flex客户端需要捕获并处理来自后端的异常,同时在后端,日志记录可以帮助追踪和解决可能出现的问题。 7. **性能优化**:通过合理设计服务接口,减少不必要的网络往返,使用数据批处理,以及缓存策略等手段,可以...

    flex 与java后台整合 PPT

    Flex提供了事件驱动的错误处理机制,可以捕获并处理与后台交互时出现的异常。同时,使用Flex Builder或Chrome的Flex SDK插件可以帮助开发者进行前端代码的调试。 7. **安全性和性能优化**: 当Flex应用与Java后端...

    Flex与j2ee的整合

    - **错误处理**:在前后端均添加适当的异常处理机制,以便捕获并处理可能出现的问题。 通过以上步骤,我们能够完成一个基本的Flex与J2EE整合的增删改查应用。这种结合方式不仅提供了丰富的用户体验,也充分利用了...

    Flex与java通讯

    Flex提供了事件驱动的错误处理,而Java可以通过异常处理来捕获和处理错误。 9. **Performance Optimization** 优化通信性能包括减少数据传输量、合理设计数据结构、缓存策略等。AMF的使用已经大大提高了性能,但还...

    flex 打印源代码

    10. **事件处理**: 使用`PrintJobEvent`事件监听打印状态,如开始、完成、错误等,以便提供反馈或处理异常。 综上所述,学习和理解Flex打印源代码涉及ActionScript编程、Flex组件使用、项目配置、模板设计以及打印...

    FLEX4 信息系统

    3. 错误处理:在进行数据库操作时,需要考虑异常情况,如网络中断、数据库连接失败等。FLEX4提供了事件处理机制,通过监听fault事件,我们可以对错误进行捕获和处理。 四、优化与扩展 1. 响应式设计:FLEX4支持...

Global site tag (gtag.js) - Google Analytics