【转】 Flex远程调用机制RemoteObject应用技巧
2010年11月16日
本文主要讨论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对象的映射,确实不是件令人愉快的事情。
遇到的几个问题: 出错原因可能是flex编译器未制定service参数。 解决方法:在Flex Builder或安装FlexBuilder2插件的Eclipse环境中设置编译器参数,选中Flex项目右键,选中properties,再选择Flex Complier,在附加参数中增加相应参数及值。例如下面两个,黑体是修改前,红体字是修改后。
-locale en_US 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 原 因是RO对应的Java代码中可能出现调用不存在的方法。例如某个RO对应Java类Ticker在其函数中GetQuote中new一个 StockQuote实例StockQuote x = new StockQuote(param1,param2),但StockQuote类只有一个空参数的构造函数,因此NoSuchMethodError错误 被传递到Flex调用RO的客户端。为什么会出现Ticker引用不存在的StockQuote构造函数,原因是没有及时同步代码。比如, StockQuote代码修改了,删除了带参数的构造函数,而依赖此类的Ticker没有及时修正。 这是一个奇怪的问题,所有同步Java对象类的ActionScript类,即通过metadata关键字RemoteClass指定的类。对应Java类的属性名称不能以大写字母开头。 package com.stockquote;
publicclass StockQuote {
public StockQuote(){}
public String getCompany(){
return Company;
}
publicvoid setCompany(String company){
this.Company = company;
}
publicdouble getPrice(){
return price;
}
publicvoid setPrice(double price){
this.price = price;
}
private String Company;
privatedouble price;
}
在ActionScrpit中,Company和price必须以小写开头,否则会出错,即无法在Flex调用端反序列该字段。 package com.stockquote{
[Bindable]
[RemoteClass(alias="com.stockquote.StockQuote")]
publicclass 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。
发表评论
-
新课标人教版必修五第二单元阅读理解专项训练
2012-01-20 11:41 747新课标人教版必修五第二单元阅读理解专项训练 2011年11月 ... -
2012-1-17
2012-01-20 11:41 5952012-1-17 2012年01月17日 十二星座男生 ... -
小学十一册英语期末测试题(答案)(终于给同学们打完答案了,颈椎已经酸麻。请同学们一定要先认真答题后再对照答案改正。这样才能保证期末考出好成绩!)
2012-01-20 11:41 699小学十一册英语期末测试题(答案)(终于给同学们打完答案了,颈椎 ... -
JS学习---ECMAScript对象
2012-01-19 16:31 601JS学习---ECMAScript对象 2010年11月25 ... -
AS3.0 中root和parent的用法
2012-01-19 16:31 754AS3.0 中root和parent的用法 2011年01月 ... -
javascript中的面向对象编程(一)-乾蓝洛-博客园
2012-01-19 16:31 624javascript中的面向对象编程(一)-乾蓝洛-博客园 ... -
Flex 4中DropDownList的奇怪问题
2012-01-19 16:31 619Flex 4中DropDownList的奇怪问题 2011年 ... -
关于malloc函数后free内存空间的疑问
2012-01-17 06:16 756关于malloc函数后free内存空间的疑问 2011年11 ... -
c库函数和系统调用的区别(很模糊)
2012-01-17 06:16 587c库函数和系统调用的区 ... -
系统调用、POSIX、C库、系统命令和内核函数
2012-01-17 06:16 525系统调用、POSIX、C库、 ... -
怎样评价学生的习作
2012-01-17 06:16 584怎样评价学生的习作 20 ... -
如何培养小学生写日记的兴趣
2012-01-17 06:16 701如何培养小学生写日记 ... -
神马五一第一天
2012-01-16 04:56 571神马五一第一天 2011年04月30日 神马五一第一天, ... -
神马都是浮云
2012-01-16 04:56 518神马都是浮云 14小时前 看透了好多,也经历的 ... -
在金钱面前一切都是浮云
2012-01-16 04:56 537在金钱面前一切都是浮云 2012年01月12日 神马世界 ... -
? ,浮云。
2012-01-16 04:56 553? ,浮云。 2012年01月11日 ... -
消逝的战场之神马将军
2012-01-16 04:56 564消逝的战场之神马将军 2012年01月14日 还记得小时 ...
相关推荐
flex中actionscript动态调用remoteobject类,很简单的一个例子,后面可以扩充,动态调用java的方法,可在java方法中放个switch,返回不同的结果集
两个项目,flex + java + RemoteObject,实现一个简单的RemoteObject通信案例
eclipse3.7 + flash builder 4.5插件 + tomcat6.X调试通过,一个flex remoteobject简单例子(BlazeDS)。实际导入后指定flex server--java settings--blazeds.war的路径
FLEX使用RemoteObject方式和后台童心
介绍flex使用RemoteObject技术
flex4 中,用remoteobject 实现多文件上传的例子,有进度展示
Flex 和RemoteObject通讯方式 图文解释!
flex使用 RemoteObject 与java进行json格式的数据交互
一个用Flex调用JAVA方法的例子ffffffff
使用封装后的RemoteObject和java通信,以blazeds做为第三方软件,上传的是一个Demo实例
Flex通过RemoteObject调用java实例:flex传入参数以及接收java返回结果。 通过mysql数据库的分页来展现flex调用java的实例。工程一共有两个:一个是java web端的,一个是flex工程。详情参考对应博客。
Spring和Flex整合时用的SpringFactory,SpringFactory实例化Spring bean文件,供表现层Flex远程调用(RemoteObject),我做Spring+Hibernate+Flex做J2EE开发时用到的。下载就可以直接用了,省得手工写。希望对大家有...
本实例介绍如何使用flex 访问 remoteObject,里面除了实例之外还对项目的配置过程进行了详细的介绍,只要按照步骤去配置你就可以配置好的。
为了能在 Flex 中实现远程调用,我们需要定义一个 RemoteObject 对象。可以通过 ActionScript 编码创建该对象,也可以直接在 MXML 中定义一个 RemoteObject 对象,并列出其所有的方法: 清单 13. 定义 ...
flex中RemoteObject与java的通信,其中有详细的步骤和代码,照着做能实现功能,对初学者很有用
flex3(remoteobject+datagrid+.....)+java+oracle源代码
为了能在 Flex 中实现远程调用,我们需要定义一个 RemoteObject 对象。可以通过 ActionScript 编码创建该对象,也可以直接在 MXML 中定义一个 RemoteObject 对象,并列出其所有的方法: 清单 13. 定义 ...
8.2 为什么使用Flex来打印 267 8.3 使用PrintJob打印 267 8.4 深入了解PrintJob 268 8.5 实战PrintJob—实现一个票据打印组件 270 8.5.1 组件结构 270 8.5.2 IReceiptPrinter和 DefaultReceiptPrinter 271 ...
NULL 博文链接:https://longyi-java.iteye.com/blog/986183
这个小例子是使用Java作为服务端、Flex做前台,对一个xml文件的读取和写入。 环境:MyEclipse6.0.1+Flex3插件版,jdk1.6,tomcat6.0,dom4j1.6.1,lcds.war, 使用技术:1.Java+flex,及其对象的转换。 2.Java方面...