Archive

Posts Tagged ‘flex3’

使用RSL减少swf体积进阶篇

November 17th, 2009 momoko8443 No comments

国庆刚过,手头上没什么事,看看论坛,打打酱油,闲着也是闲着随便写点项目开发中小心得吧

市面上RSL文章很多,基础的我就不写了(一般都是把framework_3.x.x.xxxx.swz文件剥离出去),这里写几则平时不常见的RSL使用小技巧

技巧一:
datavisualization_3.x.x.xxxx.swz 还有rpc_3.x.x.xxxx.swz这两个文件也是可以剥离出去的

技巧二:
有些同学把datavisualization和rpc剥离出去后,发现除了runtimes exception,说什么tween effect有问题,这个时候就需要在Flex build path面板中进行加载顺序的设置了,把framework提升到最上面。

pic
技巧三:
如果你将你的项目发布到Portal环境下,相对路径的URL都会进行转发,也就是说所有使用相对路径加载外部资源的都会失效,那么你就需要把你的swz文件放在一台http server上进行远程加载

pic2

Read more…

Categories: development Tags: ,

Flash Player (9,0,124,0) 版本升级后安全沙箱解决方案(http)

June 22nd, 2009 momoko8443 No comments

概述:由于2008年4月Adobe对Flash Player 进行了版本升级(version 9,0,124,0),这一升级对于安全沙箱有较为重大的影响,以前一些配置crossdomain.xml的方式在新的player中变为不可用。因此很多开发人员都遇到了新的问题,由于项目需要,我对http访问外部资源的过沙箱操作进行了一些研究,稍作整理与大家分享

Flash Player 9,0,124,0 以前老版本的过沙箱方法

例如:

你的swf存放位置: http://www.yourswf.com:8080/flexProjectName/test.swf

你想调用的外部资源位置: http://www.othersxml.com:8088/xmlProjectName/resource.xml

老的解决方案:

1、在 http://www.othersxml.com:8088/xmlProjectName/ ,外部资源项目上下文根目录下存放 crossdomain.xml. 这个xml文件中配置对 www.yourswf.com:8080 这一域名的许可。

2、在 test.swf 代码中加入 Security.loadPolicyFile(http://www.othersxml.com:8088/xmlProjectName/crossdomain.xml); 载入许可文件

版本升级后的改变:

即使在http://www.othersxml.com:8088/xmlProjectName/ 下存放了crossdomain.xml文件,并使用loadPolicyFile加载这个文件,也并不意味着 /xmlProjectName/ 下的所有资源对swf进行了开放。

新的策略要求,在http://www.othersxml.com:8088/ 这个服务器根路径上需要存放一份crossdomain.xml文件,这里称之为主策略文件。而如果是仅仅在 /xmlProjectName/ 下存放crossdomain.xml是没有什么作用的

新的解决方案1:

http://www.othersxml.com:8088/ 下添加crossdomain.xml

格式如下

<cross-domain-policy>
<site-control permitted-cross-domain-policies=”all” />
<allow-access-from domain=”www.yourswf.com” to-ports=”8080″ secure=”true” />
<allow-http-request-headers-from headers=”*” domain=”*” />
</cross-domain-policy>

然后在Swf代码中加载这个文件Security.loadPolicyFile(http://www.othersxml.com:8088/crossdomain.xml);

新的解决方案2:

对于因为某些原因无法在服务器根目录下存放crossdomain.xml文件,例如 swf需要访问http://www.othersxml.com:8088/xmlProjectName/ 下的资源,而你作为一个项目开发维护人员仅仅拥有对于 /xmlProjectName/ 下资源的操作权限,而没有对整个服务器资源配置的权限,因此你无法往http://www.othersxml.com:8088/下存放主策略文件crossdomain.xml。这种情况是经常发生的,对于租赁服务器空间来说这是很常见的现象,因此adobe给了另外一套解决方案。

后台开发人员需要在http://www.othersxml.com:8088/xmlProjectName/ 下建立一个servlet,这里我们访问的url取名为 /getPolicyFile.do

在这个servlet中我们需要实现代码级别的策略(crossdomain属于文件基本的策略)

关键代码如下

File file = new File(“D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\othersxml\\crossdomain.xml”);

BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file));

byte[] buffer = new byte[4096];

response.addHeader(“Content-Type”, “text/xml; charset=UTF-8″);
response.addHeader(“X-Permitted-Cross-Domain-Policies”, “all”);

OutputStream os = response.getOutputStream();

int length = 0;
while ((length = bis.read(buffer)) != -1)

{
os.write(buffer, 0, length);
os.close();
}
bis.close();

通过代码的形式将policy file 打印出来,并加上http header X-Permitted-Cross-Domain-Policies = all

