本文主要讨论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 代码
package com.stockquote;
public class StockQuote {
public StockQuote(){}
public String getCompany(){
return Company;
}
public void setCompany(String company){
this.Company = company;
}
public double getPrice(){
return price;
}
public void setPrice(double price){
this.price = price;
}
private String Company;
private double price;
}
在ActionScrpit中,Company和price必须以小写开头,否则会出错,即无法在Flex调用端反序列该字段。
java 代码
package com.stockquote{
[Bindable]
[RemoteClass(alias="com.stockquote.StockQuote")]
public class StockQuote{
function StockQuote () {
// Constructor code if needed
trace(this);
}
public function getCompany():String{
return Company;
}
public function setCompany(company:String ):void{
this.Company = company;
}
public function getPrice():Number{
return price;
}
public function setPrice(price:Number):void{
this.price = price;
}
public var Company:String;
public var price:Number;
}
}
如上代码,会导致以下错误。
ReferenceError: Error #1056: 无法为 com.stockquote.StockQuote 创建属性 company。
分享到:
相关推荐
### Flex中ActionScript...通过以上介绍,我们可以看到在Flex中使用ActionScript动态调用RemoteObject类的方法及其应用场景。这种方法不仅可以简化客户端与服务器端的交互逻辑,还能提高应用程序的灵活性和可维护性。
在Flex和Java的远程调用中,RemoteObject扮演了中间人的角色,它使得Flex客户端可以像调用本地对象一样调用Java服务器上的方法。 要实现Flex与Java的RemoteObject通信,首先需要在Flex客户端创建一个RemoteObject...
标题中的“Flex与Java交互 远程调用方式”指的是在Adobe Flex应用程序中与Java后端进行通信的技术。Flex是一种基于ActionScript的开源框架,用于构建富互联网应用程序(RIA),而Java是后端开发的常用语言。两者之间...
在Flex开发中,与后端服务进行数据交互是常见的需求,`RemoteObject` 是Adobe Flex框架提供的一种组件,用于在Flex客户端与服务器之间实现远程调用(RPC, Remote Procedure Call)。`RemoteObject` 可以方便地将Flex...
eclipse3.7 + flash builder 4.5插件 + tomcat6.X调试通过,一个flex remoteobject简单例子(BlazeDS)。实际导入后指定flex server--java settings--blazeds.war的路径
RemoteObject是Flex提供的一种服务,它使得客户端与服务器端之间的通信变得简单,尤其是对于需要调用远程服务或业务对象的情况。 在Flex中,RemoteObject组件是实现AMF(Action Message Format)协议的关键。AMF是...
Flex远程过程调用(RPC)部署涉及多个关键步骤和技术,主要目标是使Flex客户端能够与服务器端的Java代码进行通信。以下是对Flex RPC部署过程的详细说明: 1. **项目结构**: 首先,确保项目是按照Flex的要求组织的...
在本例子中,我们将探讨如何使用Flex与Java后端进行远程调用,借助Adobe的BlazeDS服务。BlazeDS是Flex与Java服务器之间通信的一个中间件,支持AMF(Action Message Format)协议,提供数据推送、拉取和消息代理等...
标题中的“flex远程对象调用”指的是Flex应用程序与服务器端应用进行通信的一种技术。Flex作为客户端的富互联网应用(RIA)框架,可以使用Remote Object(RO)服务来调用服务器上的业务逻辑,实现数据的交互。远程...
Flex Builder或IntelliJ IDEA等IDE提供了内置的调试工具,可以帮助开发者追踪和调试远程调用。 8. **错误处理**:在使用RemoteObject时,必须考虑可能出现的网络错误和服务器错误,通过添加FaultEvent监听器来捕获...
本实验旨在探讨如何实现Flex与Java之间的远程调用,以便前端Flex应用可以与后端Java服务进行通信。 首先,Flex与Java的通信通常依赖于AMF(Action Message Format)协议,这是一种高效的二进制数据交换格式,使得...
本文将深入探讨在FLEX环境中实现Model-View-Presenter(MVP)模式的应用,以及如何通过ColdFusion进行远程服务调用。MVP模式是一种设计模式,常用于用户界面的架构,旨在分离业务逻辑、用户界面和数据呈现,提高代码...
我们可以在Java服务器端创建代理服务,并在Flex客户端通过`RemoteObject`类来调用这些服务。 - **LCDS**:Adobe的商业产品,扩展了BlazeDS的功能,包括高级数据推送、事务管理、安全性和性能优化。 4. **Flex中的...
标题中的“flex的远程对象调用”指的是在Adobe Flex应用程序中使用Remote Object(RO)服务进行远程通信的技术。Flex是一个开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA)。通过RO服务,Flex应用...
在Flex开发中,为了实现客户端(Flex应用)与服务器端(通常是Java应用)的数据交互,开发者经常使用`RemoteObject`组件。本篇文章将深入探讨如何使用`RemoteObject`与Java进行JSON格式的数据交换,以便更好地理解和...
总之,Flex的RemoteObject是实现客户端与服务器交互的重要工具,它简化了数据传输和远程服务调用的过程,是开发RIA不可或缺的一部分。熟悉并掌握RemoteObject的使用,将有助于提升你在Flex开发中的效率和能力。
RemoteObject是Flex与远程服务进行通信的桥梁,它使用AMF(Action Message Format)协议,这是一种高效的数据交换格式,可以快速地传输复杂的数据结构。在Flex3中,你可以配置RemoteObject来连接到特定的服务端点,...
在Flex项目中,我们可以使用RemoteObject或WebService组件来调用Java服务,而这些调用会被转换成AMF消息发送到BlazeDS。 5. 文件结构: - `flexDemo`:包含了Flex项目的源代码,包括MXML和ActionScript文件。MXML...
RemoteObject是Adobe Flex框架中的一个特性,允许在客户端(如Flash Player)和服务器端之间进行透明的RPC(远程过程调用)通信。 在Flex应用中,RemoteObject是客户端与服务器交互的关键组件,它提供了与服务器...