Flex + LCDS + Java 入门教程

Flex + LCDS + Java 入门教程

准备发一份doc文档,然后慢慢的把内容贴上来,但是太多了,人懒,就弄个截图吧,唉,图片也太大了,只有将就下载下来再看了……

本教程通过图文介绍和对一些关键性的地方进行解释,让大家了解如何新建Flex的LCDS工程,并利用工具快速整合和部署J2EE项目和LCDS项目,掌握了简单的请求RemoteObject和配置的方法,初步掌握LCDS的应用之一。


 附件: 您所在的用户组无法下载或查看附件


附件有一些小小的更新,增加了一些说明,如果照着做没什么问题可以不用管了。哪个好心,告诉我怎么把长篇大论加图片的东西简单的发到帖子上来……

注:有些网友使用flex.war文件的是fds的,需要说明的是,Flexbuilder3的发布是以LCDS为基础的,因此如果用fds会出现编译错误。不过仍然可以参考这个教程整合自己的java和flex项目。区分lcds还是fds很简单,lcds的flex.war文件有21M,fds的有10M.如果想使用lcds请到adobe官方下载

由于FlexBuilder3 正式版已出,不再提供beta的旧连接,需要注意的是,该教程是以FlexBuilder3 plugin(插件版)作为基础的。

=================更新lcds与spring框架整合说明================
原帖:http://www.riachina.com/showtopic.aspx?topicid=8723&page=3#41843
想知道这个原理先要从事务概念说起了

我们将一组有业务逻辑,原子性不可分离的操作集合称为事务,因此事务的要素就是有一个开始和结束,如果没有成功的到达结束点,那么中间做的所有操作将会被认为是一个无效的操作(取消或者回滚)。

在业务逻辑中,我们常常会定义某些service做一些局部性操作,在业务层再将他们组合起来定义成某一个事务方法,成为一个有业务逻辑的操作,如果不采用事务控制,那么势必一个事务方法的开头和结尾必须写上,startTransaction和commitTransaction这样的语句。这样也未尝不可,但是如果一个庞大的项目,对于开发人员来说,有时候没必要让其充分了解业务上的事务操作,甚至在有些情况下,他根本不能掌握一些和事务类似需要被控制的状态,典型的比如持久层的访问状态。

这些重复的、有规律的、无需人为或业务类来控制的、甚至是人难以掌握的,可以交给系统框架来处理。

事务管理就是利用了aop,当你注册某一个类交由事务管理器去管理时(拦截器),他会在调用你注入的方法之前切入一个start标记,在调用完成后切入一个end标记,之间的方法他可以try起来,这样当成功执行到end时,就会执行事务提交。

同样的道理,这种aop还可以应用于任何框架设计上,比如对于操作记录的log,权限的控制、dto、数据序列化转换、通讯控制等等上去,即在你注册的切入点就执行你定义的操作(拦截器)。

这就是spring的ioc。

刚是说的aop设计上的原理,底层是如何实现的每种aop应用都有不同,就拿spring来说,他是针对class文件字节码来操作的,实际上,你写的代码在注入之后,spring就会根据你注入的信息,去找对应的类的字节码文件,并进行修改,重新生成新的class文件。

这样来说就有点类似hack行为,但是由于这个技术很成熟,且很早被人所接受,这种hack行为也被证实为是一种非常独到的程序设计。

原理说清楚后,再来理解你使用jotm就不难了,当你定义了事务工厂类之后,就可以通过spring是委派了一个事务管理器,在你的代码中这个事务管理器就是org.objectweb.jotm.UserTransactionFactory,spring会将该类管理事务的方法切入进你注入的类,去执行hack操作,将你注入的类的方法前打上start和end标记方法,当执行被注入方法成功时,最终执行该事务管理器中的事务提交方法。

因此你的问题,你问是谁调用了他,实际就是你自己注入的类调用了他,只不过,你这个类被黑了(当然是你配置的)。

那么再看你遇到的问题,根源在于,spring和fms都是采用了aop拦截机制的,fms的aop应用于我刚才说到的“远程调用和数据序列化转换”。

1.远程调用:通过一个messagebreak监听所有的请求,当remoteobject请求某个java远程方法时,messagebreak就会去直接执行java里的remoteobject
2.数据序列化:他将你方法返回的java数据对象,转换成amf协议里的二进制数据并return出来,最终输出。

再来说spring,刚刚说到,你委派了一个事务工厂去管理事务,但是,哪些bean需要被注入呢?空头司令可是没什么价值的。

实际上,springframework将这一系列的“增值服务”封装进自己的bean里去了,也就是为什么,在spring容器里需要getbean来获得一个实例,而不要自己去new,这样,就能跟这个对象去增加很多“增值服务”。在你替spring指派了transactionmanager后,还需要让spring给他可以管理的对象,这样才能让你的类享受增值服务。

然而,你现在整合两套独立的aop框架,fms的aop可以不用理会spring的aop,独自切入,这样就导致,spring虽然给你的class打上了start或者end的标记,但是这个bean并没有从spring容器中产生,而是由fms的messagebroker去new出来的,导致不能享受“增值服务”,说白了,TrasnactionManager必须被spring调用,比如他给这个manager设置了某些参数。
而fms得到的bean不是由spring容器里的,自然就无法享受“增值服务”了。

问题找到了,但是如何解决呢?

在remote-config.xml配置里,映射一个java对象是这么写的

<destination id="userService">
  <properties>
    <source>com.test.service.userService</source>
  </properties>
