Flex远程调用机制RemoteObject应用技巧
转自:http://zerozone.javaeye.com/blog/60846
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 代码
- 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远程调用机制RemoteObject应用技巧的更多相关文章
- 8.9.网络编程_Socket 远程调用机制
1.网络编程 1.1.网络编程概述: 通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络.在操作系统.网络管理软件及网络 通信协议的管理和协调下,可以 ...
- Hadoop远程调用机制
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- 远程调用历史及代码编写demo
历史介绍部分: 远程调用大致经过了corba.webservice.二进制跟restful四个阶段 corba时代,corba(Common Object Request Broker Archite ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- .Net组件程序设计之远程调用(一)
.Net组件程序设计之远程调用(一) 1应用程序域 我们知道我们写的C#代码是在操作系统逻辑体系结构中最上层的,然而操作系统本身是不会认识C#代码的,它只认识机器代码.那我们写的程序经过编译后是编译成 ...
- Spring远程调用技术<3>-Spring的HTTP Invoker
前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙. 另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制. Spring提供的http invke ...
- Spring远程调用技术<1>-RMI
在java中,我们有多种可以使用的远程调用技术 1.远程方法调用(remote method invocation, RMI) 适用场景:不考虑网络限制时(例如防火墙),访问/发布基于java的服务 ...
- Hessian怎样实现远程调用
1.Spring中除了提供HTTP调用器方式的远程调用,还对第三方的远程调用实现提供了支持,其中提供了对Hessian的支持. Hessian是由Caocho公司发布的一个轻量级的二进制协议远程调用实 ...
随机推荐
- 第六篇:GPU 并行优化的几种典型策略
前言 如何对现有的程序进行并行优化,是 GPU 并行编程技术最为关注的实际问题.本文将提供几种优化的思路,为程序并行优化指明道路方向. 优化前准备 首先,要明确优化的目标 - 是要将程序提速 2 倍? ...
- 安卓教程:提取APK程序里图片资源的方法
有些APK程序里的图标.图片很漂亮,在使用程序时你可能会想,如果能把这些漂亮的图标.图片提取出来就好了,其实这是可以办到的,请看教程. 本教程以“电影超人”的APK安装包为例,其它APK程序的提取方法 ...
- Swift 高级运算符
本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&catalog=0&sort=time&p=2 除了基本操作符中所讲的运算符 ...
- IOS strong和weak的区别
strong和weak的区别 strong表示保留它指向的堆上的内存区域不再指向这块区域了. 也就是说我强力指向了一个区域,我们不再指向它的条件只有我们指向nil或者我自己也不在内存上,没有人stro ...
- poj_3977 折半枚举
题目大意 给定N(N<=35)个数字,每个数字都<= 2^15. 其中一个或多个数字加和可以得到s,求出s的绝对值的最小值,并给出当s取绝对值最小值时,需要加和的数字的个数. 题目分析 需 ...
- Docker源码分析(五):Docker Server的创建
1.Docker Server简介 Docker架构中,Docker Server是Docker Daemon的重要组成部分.Docker Server最主要的功能是:接受用户通过Docker Cli ...
- java反序列化漏洞的检测
1.首先下载常用的工具ysoserial 这边提供下载地址:https://jitpack.io/com/github/frohoff/ysoserial/master-v0.0.5-gb617b7b ...
- 【黑金ZYNQ7000系列原创视频教程】03.体验FPGA里的ARM——裸机helloworld实验
黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36637&extra=page%3D1 爱奇艺地址: http: ...
- iconfont阿里爸爸做的开源图库
iconfont 三种使用姿势 1.unicode格式 优点 兼容性最好,支持ie6+ 支持按字体的方式去动态调整图标大小,颜色等等 缺点 不支持多色图标 在不同的设备浏览器字体的渲染会略有差别,在不 ...
- WCF(一) 创建第一个WCF
定义服务契约-创建宿主程序-创建客户端程序访问服务 namespace HelloService { /// <summary> /// 服务契约 /// </summary> ...