`
zerozone
  • 浏览: 205390 次
  • 来自: 北京
社区版块
存档分类
最新评论

Flex远程调用机制RemoteObject应用技巧

阅读更多

本文主要讨论Flex在客户端与J2EE中间层数据交互的过程。

Flex是构建RIA应用的客户端技术。它的优势在于提供了丰富的客户 端表现能力(例如增强UI组件、缓存、拖放、收缩/展开等),避免了基于HTML技术的缺陷;同时无缝地结合了J2EE技术在中间层(业务逻辑层)的强大优势。

尽 管MacroMedia提出的"体验经济"有宣传策略的成分,但RIA、Ajax的流行还是说明富客户端技术有市场需求。正如J2EE平台架构一样,任何 技术都不是完美的。每个新技术的出现都是为了解决特定的问题。J2EE构建Web应用已经很成熟,已经有很多好的实践,不过受J2EE自身的限制,它在展 现富客户端方面能力有限(JSF的出现也许会解决这个问题)。

基 于RPC的HTTPService、WebService和RemoteObject是常见的数据访问机制。根据官方资料,RemoteObject在性 能和开发效率方面表现比较好。基于XML文本协议的数据封装方式如WebService/HTTPService在大用户并发情况及负载过重的情况下, RemoteObject采用的AMF(Actice Message Format,目前版本是AMF3)效率更高。AMF协议是一种给予HTTP的二进制协议,把中间层的业务对象(主要是商业数据对象)由Java序列化再 反序列化为ActionScript对象。

RemoteObject使用过程有几个问题也比较麻烦。

1.编译、配置过程烦琐,例如常见的unknown destination问题就是由于编译或配置过程有误造成的。

2. 编写与Java对象对应的ActionScript对象也是一个比较烦琐的过程。可以归为重复性而且意义不大的工作。可以考虑由工具完成此项任务。想象一 下,对于一个面临需求变化且规模较大的项目,要维护ActionScript与对应Java对象的映射,确实不是件令人愉快的事情。

遇到的几个问题:

1.unknown destination

出错原因可能是flex编译器未制定service参数。

解决方法:在Flex Builder或安装FlexBuilder2插件的Eclipse环境中设置编译器参数,选中Flex项目右键,选中properties,再选择Flex Complier,在附加参数中增加相应参数及值。例如下面两个,黑体是修改前,红体字是修改后。

-locale en_US

-locale en_US -context-root=/flex -services="C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\flex\WEB-INF\flex\services-config.xml"

2.could't invoke XXX method(例如调用具体RO的GetQuote,误写成getQuote)

原因大概是由于具体RO的函数名写错了,由于MXML语言大量使用参数注释型的方式指定对象属性,导致在引号之内的标记无法被编译器识别,问题被延迟到Run-time时刻发现。

3.Send failed

原因是service-config.xml中的channels定义my-amf的{context.root}在Flex Builder编译器参数中未指定其context-root,导致编译的swf文件可能有误;

解决方法同1

4.Ljava.lang.NoSuchMethodError...

原 因是RO对应的Java代码中可能出现调用不存在的方法。例如某个RO对应Java类Ticker在其函数中GetQuote中new一个 StockQuote实例StockQuote x = new StockQuote(param1,param2),但StockQuote类只有一个空参数的构造函数,因此NoSuchMethodError错误 被传递到Flex调用RO的客户端。为什么会出现Ticker引用不存在的StockQuote构造函数,原因是没有及时同步代码。比如, StockQuote代码修改了,删除了带参数的构造函数,而依赖此类的Ticker没有及时修正。

5.ReferenceError: Error #1056: 无法为 a 创建属性 b

这是一个奇怪的问题,所有同步Java对象类的ActionScript类,即通过metadata关键字RemoteClass指定的类。对应Java类的属性名称不能以大写字母开头。

例如,StockQuote类在java
java 代码
 
  1. package com.stockquote;  
  2.     public class StockQuote {  
  3.   
  4.     public StockQuote(){}  
  5.   
  6.     public String getCompany(){  
  7.         return Company;  
  8.     }  
  9.   
  10.     public void setCompany(String company){  
  11.         this.Company = company;  
  12.     }  
  13.   
  14.     public double getPrice(){  
  15.         return price;  
  16.     }  
  17.   
  18.     public void setPrice(double price){  
  19.         this.price = price;  
  20.     }  
  21.   
  22.     private String Company;  
  23.     private double price;  
  24. }  


在ActionScrpit中,Company和price必须以小写开头,否则会出错,即无法在Flex调用端反序列该字段。

java 代码
 
  1. package com.stockquote{  
  2.     [Bindable]  
  3.     [RemoteClass(alias="com.stockquote.StockQuote")]  
  4.   
  5.     public class StockQuote{  
  6.   
  7.         function StockQuote () {  
  8.             // Constructor code if needed  
  9.             trace(this);  
  10.         }  
  11.         public function getCompany():String{  
  12.             return Company;  
  13.         }  
  14.   
  15.         public function setCompany(company:String ):void{  
  16.              this.Company = company;  
  17.         }  
  18.   
  19.         public function getPrice():Number{  
  20.              return price;  
  21.         }  
  22.   
  23.         public function setPrice(price:Number):void{  
  24.              this.price = price;  
  25.         }  
  26.           
  27.         public var Company:String;  
  28.         public var price:Number;  
  29.     }  
  30. }  

如上代码,会导致以下错误。

ReferenceError: Error #1056: 无法为 com.stockquote.StockQuote 创建属性 company。

分享到:
评论

相关推荐

    flex中actionscript动态调用remoteobject类

    ### Flex中ActionScript...通过以上介绍,我们可以看到在Flex中使用ActionScript动态调用RemoteObject类的方法及其应用场景。这种方法不仅可以简化客户端与服务器端的交互逻辑,还能提高应用程序的灵活性和可维护性。

    flex+java+remoteObject

    在Flex和Java的远程调用中,RemoteObject扮演了中间人的角色,它使得Flex客户端可以像调用本地对象一样调用Java服务器上的方法。 要实现Flex与Java的RemoteObject通信,首先需要在Flex客户端创建一个RemoteObject...

    Flex与java交互 远程调用方式

    标题中的“Flex与Java交互 远程调用方式”指的是在Adobe Flex应用程序中与Java后端进行通信的技术。Flex是一种基于ActionScript的开源框架,用于构建富互联网应用程序(RIA),而Java是后端开发的常用语言。两者之间...

    FLEX和使用RemoteObject和后台通信

    在Flex开发中,与后端服务进行数据交互是常见的需求,`RemoteObject` 是Adobe Flex框架提供的一种组件,用于在Flex客户端与服务器之间实现远程调用(RPC, Remote Procedure Call)。`RemoteObject` 可以方便地将Flex...

    flex remoteobject调用java服务

    eclipse3.7 + flash builder 4.5插件 + tomcat6.X调试通过,一个flex remoteobject简单例子(BlazeDS)。实际导入后指定flex server--java settings--blazeds.war的路径

    flex4使用RemoteObject学习

    RemoteObject是Flex提供的一种服务,它使得客户端与服务器端之间的通信变得简单,尤其是对于需要调用远程服务或业务对象的情况。 在Flex中,RemoteObject组件是实现AMF(Action Message Format)协议的关键。AMF是...

    flex远程过程调用部署文档

    Flex远程过程调用(RPC)部署涉及多个关键步骤和技术,主要目标是使Flex客户端能够与服务器端的Java代码进行通信。以下是对Flex RPC部署过程的详细说明: 1. **项目结构**: 首先,确保项目是按照Flex的要求组织的...

    flex使用BlazeDS远程调用java例子.

    在本例子中,我们将探讨如何使用Flex与Java后端进行远程调用,借助Adobe的BlazeDS服务。BlazeDS是Flex与Java服务器之间通信的一个中间件,支持AMF(Action Message Format)协议,提供数据推送、拉取和消息代理等...

    flex远程对象调用,flex和spring的集成,分页

    标题中的“flex远程对象调用”指的是Flex应用程序与服务器端应用进行通信的一种技术。Flex作为客户端的富互联网应用(RIA)框架,可以使用Remote Object(RO)服务来调用服务器上的业务逻辑,实现数据的交互。远程...

    flex访问remoteObject实例

    Flex Builder或IntelliJ IDEA等IDE提供了内置的调试工具,可以帮助开发者追踪和调试远程调用。 8. **错误处理**:在使用RemoteObject时,必须考虑可能出现的网络错误和服务器错误,通过添加FaultEvent监听器来捕获...

    flex 和java 一起开发.实验远程调用.

    本实验旨在探讨如何实现Flex与Java之间的远程调用,以便前端Flex应用可以与后端Java服务进行通信。 首先,Flex与Java的通信通常依赖于AMF(Action Message Format)协议,这是一种高效的二进制数据交换格式,使得...

    FLEX 下的MVP应用 以及 ColdFusion 的远程服务调用

    本文将深入探讨在FLEX环境中实现Model-View-Presenter(MVP)模式的应用,以及如何通过ColdFusion进行远程服务调用。MVP模式是一种设计模式,常用于用户界面的架构,旨在分离业务逻辑、用户界面和数据呈现,提高代码...

    Flex调用Webservice及java程序

    我们可以在Java服务器端创建代理服务,并在Flex客户端通过`RemoteObject`类来调用这些服务。 - **LCDS**:Adobe的商业产品,扩展了BlazeDS的功能,包括高级数据推送、事务管理、安全性和性能优化。 4. **Flex中的...

    上一篇的flex的远程对象调用,flex和spring集成分页的jar和截图

    标题中的“flex的远程对象调用”指的是在Adobe Flex应用程序中使用Remote Object(RO)服务进行远程通信的技术。Flex是一个开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA)。通过RO服务,Flex应用...

    flex使用 RemoteObject 与java进行json格式的数据交互

    在Flex开发中,为了实现客户端(Flex应用)与服务器端(通常是Java应用)的数据交互,开发者经常使用`RemoteObject`组件。本篇文章将深入探讨如何使用`RemoteObject`与Java进行JSON格式的数据交换,以便更好地理解和...

    Flex的remoteObject例子

    总之,Flex的RemoteObject是实现客户端与服务器交互的重要工具,它简化了数据传输和远程服务调用的过程,是开发RIA不可或缺的一部分。熟悉并掌握RemoteObject的使用,将有助于提升你在Flex开发中的效率和能力。

    flex3(remoteobject+datagrid+.....)+java+oracle源代码

    RemoteObject是Flex与远程服务进行通信的桥梁,它使用AMF(Action Message Format)协议,这是一种高效的数据交换格式,可以快速地传输复杂的数据结构。在Flex3中,你可以配置RemoteObject来连接到特定的服务端点,...

    flex与java远程传值demo

    在Flex项目中,我们可以使用RemoteObject或WebService组件来调用Java服务,而这些调用会被转换成AMF消息发送到BlazeDS。 5. 文件结构: - `flexDemo`:包含了Flex项目的源代码,包括MXML和ActionScript文件。MXML...

    red5中使用remoteObject

    RemoteObject是Adobe Flex框架中的一个特性,允许在客户端(如Flash Player)和服务器端之间进行透明的RPC(远程过程调用)通信。 在Flex应用中,RemoteObject是客户端与服务器交互的关键组件,它提供了与服务器...

Global site tag (gtag.js) - Google Analytics