</destination>


如果这样,userService就会直接被ro访问,从而脱离spring容器。如果你要对某个java类实现自己定义的切入,你可以使用工厂配置,即我需要在ro访问前,从spring里去getbean
那么就可以这么改一下

<destination id="userService">
  <properties>
    <factory>springFactory</factory>
    <source>com.test.service.userService</source>
  </properties>
</destination>


这个springFactory是在service-config.xml里配置的,

<factories>
  <factory id="springFactory" class="com.test.factory.SpringFactory" />
</factories>


这样,就定义了一个SpringFactory类去执行在userService切入之前的操作,即,我们要实现从从spring容器中去取得bean。
该factory需要实现FlexFactory接口。实现createFactoryInstance方法和lookup方法

public FactoryInstance createFactoryInstance(String id, ConfigMap properties){
        SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);
        instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));
        return instance;
    }
public Object lookup(FactoryInstance inst)  {
        SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
        return factoryInstance.lookup();
    }


createFactoryInstance方法中用到了一个SpringFactoryInstance ,他是继承自FactoryInstance的

class SpringFactoryInstance extends FactoryInstance
    {
        SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties)
        {
            super(factory, id, properties);
        }
        public Object lookup()
        {
            //这就是从spring容器中getbean了
            ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
            String beanName = getSource();

            try
            {
                return appContext.getBean(beanName);
            }
            catch (NoSuchBeanDefinitionException nexc)
            {
                ServiceException e = new ServiceException();
                throw e;
            }
            catch (BeansException bexc)
            {
                ServiceException e = new ServiceException();
                throw e;
            }
        }
       
    }


这样,访问ro时,就会通过工厂模式去从spring容器中getBean了

//相关完整的一个spring整合可以从google code的svn里下载http://flex-java.googlecode.com/svn/trunk/
最后编辑cimmicola 最后编辑于 2008-03-19 20:27:26
Protoss拥有高度的文明、先进的科技和强大的精神力量。但是由于长达千年的寿命,种群数量稀少,消耗不过繁殖能力出众的Zerg,险些被Zerg给灭族。
 

回复:Flex + LCDS + Java 入门教程

下载了
谢谢楼主
 

回复:Flex + LCDS + Java 入门教程

研究研究
 

回复:Flex + LCDS + Java 入门教程

感谢分享..正想找入问的例子呢..希望再多发一些..哈哈...
 

回复:Flex + LCDS + Java 入门教程

目前就需要cimmicola 这样能够耐心并且详细的讲解某件事情的牛人

希望flex界这样的牛人越来越多,我们的环境才会越来越好

别的都不说,先赞一下cimmicola :D
 

回复:Flex + LCDS + Java 入门教程

正需要这份资料,谢谢版主!
 

回复:Flex + LCDS + Java 入门教程

斑竹辛苦了
 

回复:Flex + LCDS + Java 入门教程

誓死同意wlzly的说法,佩服cimmicola...    m(_ _)m
 

回复: Flex + LCDS + Java 入门教程

为什么那么多人都用my eclipse..
嗯。。。大家都是交钱了的吗?。。还是用破解的keygen?
 

回复:Flex + LCDS + Java 入门教程

keygen 这是中国一大特色 ;P
搜一下网上有的,也不是很难找的东西
如果是个人的话,多数都是破解,也有公司是买了lisence的。
 

回复:Flex + LCDS + Java 入门教程

已经下载,正在欣赏中,万分感谢了。;P ;P
 

回复:Flex + LCDS + Java 入门教程

感谢cimmicola  我正想用RemoteObject请求后台java类  在新的项目和新的架构也会用到的技术  支持!!!
最后编辑longne 最后编辑于 2007-11-23 10:54:34
 

回复:Flex + LCDS + Java 入门教程

谢谢楼主
 

回复:Flex + LCDS + Java 入门教程

谢谢
 

回复:Flex + LCDS + Java 入门教程

希望有flex + java
 

回复: Flex + LCDS + Java 入门教程

写得非常好,谢谢楼主,有个问题就是你每发布一个基于LCDS的web app. 的话就得把那个20多MB的flex.war一起打包进去吗?能不能实现多个我们自己的web app.来共用一个已经部署好的flex.war提供的服务呢,包括RemoteObject方式的服务?
 

回复: Flex + LCDS + Java 入门教程



引用:
原帖由 xwy5201314 于 2007-11-28 9:18:00 发表
写得非常好,谢谢楼主,有个问题就是你每发布一个基于LCDS的web app. 的话就得把那个20多MB的flex.war一起打包进去吗?能不能实现多个我们自己的web app.来共用一个已经部署好的flex.war提供的服务呢,包括RemoteObj......


那样就比较麻烦了,你要把你的java类编译之后的class文件放入到公共的flex运行环境里,这样是不便于管理的。
Protoss拥有高度的文明、先进的科技和强大的精神力量。但是由于长达千年的寿命,种群数量稀少,消耗不过繁殖能力出众的Zerg,险些被Zerg给灭族。
 

回复:Flex + LCDS + Java 入门教程

下再來看看了
真是感謝
 

回复:Flex + LCDS + Java 入门教程

多谢分享!
 

回复:Flex + LCDS + Java 入门教程

教程太好了,正是我要的。
 
1  /  4  页   1234 跳转

版权所有 riachina.com   Sitemap

Powered by Discuz!NT 2.1.202    Copyright © 2001-2008 Comsenz Inc.
Processed in 0 second(s) (Cached).
返顶部