基于AMF的EOS与Flex整合.docx
《基于AMF的EOS与Flex整合.docx》由会员分享,可在线阅读,更多相关《基于AMF的EOS与Flex整合.docx(11页珍藏版)》请在冰豆网上搜索。
基于AMF的EOS与Flex整合
PRIMETONTECHNOLOGIES,LTD.
上海普元信息技术有限责任公司
基于AMF的EOS与Flex整合
Nopartofthisdocumentmaybereproduced,storedinanyelectronicretrievalsystem,ortransmittedinanyformorbyanymeans,mechanical,photocopying,recording,otherwise,withoutthewrittenpermissionofthecopyrightowner.
COPYRIGHT2006byPrimetonTechnologies,Ltd.ALLRIGHTSRESERVED.
文档修订记录
序号
版本号
修订日期
修订概述
修订人
审批人
备注
1
0.1
2009-12-11
创建
彭远林
规范及约定
1.【规范及约定】的内容仅仅是对本文档编写的规范和约定进行描述,文档编写人员必须严格按照本规范和约定进行编写,在文档正式发布时删除该部分内容;
2.文档内容采用“首行缩进、小四号字体、1.5倍行距”的格式,选中段落文本使用快捷键【Ctrl+Alt+4】可以进行格式化(直接选中蓝色的说明文字即可);
3.必须填写“文档修订控制记录”;
4.文档目录必须更新为最新的,与实际内容相对应;
5.模版中每部分内容的下面的蓝色字体是对这块内容的说明,编写文档时选中这段文字,使用【Ctrl+Alt+4】快捷键即可格式化成要求的字体;
目录
1文档摘要5
1.1文档分类5
1.2关键字/Tag5
1.3摘要5
1.4作者、协作者及评审人员5
1.5定义、首字母缩写词及缩略语5
2简介6
2.1场景描述6
2.2适用环境7
3经验总结7
3.1软件安装7
3.2部署EOS补丁7
3.3服务器端开发8
3.3.1场景描述:
8
3.3.2逻辑流参数说明:
9
3.4Flex开发9
3.4.1Flex环境设置9
3.4.2编写用户信息ActionScript类11
3.4.3编写mxml用户界面11
3.5测试程序11
1文档摘要
1.1文档分类
EOS设计开发->经验技巧总结
1.2关键字/Tag
EOS6、Flex、AMF协议、整合、接入
1.3摘要
自从Flex3发布以来,越来越多的企业采用Flex作为RIA解决方案,提高用户体验。
EOS对采用JSON整合其他RIA产品的方案天生就支持,但在Flex领域采用JSON作为数据交换策略并不多见,原因是有开发者认为Flex+HttpService+JSON+JEE的方式有性能问题,尽管这种方案中一般的应用中没有任何问题。
有关Flex+HttpService+JSON+EOS的整合方案可参考欧阳希撰写的《基于JSON实现FLEX与EOS整合方案》一文。
本文将协助大家完成“Flex+HttpService+AMF+EOS”的方式搭建“EOS+Flex”的开发环境,搭建完成后,采用Flex作为UI开发平台,用EOS逻辑流处理后台逻辑,Flex与EOS间采用Adobe推荐的AMF协议。
1.4作者、协作者及评审人员
作者:
彭远林
1.5定义、首字母缩写词及缩略语
EOS:
EOS是全球领先SOA应用平台厂商Primeton公司开发的应用基础平台。
EOS基于J2EE、Eclipse等开放的技术和平台,采用了先进的SOA架构和标准规范,并通过构件化、图形化、一体化的平台产品为客户提供了完整的覆盖SOA应用全生命周期的支撑,从设计、开发、调试和部署,到运行、维护、管控和治理。
AMF协议:
AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash播放器与FlashRemoting网关通信提供了一种轻量级的、高效能的通信方式。
2简介
2.1场景描述
为了处理复杂数据类型,采用一种独有的方式使Flash与应用服务器间可以来回传送数据势在必行。
于是AMF应运而生。
AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash播放器与FlashRemoting网关通信提供了一种轻量级的、高效能的通信方式。
如下图所示:
AMF最大的特色在于可直接将Flash内置对象,例如Object,Array,Date,XML,传回服务器端,并且在服务器端自动进行解析成适当的对象,这就减轻了开发人员繁复工作,同时也更省了开发时间。
由于AMF采用二进制编码,这种方式可以高度压缩数据,因此非常适合用来传递大量的资料。
数据量越大,FlashRemoting的传输效能就越高,远远超过WebService。
至于XML,LoadVars和loadVariables(),它们使用纯文本的传输方式,效能就更不能与FlashRemoting相提并论了。
EOS6对Flex的支持本身并不完善,尽管EOS6产品已经提供了Flex调用逻辑流的接口,但在FlexObject与SDO之间的相互转换转换还需要部署相应的补丁包,才能完全支持Flex调用EOS逻辑流进行后台逻辑处理。
由于由于逻辑流支持多输出参数,所以Flex调用EOS逻辑流的方法的返回值类型实际上是个数组。
2.2适用环境
EOS6(#3276)+FlexBuilder3
3经验总结
3.1软件安装
这里需要安装的软件无非就是EOS6(#3276)开发版和FlexBuilder3。
EOS6(#3276)开发版的安装没什么好说的,无非需要注意的就是两点:
第一是安装包不能解压到有空格或中文的目录下面,第二是EOS的安装路径不能带空格或中文。
FlexBuilder3基于Eclipse开发,因此安装方式有两种,一种是FlexBuilder3安装包本身就包括Eclipse,还有一种是安装包不包括Eclipse而仅有插件。
对于不包括Eclipse的情况,需要先下载Eclipse3.2、Eclipse3.3、Eclipse3.4并解压,Eclipse的这些版本是Adobe官方推荐的版本。
这里假设EOS安装在D:
\eosdev\3276\目录,并且EOS应用名为eos-default。
3.2部署EOS补丁
1、将压缩包中的lib目录下的所有jar文件copy到,D:
\eosdev\3276\apache-tomcat-5.5.20\webapps\eos-default\WEB-INF\lib\目录下。
2、将压缩包中的flex目录copy到D:
\eosdev\3276\apache-tomcat-5.5.20\webapps\eos-default\WEB-INF\目录。
3、将TestVo.class文件添加到eos-access-client.jar文件的com\eos\access\client目录。
4、
flex.messaging.HttpFlexSession
MessageBrokerServlet
MessageBrokerServlet
flex.messaging.MessageBrokerServlet
services.configuration.file
/WEB-INF/flex/services-config.xml
1
MessageBrokerServlet
/messagebroker/*
修改D:
\eosdev\3276\apache-tomcat-5.5.20\webapps\eos-default\WEB-INF\web.xml文件内容,将以下内容添加到适当位置:
压缩包中的web.xml是一个实际的例子。
5、修改D:
\eosdev\3276\apache-tomcat-5.5.20\webapps\eos-default\WEB-INF\flex\services-config.xml文件,将其中涉及“127.0.0.1:
8080/eos-default”更改为实际的值。
3.3服务器端开发
3.3.1场景描述:
为了验证相关配置是否成功,模拟经典“HelloWorld”例子,开发一个功能:
由Flex发送一个姓名到EOS,然后EOS在接收到的姓名前加上一个“Hello,”串,然后将结果返回给Flex,Flex用Alert控件显示接受到值新字符串。
3.3.2逻辑流参数说明:
输入参数param1:
接收Flex用户界面输入的姓名。
输出参数out1:
返回处理后的姓名。
具体逻辑很简单,就是利用逻辑流的“赋值”图元,将变量param1加上字符串后赋值给out1变量即可。
3.4Flex开发
3.4.1Flex环境设置
1、设置编译输出路径:
在项目上右击,选择“属性”菜单,如下图:
2、设置编译参数:
在项目上右击,选择“Properties”菜单,如下图:
3.4.2编写用户信息ActionScript类
这里的用户信息主要用于向EOS逻辑流传递MUO中的用户信息,代码如下:
packagecom.eos.flex.model
{
publicclassUserInfo
{
publicfunctionUserInfo()
{
}
publicvaruserId:
int=1;
publicvaruserName:
String="userName";
}
}
3.4.3编写mxml用户界面
代码如下:
xmlversion="1.0"encoding="utf-8"?
>
Applicationxmlns:
mx="verticalAlign="middle"horizontalAlign="center">
Script>
[CDATA[
importmx.collections.ArrayCollection;
importmx.rpc.events.ResultEvent;
importmx.controls.Alert;
privatefunctiongetVo(e:
ResultEvent):
void{
//显示业务处理结果
Alert.show(e.result.data[0]);
}
privatefunctiontestObjects():
void{
vartempString:
String=inputStr.text;
varmyArray:
Array=newArray();
myArray.push(tempString);
varuser:
Object=newObject();
user.userId=6;
varsession:
Object=newObject();
user.userName="xxxx";
session.userObject=user;
//与id="javaVo"的RemoteObject/>对象对应,调用EOS逻辑流
javaVo.invoke(session,
"com.primeton.eos.service.FlexDemo.testComplex.biz",
myArray);
//添加事件监听函数,获得服务器返回后调用getVo函数
javaVo.addEventListener(ResultEvent.RESULT,getVo);
}
]]>
Script>
RemoteObjectid="javaVo"destination="flexObject"/>
Paneltitle="测试应用">
TextInputid="inputStr"/>
Buttonclick="testObjects()"label="请求"/>
Panel>
Application>
重要代码是调用EOS逻辑流代码
javaVo.invoke(session,"com.primeton.eos.entityLogic.testComplex.biz",myArray);
参数说明如下:
session:
传递逻辑流需要的MUO对象,是ActionScript的com.eos.flex.model.UserInfo类的实例。
"com.primeton.eos.service.FlexDemo.testComplex.biz":
常量,对应的EOS逻辑流。
myArray:
ActionScript数组对象,业务参数数组。
3.5测试程序
在浏览器输入http:
//127.0.0.1:
8080/eos-default/test/XXX.swf,出现以下界面:
点击请求,出现一下界面:
注意:
浏览器输入的地址需要与services-config.xml文件中的URL一致,否则会出现“Flash安全沙箱……”的异常。