Flex + LCDS + Java 入门教程

一.引
很多人在帖子和群中问到过一些关于建立 Flex+LCDS(FDS)工程的问题,由于操作上的东西,很
难简单说清楚,于是写了一个简单的教程(本来很早就答应过的,结果被 newfish 逮住做东西,加上公
司的事,一直抽不出时间哈,现在想换换头脑,偷乐一下懒哈,各位别跟 newfish 大大说),帮助大家
入门,其实这些东西都是在 LCDS 的 sample 中包含了的(当然,sample 只是包含源码)。
本教程通过图文介绍和对一些关键性的地方进行解释,让大家了解如何新建 Flex 的 LCDS 工程,并
利用工具快速整合和部署 J2EE 项目和 LCDS 项目,掌握了简单的请求 RemoteObject 和配置的方法,
初步掌握 LCDS 的应用之一。
二.介绍
1. Flex 是什么?
……
2.

LCDS 是什么?
LCDS ( LiveCycle Data Service )之前叫做 FDS ( Flex Data Service ),他是基于 java
(也有 ColdFusion 版的)后端的数据服务工程,功能包括映射 Java 对象到 Flex 对象(包括调
用 Java 类的方法)、RTMP(Real Time Message Protocol)、代理、服务端生成 PDF 等等功
能,详细请参考 LCDS 里的说明。官方有下载,需要注册会员(免费)。
LCDS 实际是付费的,但是免费也能使用,似乎是少了多 CPU 的支持。当然还有一些其他的数据
服务,比如 AMFPHP 之类的。
当然,LCDS 提供的功能我们都能自己实现,并非 Flex 脱离了 LCDS 就不能和后台打交道了,
除了 RemoteObject 还有 WebSerivce、HTTPService 等等。只是说,LCDS 提供了更多的方
便和特性。

3.

Java 是什么?
……

三.准备
1. 下载开发环境:
Eclipse 3.3 + FlexBuilder3 beta2 插件版 +MyEclipse 6.0 +Lcds + Tomcat 5 和以上
(官方都有下载,或者 google 里搜一搜哈)
MyEclipse:做 Java 开发都应该知道 MyEclipse 是比较好的 J2EE 项目的开发及部署工具的,
我们主要用它来部署 Flex 和 Java 结合的项目。 6.0 是适合 Eclipse3.3 版的。他自带了一个
Tomcat 服务器
FB3:相比 FB2,他在 LCDS 工程上做了很大的改进,特别是 beta2,项目向导更加的易懂,
而且比 FB2 更好的是,Flex.war 是被打包在你的 Flex 项目中的,而不需要单独的部署了。性能
上也高出 FB2

LCDS:安装 lcds 后,起作用的是里面的 flex.war 文件,实际上,这就是一个 j2ee 的工程。在
发布到 web 应用服务器后(比如 tomcat、j4run 等)就会被解压成一个工程。当然,在 FB3 里
这个发布的过程会更加的简单。
2.

安装:

四.入门教程
1. 新建 FlexLCDS 工程
File -> new -> Flex Project …
注:以下设置绝大多数都可以在项目属性中可以修改。
1). 向导界面 1

说明:Java source folder 就是你自己 java 业务源码存放的根目录,在 FB3 里,LCDS 项目旨
在将 Java J2ee 项目和 FlexLcds 项目混合。

当然如果你不选择 combined 两个在一起,那么就麻烦些:要么你再单独新建一个 Flex 项目,
而这个项目只写 java 代码。要么再建一个 J2ee 工程写 java 代码,而这个项目只写 Flex 代码,
但最后要把 Java 编译后的 class 文件放到这个项目下的 webroot\web-inf\classes 目录中。即
不管怎样,最后发布时, java 编译后的 class 文件必须和 lcds 部署的项目在一起。(听起来绕
昏头了?那就在一个工程里吧)
2). 向导界面 2

说明:Target runtime 实际上没什么用(后来我删除了配置文件里的对应信息,也没问题),
但是不指定就不能继续,如果这里显示的是<none> 那么就新建一个 Tomcat 的 runtime,简
单的只需要指定 tomcat 的安装目录即可。
Content folder 实际上就是最终编译后的容器目录,因此, Lcds 的 flex.war 文件将会发布到
该目录 下的 web-inf 下的 flex 目录中。同时因为教程采用的是 MyEclipse,他默认的就是发布
WebRoot 里的内容,为了自动化,因此这里改为了 WebRoot(这也是 java 开发的习惯)
Flex WAR file 指的是安装了 lcds 后的 flex.war 文件的路径

Compilation options 指定了 flex 文件的编译方式,选择推荐的在 FlexBuilder 里编译吧,虽
然开发时多耗点时间,但是在发布后不会占用服务器的编译处理时间,对用户来说是有好处的。
Output folder 指 的 是 Flex 编 译 后 的 swf 和 html 等 文 件 存 放 的 路 径 , 这 里 改 为 了
WebRoot\bin
3). 向导界面 3

说明:Main source folder 是 flex 的源码存放根目录,当然和 java 源码分开了。
Output folder URL 是在开发过程中运行和调试的请求路径,这个与发布无关,不会影响任何

你在程序中使用的路径,但是能使开发方便
注意:FlexBuilder3 这里存在 bug,新建工程时,部分自定义的属性并没有保存下来,而必须
在新建后的项目属性中更改,后面有说明到
放心这些设置都可以在以后修改。
4). 新建完成的项目结构看起来是这样的

