场景一:熟悉的音乐响起
“噔~噔噔 噔 噔 噔 噔,噔~噔噔 噔 噔 噔 噔”
龟田小队长带领鬼子来到马家河子李家村,把村民们召集到打谷场。龟田喊话了
“八路軍の行方を言い出すのでさえすれば、皇軍がとても大きくて賞があります”。
好,Remoting 的意向建立了,鬼子想知道八路的下落,而村民中汉奸恰巧能提供这个服务(Service),一对供应关系产生。需方:鬼子(前台 Flex),供方:汉奸(后台)。
场景二:村民议论纷纷
“这孙子说什么呢?”
好,Remoting 关系虽然建立,但是由于语言不通(Flex 为 AS3 语言,后台为 Java 等语言),无法使双赢交易进行,汉奸急啊。
场景三:就在这时,肩负中日两国人民友谊桥梁之重任的翻译官出场
“太君说了,只要你们说出八路的下落,皇军大大滴有赏。” “太君,我说,八路就在王二麻子家养伤,我给您带路。”
翻译官在龟田耳边一番耳语,龟田脸上露出了狡黠的笑容。
“にで、りょしんだだでほうや”(你滴,良心大大滴好呀)。
好,至此一次调用结束,这时我要是问“BlazeDS 在 Remoting 里是干嘛的呀”有悟性的朋友肯定会回答我“翻译官啊”。
学习目标
这一节我们采用一个用户登录的示例来演示通过Remoting与服务端通信。以下是完成后的截图,经过后台验证给出登陆信息。 (图九十)

准备工作
希望你对Java有一定了解,会写简单的Servlet。
BlazeDS 4 下载地址:下载 Java 开发工具:Eclipse 3.4 Servlet 容器:Tomcat 6.0
实现步骤
接下去我们就一步步的来实现这一应用。
Server 端:
1、使用 Eclipse 3.4 建立一个 Dynamic Web Project。
2、将下载好的“blazeds-bin-4.x.x.xxxxx.zip”文件解压,得到以下两个文件。 (图九十一)

接下来我们再对其中名为“blazeds.war”的文件进行再次解压,得到以下目录结构。

3、将上图中flex,lib两个文件夹以及web.xml三样东西复制到我们的 Web Project 的 WEB-INF 下并覆盖同名文件,得到以下的工程结构。 (图九十三)

图九十一
需要的blazeds文件
4、打开 web.xml 文件。将其中被注释掉的代码解禁。注意,还要将 useAppserverSecurity 的 value 由 true 改为 false。(图九十四)
修改前

修改后

5、为了体现 BlazeDS 的优势——即 AS3 对象和 Java 对象之间的自由映射转换,我们在这里定一个 Java Bean “User”用以维护用户名和密码等信息。
package cn.airia.fb4.vo;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
6、撰写核心代码 UserService.java,这个类会成为前台所调用的 RemoteClass,在这个类里我们使用 Hard Code 的方式实现用户登陆的验证。
package cn.airia.fb4.service;
import cn.airia.fb4.vo.User;
public class UserService {
public String login(User user)
{
if(user.getUsername().equals("momoko") && user.getPassword().endsWith("123"))
{
return "Welcome "+user.getUsername();
}
else
{
return "Login failed";
}
}
}
7、打开 WEB-INF/flex/remoting-config.xml,在<server>...</server>标签中加入如下配置信息。用 source 来标记之前我们定义的类 UserService,来表示这个类被开放出来以供前台调用,同时我们也要为其设置一个 id 以标示这个类。
<destination id="userService">
<properties>
<source>cn.airia.fb4.service.UserService</source>
</properties>
</destination>
以下是完整的remoting-config.xml (图九十五)

8、将项目添加到 Tomcat 中并启动,至此 Sever 端的操作全部完成,等待 Client 端调用。 (图九十六)

Client 端:
1、新建一个 Flex Project,注意急性子的同学手不要太快,Remoting 访问方式和 Httpservice 以及 webservice 有所区别需额外设置后方能“下一步”,我们在“应用服务器类型”一栏中选择“J2EE”和“BlazeDS”后点击“下一步”。 (图九十七)

在弹出窗体中进行设置
- 根文件夹:定义为Server端程序的发布路径
- 根URL:定义为 Server 端程序的URL访问路径
- 上下文根目录:定义为 BlazeDSServer
- 输出文件夹:系统会自动生成
点击“验证配置 ”按钮,若无错误提示,即可进入下一步后直接按“完成”。

图九十五
remoting-config.xml
2、在“数据/服务”视图,我们来配置之前后台发布的 RemoteClass,点击“链接数据/服务”link。 (图九十九)
在弹出窗体中选择 BlazeDS 后下一步。 (图一百)
有可能会询问你RDS的密码,我们可以选择不需要密码直接跳过这步,在接下来的弹出窗体中可以看到后台发布的 RemoteClass,简单设置下Service Name以及 Package Name 后,点击“完成”按钮。 (图一百零一)
3、在 RemotingDemo.mxml 的 Design 视图中绘制界面,这里使用了两个 TextInput,一个 Button 和一个 Label 控件,这里分别为两个 TextInput 控件定义标示“textInputUsername”和“textInputPassword”。 (图一百零二)
4、在Design视图中选中 Button,在属性面板里点击铅笔按钮 ,选择“生成服务器调用”。 (图一百零三)
在弹出窗口中选择服务和操作后,点击“确定”按钮。 (图一百零四)
此时视图切换到 RemotingDemo.mxml 的 Source 视图。并自动生成了“login”按钮的点击处理事件代码段,我们对这段代码进行编辑,将“arg0”替换为一个 User 对象。
修改后的代码如下,我们可以看到这里的 User 类,是由系统参照 Server 端的定义自动为生成的。
protected function button_clickHandler(event:MouseEvent):void
{
var user:User = new User();
user.username = textInputUsername.text;
user.password = textInputPassword.text;
loginResult.token = userService.login(user);
}
5、切换到的 Design 视图,选择 Label 控件,在右侧的属性面板中,点击 按钮将其与返回结果绑定,点击“确定”按钮。(图一百零六)
6、编码结束(其实我们基本没有手动编写代码噢 :) ),运行我们的程序看看效果吧。 (图一百零八)
总结:
BlazeDS 真的非常方便,建议会 J2EE 的同学从它开始上手。缺点嘛,BlazeDS 的 license 是基于 GNU GPL 协议,该协议大致意思就是,如果你在你的项目中使用了 BlazeDS,而你的项目又是以产品的形式销售给客户,那么你就必须把你的项目全部开源。如果你的客户是比较正规的国外公司,而你又不想开源,那么请慎用 BlazeDS 吧。
思考:
BlazeDS 可以与 Spring Bean 进行整合,有兴趣的同学可以回家试试。 BlazeDS 提供了 Message 服务,想全面了解 BlazeDS 的同学不妨用它的 Message 服务来实现一个简单聊天室。









