BlazeDS 是一个基于服务器的 Java 远程控制 (remoting) 和 Web 消息传递 (messaging) 技术,它提供了 Java 应用程序和运行在浏览器上的 Adobe Flex 应用程序相互通信的一种手段,并且是一种高效的手段。也就是说它实现了 Java 和 Flex 的无缝集成。
BlazeDS是开源的,Adobe原来有一个商业版本,这是商业版本的开源化的产品,功能比商业版本少一些,但基本满足需要。
Flex与后台服务器上的应用程序通信的手段有三个:
(1) HTTPService: 采用标准的HTTP请求,服务器返回 XML 格式的消息;
(2) WebService: 采用SOAP消息格式进行通信,也是XML格式,它是一种专门用于Web的业界标准;
(3) RemoteObject: 采用 AMF 消息格式进行通信,这是二进制的格式,因此它的效率最高。BlazeDS就是采用这个技术的。
据说 BlazeDS 还将开发适用于 .net 和 PHP 版本,不过采用相同技术(RemoteObject)的各种开源产品也已有多种了,可在 Java, .net, PHP下使用。
本文的目的是详细说明BlazeDS开发环境的安装,以及创建BlazeDSr的 Hello, world! 项目的过程。
一、相关软件
1、安装 Java JDK 5.0 以上版本;
这是必备的。
2、安装 Eclipse 3.2 以上版本;
这也是必备的。
3、安装 MyEclipse 6.0 以上版本;
它用于开发 J2EE 项目,可编写 Java 程序,编写网页等。
4、安装 Flex Builder 3 Plug-in版本(不能用独立版本);
它用于开发 Flex 前端界面。
5、安装 tomcat 6.0 以上版本;
Web服务器,也可用其它的,例如JBoss等。
6、下载 BlazeDS,有二个版本:
一是只有4M大小的版本,这是核心;
二是166M的版本,称为blazeds-turnkey,它内置了tomcat以及文档、实例和支持实例的数据库系统(HSQL),以及flex sdk。
本教程只需BlazeDS的核心,下载后备用。
二、安装过程
1、安装 Java JDK 5.0 或 6.0,注意不是JRE,只要一路 Next 就行;
安装完要作环境变量配置:
JAVA_HOME,为JDK的安装目录,如 C:\Program Files\Java\jdk1.6.0_06
CLASSPATH,值为 .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar,注意最前面的句号,不能漏了;
path,为安装目录下的 bin目录,值为 %JAVA_HOME%\bin
2、安装 Eclipse 3.2,只要解压缩到任意一个目录中;
直接运行其中的 eclipse.exe 文件即可,为提高运行速度,可为其分配更多的内存,即运行时加上下述参数:
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
方法是为 eclipse.exe 建立一个快捷方式,然后在快捷方式的属性中在eclipse.exe后加一空格,再加上上述参数
3、安装 MyEclipse 6.0 以上版本,在安装过程中需要指定 Eclipse 的位置,然后一路 Next即可;
安装后运行MyEclipse或eclipse都同样是打开MyEclipse;
4、安装 Flex Builder 3 Plug-in版本,可以安装在任意的目录中,在安装过程中同样需要指定 Eclipse 的位置,然后一路 Next 即可;
安装后需配置 eclipse:
在上述第2步中的eclipse目录下创建一个目录,名为links,如果已经存在该目录(通常是已有了),则使用原有的;
在links目录下新建一个文件,名为 flex.link(文件名任意,后缀必须是link),内容为path=Flex Builder 3 Plug-in的安装目录,例如:
path=D:\\program\\Adobe\\Flex Builder 3 Plug-in
注意目录的分隔符或者用“\\”,或者用“/”,前者为Windows风格,后者为Linix风格;
5、安装 tomcat 6.0,将文件解压缩到任意目录中。
6、BlazeDS 在创建项目时用;
三、创建Hello, workd项目:
下述步聚将创建名为web的一个集成Java的Flex项目, 需要时还可以添加 hibernate, spring能力。下面的web都是指项目名,可以改为你的项目名。
1、创建一个MyEclipse的Web Project项目;
在MyEclipse中,选择 File -> New,在弹出的菜单中选 Web Project,如果看不到该选项,则选 Others,然后再选:
MyEclipse -> Java Enterprise Projects -> Web Project
在下一步中指定项目的名称,例如web,在这一步中记得将Source folder改为另外的名字,例如javasrc或jsrc,这是为了避免与flex的源文件夹名冲突;
其它保留默认值,完成项目的创建。
2、为项目配置服务器
首先启动 tomcat 服务器:
在tomcat解压缩的目录中的bin下找到 startup.bat 文件,双击运行,这时将打开一个命令行窗口,在整个开发过程中不要关闭这个窗口,否则tomcat就停止了。
配置MyEclipse使用上述的tomcat 服务器;
将项目发布到 tomcat服务器;
上述2个小步聚不会做的,请查一下MyEclipse项目的使用的资料(配置tomcat,发布项目,启动和停止tomcat)。
配置后可以用浏览器测试项目是否能正常运行:
http://127.0.0.1:8080/web/index.jsp
3、将 BlazeDS 解压缩到项目中,步聚如下:
将下载的 BlazeDS.war 文件改后缀名为 zip,然后解压缩到任意的目录中,再将解压缩出来的二个文件夹移动或复制到前一步中创建的项目中。
注意:这两个文件夹是META-INF和WEB-INF,要把它们覆盖上一步创建的项目中的同名目录,仅是目录名相同,文件是不同的。
复制后不要忘记重新发布一下项目,否则下一步不能做。
4、为项目添加Flex Project Nature;
这一步比较重要,必须是在前述所有步聚正确完成后才能进行:
从项目右键菜单中选择 Flex Project Nature -> Add Flex Project Nature (在选择中是第二个选择);
在弹出的窗口中的Application server type 选择 J2EE;
在下一个窗口中设置好合适的参数:
(1)反选 Use default location for local LiveCycle Date Services server
(2)Root folder: 选择项目发布的目录:例如:D:\program\tomcat6\webapps\web
(3)Root URL: 在浏览器中访问项目的网址,例如:http://localhost:8080/web/
(4)Context root: 项目的上下文,一般就是项目名,例如:/web
项目必须是有BlazeDS的相关包,即上一步中复制到项目中,然后再发布到上述设置的目录中。
设置好后,还需要点击 Validation configuration,测试配置是否正确,只有正确时,才能继续进行下去。
这时会出现一个错误提示,当完成下述设置后,错误将得到改正。并且整个项目创建完成。
修改项目的Flex Compile选项:
从项目右键菜单中选择 Properties;
在打开的窗口中选择 Flex Compiler,然后在右边的 User a specific SDK中选 Flex 3.2。
项目创建成功
4、测试Flex 前端;
先测试 Flex 前端,在web.mxml文件中增加一行,添加一个Label,使整个文件内容如下:
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute">
<mx:Labelx="228"y="95"text="Hello, World!"/>
</mx:Application>
按执行按钮,这时应该弹出浏览器窗口,能看到页面的内容 Hello, World!
5、测试与Java的集成:
将项目切换到MyEclipse Java Enterprise 视图
在javasrc中按需要创建包,然后创建一个类:
publicclass Hello {
publicString sayHello(){
return"Hello, world!";
}
publicString sayHello(String s){
return"Hello, "+s+"!";
}
}
将项目视图切换到 Flex Development 视图:
打开 WebRoot/WEB-INF/flex/remoting-config.xml文件,将其修改成:
<serviceid="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definitionid="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter"
default="true"/>
</adapters>
<default-channels>
<channelref="my-amf"/>
</default-channels>
<!-- 新增的是下面六行,其它没有改变 -->
<destinationid="helloWorld">
<properties>
<!-- 这里要写完整路径:包名 + 类名 -->
<source>org.ngweb.flex.Hello</source>
</properties>
</destination>
</service>
然后在web.mxml中,添加一段代码(第4步增加的Label可以删除掉),使其成为(可以直接复制使用,有关代码的含义请参见其它资料):
? XML<?xmlversion="1.0"encoding="utf-8"?><mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
private function resultHandler(event:ResultEvent):void {
Alert.show(event.result.toString(), "成功");
}
private function faultHandler(event:FaultEvent):void {
Alert.show(event.fault.toString(), "失败");
}
]]>
</mx:Script>
<!-- destination 属性值要和 remoting-config.xml 中 destination 的 id 一致-->
<mx:RemoteObjectid="remoteObject"
destination="helloWorld"
result="resultHandler(event)"
fault="faultHandler(event)"/>
<mx:Buttonlabel="发送消息"click="remoteObject.sayHello('huang')"x="256.5"y="197"/>
</mx:Application>