JavaFlex对象透明映射最佳实践

2012-11-12

    在我之前的两篇文章Flex3 性能提示 、Ajax轮询以及Comet模式—写在Servlet 3.0发布之前中。我反复提到Adobe BlazeDS这个开源产品,假设某天,你在看了Flex3 性能提示之后放弃了Flex+Servlet+XML方案,那么如何进行下一步?本文试图用简单的表述来实践一回Java到Flex之间的对象透明传递,所谓透明本人理解为不需要人工的(反)序列化。在阅读本文之前,你需要有一定的Spring、BlazeDS、Flex使用经验。

    我使用的是Eclipse 3.4 Java EE平台和Tomcat6.x以及SQL Server 2005,为了不脱俗,选用了Spring(传说中的春天框架)外加最近才GA的Spring BlazeDS Integration.PS:其实不用春天框架也可以,只是觉得他的JdbcDaoSupport很不错,可以自己偷懒了,而且连接池和JDBC驱动这些基础设施也all-in-one了。另外,要使用Spring BlazeDS Integration需满足它3个愿望:Java 5 or higher、Spring 2.5.6 or higher、Adobe BlazeDS 3.2 or higher(推荐下载blazeds-turnkey),我想这三个愿望在google上是很好实现的。成品的项目结构是这样的,对于如此简单的实践,无需用到Service层:

    有了上面的目标,接下来就很好办了。首先创建名为“JavaFlexMapping”的动态Web项目,接着导入“blazeds-turnkey-3.2.x.xxxx/resources/lib”下的所有jar;至于Spring相关的jar,你可以根据自己的经验导入,也可以先导入spring.jar然后导入spring-webmvc.jar(Spring BlazeDS Integration需要),最后再把“spring-framework-2.5.6/lib”下的所有jar都导入进来,这样干牺牲了磁盘空间,但换来了更少的烦恼;Spring BlazeDS Integration的org.springframework.flex-1.0.0.RELEASE.jar也导入进来吧。这就算完成了部分包导入工作,不过在实际使用中,还会需要其他jar:xalan.jar、backport-util-concurrent.jar、jtds-1.2.2.jar(SQL Server JDBC驱动),如果在之后的实际操作中出现缺包情况,Spring会在控制台说明的。最后把blazeds-turnkey-3.2.x.xxxx 下的“/tomcat/webapps/blazeds/WEB-INF/flex”文件全部拷贝到WEB-INF下的flex目录中。

    Java程序的运行环境都配置好了,看看表结构是怎样的:

    这是一个简单的表,反映了组和五个组成员的信息。

    所有必要的资源准备完毕,可以编码了,先看VO类“FlexGroup.java”的内容:

package org.rosenjiang.flex;

/**
 *  Flex Group Object
 *  
@author  rosen jiang
 *  
@since  2009/06/21
 * 
 
*/
public class FlexGroup {

    
private String groupName;
    
private String member1;
    
private String member2;
    
private String member3;
    
private String member4;
    
private String member5;
    
    
public String getGroupName() {
        
return groupName;
    }
    
public void setGroupName(String groupName) {
        
this.groupName = groupName;
    }
    
public String getMember1() {
        
return member1;
    }
    
public void setMember1(String member1) {
        
this.member1 = member1;
    }
    
public String getMember2() {
        
return member2;
    }
    
public void setMember2(String member2) {
        
this.member2 = member2;
    }
    
public String getMember3() {
        
return member3;
    }
    
public void setMember3(String member3) {
        
this.member3 = member3;
    }
    
public String getMember4() {
        
return member4;
    }
    
public void setMember4(String member4) {
        
this.member4 = member4;
    }
    
public String getMember5() {
        
return member5;
    }
    
public void setMember5(String member5) {
        
this.member5 = member5;
    }
}

    没啥好说的,就是一个表结构的对象化表述,不过有两个问题。

    1、既然牵涉到跨语言的对象传输为什么没实现序列化接口?

    为了让自己和大家了解,昨天我专门请教了据说是Sun公司还是IBM公司的名叫toad的达人,解惑曰(未找到确凿证据,仅仅是技术层面的推测):不实现序列化接口是因为BlazeDS在进行序列化的时候并未使用Java自己的机制。如果各位有更好的解释,尤其是看了BlazeDS源码的同学请过来share.

    2、BlazeDS官方文档所要求成员变量必须为public(参看http://livedocs.adobe.com/blazeds/1/blazeds_devguide/serialize_data_3.html,这些白纸黑字写着:“Private properties, constants, static properties, and read-only properties, and so on, are not serialized. ”)?

    的确,声明为private的成员变量也不会出问题,这个问题我想是因为官方文档滞后的原因,另外就算是私有成员明显可以通过反射获取其值。

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com