在swf代码段则使用 Security.loadPolicyFile(http://www.othersxml.com:8088/xmlProjectName/getPolicyFile.do);的形式来进行加载即可突破新的沙箱限制

参考文档:

http://www.riachina.com/showtopic-12813.aspx cimmicola 版主的回帖给予了很大帮助

http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html adobe官方的介绍,很详细

momvc 0.1 beta版终于完成了

June 22nd, 2009 momoko8443 No comments

最近利用闲暇时间写了一套flex轻量级mvc框架,我将其命名为momvc。

什么是momvc:
momvc是一套轻量级的flex mvc framework。
momvc的特点:
1、momvc借鉴(可以说是”抄袭”)了j2ee mvc框架”struts1″的架构设计思路,将业务control(struts中称为action,尽量配置在xml文件中),使ui和业务逻辑层完全解耦
2、因为”抄袭”了struts1的设计思路,可以说momvc是struts1的as3版本,因此对于广大j2ee出身的flexers来说大大降低了学习成本,一名熟悉struts1的flexer上手momvc可能只需要半个小时。
3、消息机制一直是flexers选择框架的关注重点,momvc没有使用puremvc中类似于sendNotification的统一消息机制。momvc将消息分成3类,第一类为ui上的用户事件,momvc没有对用户事件进行过多的侵入,在mediator中写addEventListener+callback函数还是开发人员的主要手段。第二类是业务事件,事件由函数驱动framework进行派发,开发人员可以将事件写在xml配置文件中,类似于struts-config.xml中的forward参数,各个mediator通过一个业务事件监听总线来处理业务事件。第三类是业务层(control or action)调用服务层(service)的事件,这里借鉴了公司目前使用的一套名为peony框架的思路,将异步操作同步化,另外加上对于webservice,httpservice,remoteObject等RPC访问方式的封装,已经彻底对开发人员屏蔽消息机制,开发人员可以像调用函数一样进行后台的访问。

目前我使用momvc开发了一个简易留言板作为Best Practice,当然里面没有牵涉到复杂的操作,对于性能方面没有做更多的验证,另外文档方面我最近没有时间去写,因此决定0.1 beta version不对外发布,我会和同事一起对框架进行讨论对其进行完善,争取能在实际项目中检验它。

如果您对momvc有兴趣或者对开发flex mvc框架有兴趣都可以和我联系,共同讨论。

webservice类bug解决方案

June 22nd, 2009 momoko8443 2 comments

上一篇文章《Flex SDK 3.2中WebService的bug–loadWSDL()方法重复加载schema导致死机》中提出了Webservice这个类存在严重bug。项目已经进行了一半,不可能因为flex端的bug而对数据结构和接口重新进行设计。唯有从flex解决了,于是我写了一个简单的MyWebservice类来替代sdk自带的Webservice

大致思路如下

1、使用httpService加载wsdl文件,获取endpoint以及interface namespace

2、根据operation和参数对象 ,加上第1步获取的interface ,拼装成xml格式的 soap message body

类似于


  
    
      
        First Line Manager
        Second Line Manager
        Senior Manager
        Finance
        VM HR
        Purchase Initiator
        Project Manager
        Procurement
        IT Coordinator
        Director
        Service Verifier
        VRM System
        Vendor
        System Admin
      
      
        Closed
      
      BBB/China/IBM

        0
        15
        1
      
    
  

当然,从VBean 到 xml的转换可以写成一个Util类

3、使用AsynRequest发送这个soap message
4、回调函数接收到返回数据后,取其soap body部分,重新生成一个ResultEvent,扔给调用者。

这是一种比较底层的调用方式,因为我对soap不熟悉,这个简单实现功能做的十分单一,也可能会存在某些隐患。日后随着项目的进行,我会逐渐完善它,并最终取代官方的Webservice类。如需要源码,可以留下你的mail

谈谈Flex(ActionScript3)中的深度拷贝

June 22nd, 2009 momoko8443 No comments

今天正好有个群友提出了这个问题,于是稍微研究了一下。API和Baidu一番得出了以下结论

public class AddressVBean
{
    public var country:String;
    public var city:String;
    public var address:String;
}
import mx.collections.ArrayCollection;
public class UserVBean
{
    public var name:String;
    public var sex:String;
    [ArrayElementType("com.ibm.vo.AddressVBean")]
    public var addresses:ArrayCollection;
}

以上定义了一个复杂数据类型,以供测试
接下去是深拷贝方法

Read more…

谈谈flex项目开发中的mock设计

June 22nd, 2009 momoko8443 No comments

flex 项目开发中前台的层次划分多为view,controllor和service。

其中service连接后台使用的技术以httpservice为多,webservice次之,因为出于license的原因最为方便的remoteobject技术在正规开发团队中反而是用得最少的。

对于开发模式来说,多为前后台2个team同步开发。在实际开发中,往往因为2个team的进度不一致而导致某一方产生pending,使开发效率低下。一般来说,后台正式发布调用接口前,前台开发人员都会先自己mock一部分数据,以测试自己的components是否正确。

本文接下去要讨论的就是如何设计mock框架才是合理有效的

我们先来看看ui开发者对于mock的需求(仅仅针对于httpservice和webservice为交互方式)

1、mock数据应便于修改,mock数据源在ui开发人员可控范围内

2、不想为了mock而写大量额外的调用mock数据的代码

3、可以自由地在真实数据与mock数据之间切换

为了满足以上要求,我对service层的mock进行了如下设计

1、使用xml文件作为mock数据的数据源且存放在flex项目相应目录下以便于随时修改

2、对于后台webservice和httpservice以及xml mock文件的调用,进行统一封装,这里称为service delegate

3、使用factory模式,便于开发人员自由切换数据源,即切换各个delegate的具体实现

webservice,httpservice反序列化工作其实都是基于xml的(后台语言->as3)。对于xml mock文件来说,可以完全模拟后台的返回结果。另外抽象一层delegate来说也是十分方便的事情,webservice,httpservice,xml的调用过程无外乎是一个url+method name+parameters+callbackFunction,它们的返回结果都是 resultEvent.result一个标准的xml。定义若干个类和接口就能对后台访问方式进行封装,最后使用factory使开发人员可以方便的切换与 webservice、httpservice,mockservice这3者之间。

以上是我对于mock设计的一些思路,如有需要我会在以后的文章中补上具体实现代码以供参考。

Categories: framework Tags: ,

浅谈flex中使用webservice技术进行文件上传

June 22nd, 2009 momoko8443 No comments

一般来说flex中实现文件上传都是URLRequest方式,即后台大多使用Servlet或者php之类,网上这类的列子数不胜数。由于项目需要,今天少许研究了一下后台为webservice的实现方式。
先撇开flex客户端不说,先说说webservice中文件上传的实现。
如果定义一个方法为fileUpload(),传统servlet一般都是将Httprequest中所包含的file对象作为参数传入这个fileUpload。然后服务端使用stream将它写入本地文件。而对于webservice来说它不是http协议,因此取不到httprequest中传递过来file,webservice是通过二进制数组byte[]来实现文件传输的,即客户端讲本地文件转成一个二进制数组后作为参数传递给webservice所提供的服务(即函数),故服务应定义为fileUpload(byte[] fileBytes)。
Read more…

利用flexunit进行单元测试二(异步测试)

June 22nd, 2009 momoko8443 No comments

flex和后台打交道几乎都是异步方式的,我最近就在team里面负责service层(一些mvc框架里称作proxy层)的编码工作,撇开传统的Alert,Trace等调试方式,决定引入正规的单元测试flexunit,但是对于异步操作来说,单元测试并非十分简单,网上找了些英文资料,实践后整理一份教材供大家参考

关于flexunit的一些基础知识可以参考我的上一篇文章”利用flexunit进行单元测试一(同步测试)“。

首先看一下我们的service类,这里为了便于演示代码使用HttpService方式

首先建一个xml作为访问资源


    192.168.1.100

随后建立一个方法使用httpService来访问这个xml资源

Read more…

Categories: development Tags: , ,

利用flexunit进行单元测试一(同步测试)

June 22nd, 2009 momoko8443 No comments

先扯两句:

单元测试的重要性我就不扯了,现在都是分模块开发,如何保证你交给队友的模块是正确的,无bug的,对于项目整体开发效率提升来说尤为重要。

PS之前搞过junit或者testng的java程序员应该很容易上手这篇教程,只需侧重于异步测试部分的讲解即可

准备工作

下载flexunit类包,下载地址http://download.macromedia.com/pub/opensource/flexunit/flexunit0_9.zip

flexunit的”官方”站点位于

http://opensource.adobe.com/wiki/display/flexunit/FlexUnit ,你可以看到更为详细的英文development document

将下载的类包添加到项目中(*.swc)

Read more…

Categories: development Tags: , ,

red5学习2—参数传递

June 22nd, 2009 momoko8443 No comments

先扯2句,上一篇说了red5开发的环境搭建。接下来大家关心的就是server和client之间的通讯了,通讯必然牵涉到参数的传递,由于c/s使用的是两种语言所以对象类型的转换可能成为了广大开发者最想知道的问题。

Read more…

Categories: red5 Tags: , , ,