2.

用 MyEclipse 添加 Web 容器
之前说到了,MyEclipse 是很好用的 J2EE 的开发插件,其中就包含了部署功能。我们可以抛开
烦琐的手动部署,交由 MyEclipse 完成吧,当然,首先得让你的 FlexLCDS 工程变成为 J2EE
的 Web 工程。

1). 向导界面 1

注意:不要点快了,把这里的 Create web.xml 取消,这样就不会覆盖 LCDS 创建的 web.xml
文件
现在我们的工程的图标变成了 J2EE Web 工程了,这意味着,你可以用 MyEclipse 来发布它或
者添加更多容器,比如 hibernate、spring 等

3. 部署 FlexLCDS 工程
有了 MyEclipse,那么你就不用手动的部署你的项目了,可以简单的通过
点击工具栏上的这个图标

1). 部署向导 1

注意:(如果你的列表中没有服务器,那么就自己建一个)
2). 新建部署 Web 应用服务器

注意:如果是 MyEclipse6.0 ,则会自带一个 Tomcat 服务器。如果不是 6.0 ,那么点 Edit
server connectors…自己添加一个 tomcat。
点 finish 后则会开始部署。成功后会在 Deployment status 里提示 success,并且看到列表中
你的项目已经成功部署
4. 修改一下项目的访问路径
打开项目的属性,在这里,我们可以重新修改项目编译和发布的配置,包括先前向导里的设置

修改 output folder url

为什么要这么做?
这样每次发布都会自动将编译的最终 swf 文件直接发布至 WebRoot\bin 目录下,而下面的
output folder url 则会在我们启动和调试项目时,直接请求这个路径(这跟发布无关,只是我
们在开发过程中会方便些)
5. 修改 Flex Server 的项目容器属性(非常重要,多数连接路径错误就是这里配置错误)
改成如下配置

说明:
Root url 当然就是你的 web 服务器的根路径了, Tomcat 默认是 8080 端口,如果改了就自己
修改
Context root 就是 LCDS 工程的名称(注意:如果你分开为两个工程,则这里指的是你 J2ee
项目的名称,而不是你 Flex 项目的名称,因为你在请求 Java 的数据服务),在 Flex 请求
LCDS 时,会采用这个作为参数
http://{server.name}:{server.port}/{context.root}/messagebroker/amf
如果 Context root 错了,那么永远不可能正确的请求 LCDS 的服务了。
确定后,我们来运行测试一下这个 FlexLCDS 项目是否能正常访问
6. 启动服务器

稍等片刻,等到服务器完全启动后继续下面的操作
7. 运行访问

注:如果之前的 Output folder url 配置正确,那么会自动的弹出访问页面, DEBUG 时也是一
样。

OK,一切顺利,至此,你已经做到了第一步,即,将 Flex 项目、LCDS 服务成功的整合至 J2EE
web 项目,这样的好处就是今后发布省的麻烦了。
五.简单的 RemoteObject
1. 什么是 RemoteObject?
顾名思义,即远程对象。这里指的就是在 Flex 中获取 Java 里的对象。有什么用呢?这样 Flex 可
以更加简单的获取服务端的数据,比如你在 Java 中有个方法进行了数据查询,取出的结果是
Array 类型,那么你可以很容易通过 Flex 里的 RemoteObject 访问到该类,并调用该方法,最

后返回的数据是 Flex 也兼容的 Array 对象。
2.

新建 Java 类
File -> new ->other(如果你没在列表中看到 java class 的话)
1). 新建向导 1

2). 向导 2

注意:别忘记了你设定的 java 源码根目录路径,如果对 java 不熟悉的话,这里我就不解释了
照着做吧。
3). 编写如下代码
package com.test;

public class FirstJavaClass {
public String sayHello(String str){
return "你说的是:"+str;
}
}
3.

配置 Flex LCDS 的 Remoting-config.xml
1). 他是 remoteobject 和相关远程访问的配置文件,路径位于

注意:现在 LCDS 是你的项目的一部分了,因此不用来回的在服务器中修改配置然后再发布了。
2). 改写其代码如下
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter"
default="true"/>
</adapters>
<default-channels>
<channel ref="my-amf"/>
</default-channels>
<destination id="FirstJavaClassRemoteObject">
<properties>
<source>com.test.FirstJavaClass</source>
<scope>application</scope>
</properties>
</destination>

</service>

说明:一个 destination 指定的就是一个 RO 对象,他的 id 就是在 Flex 中 RO 请求的
destination,source 指的是这个 Java 类的路径
注意:在修改了配置文件后可能需要重启 web 服务器(Tomcat)
4. 编写 mxml 来请求 RO
1). 打开 MyFirstLCDS.mxml 编写代码如下
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private function callRO(str:String):void{
firstRO.sayHello(str);
firstRO.addEventListener(ResultEvent.RESULT,getROResult);
}
private function getROResult(e:ResultEvent) :void {
Alert.show(e.result.toString());
}
]]>
</mx:Script>
<mx:RemoteObject id="firstRO"
destination="FirstJavaClassRemoteObject"/>
<mx:Button click="callRO('hi~你好 ')" label="请求" />
</mx:Application>
2).OK,保存好后,用之前的方法来运行一下看看?

RemoteObject 的简单教程完

Sign up to vote on this title
UsefulNot useful