Java 平台的 Flash remoting

Java 平台的 Flash remoting

Flying
2013-07-06 / 0 评论 / 122 阅读 / 正在检测是否收录...

本文简单讲解怎样使用 Flash Remoting 实现 Flash 与 Java 通信。通过本例的学习,我们将了解使用 Flash 与 Java 开发 Flash RIAs 的基本流程。

ColdFusion 搭建 Flash Remoting 开发环境很简单,再次略过?

JRun 下配置支持 Flash Remoting 的 Web 应用

支持 Flash Remoting 的 J2EE 服务器配置相对繁杂,其中以 JRun 为正统, 它已内置了 Flash Remoting 网关。如果我们选择其它的 J2EE 服务器,则必要另外安装 Flash Remoting 网关。

安装 J2EE 服务器需要有 JAVA 运行环境(JRE),请下载 Java Runtime Environment (JRE) 5.0 Update10,为方便我们开发测试,最好下载安装 JDK 5.0 Update 10。

安装完毕后,需要配置一下 JDK 的环境变量,在我的 电脑 > 属性高级 > 环境变量 > 系统变量 中添加以下环境变量 (变量间用分号隔开):

JAVA_HOME= D:\jdk5Path=%JAVA_HOME%\bin;
%JAVA_HOME%\lib\dt.jar;
%JAVA_HOME%\lib\tools.jar

安装

下载 JRun 试用版及 JRun Update 6 升级包并安装。安装过程很简单,采用默认方式就行了。

运行范例

选择 JRun 控制台(JMC),进入管理页面。JRun 是以创建实例服务器来部署 Web 应用的。完安装后会三个服务器实例,默认服务端口是 8100, 端口为 8000 的实例对应控制台,另个一个则是 JRun 范例,如下图所示。

jrun_welcome.gif

运行 8200 端口,将链接指向http://localhost:8200,单击 Flash Remoting 进入范例页面,您就可以测试 JRun 版的 Flash Romoting 了。

配置 Web 应用

我们可以在已有的实例服务器上配置 Web 应用。但为了解整个配置过程,笔者建议新手最好新建一个实例服务器,然后在这个服务器上配置 Web 应用 。由于 JRun 默认下是以 EAR 方式架构 Flash Remoting 网关的,当我们想实现一些特殊功能(比如在 Java 中使用 ASObject 对象)时就会出错。因此我们最好删除 JRun 内置的 Flash Remoting 网关,新建基于 Web 应用架构的 Flash Remoting 网关。具体步骤如下:

  1. 点击 Create New Server 链接,输入实例服务器名和服务器路径。如下图所示。

jrun_instance.gif

  1. 点击 Create Serve 服务器将建立自动新建一个端口,如下图。如果您没有安装其它的实例服务 器,该端口会默认为 8101。当然如果不满意,我们可以单击Update Port Numbers 按钮或直接输入数字修改。点击 Finish 按钮完成配 置。

jrun_setport.gif

  1. 运行 tutorials 实例服务器,进入到其组件管理页面,点击 Flash Remoting EAR 左边的 Delete 按钮反部署该企业应用。如下图所示。

jrun_delete.gif

  1. tutorials 下新建一个标准的 Web 应用。文件路径结构如下图。

jrun_app_tructure.gif

其中 web.xml 的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
  <display-name>Flash Services Application</display-name>
</web-app

这样我们就为 tutorials 实例服务器创建了 Web 应用 flashservices。默认下,JRun 服务器会自动将 Web 应用根目录夹名设置成该应用的 Context Path(上下文路径)。如下图所示。

设置上下文路径

  1. 我们再来看看怎样使用 JRun 的控制台修改 Web 应用的配置。点击 Edit 按钮或者 Flash Services Application 链接进入编辑页面。在 General Settings for Flash Services Application 中勾选 Enable Dynamic ReloadEnable Dynamic Compile,激活实例服务 器动态重载和动态编译的功能。Web 应用的上下文路径保持不变。单击 apply按钮使配置生效。此时 JRun 会自动新增了一个描述符文件和 两个文件夹。其中 JRun-web.xml 用来描述 JRun 网络应用部署,jsp 文件夹包含 jsp 文件,而 sessions 文件夹则包含关闭服务器后保留的 session 文件。另外在 web.xml 中也自动新增了 JRun 服务器的一些描述符。
  2. 要让 J2EE 服务器支持 Flash Remoting,还得在 web-app 描述符下增加以下描述:
<?xml version="1.0"; encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
  <display-name>Flash Services Application</display-name>
</web-app>
  1. 添加 JAVA 文件包。解压 JRun 根目录 \lib\flashgateway.ear,将 flashgateway.jar 放到第四步创建的 lib 文件夹中。当然,也可以使用 Flash Remoting for J2EE 升级包中的 flashgateway.jar,不过 JRun 中的应用包版本在高一些。

J2EE 下配置支持 Flash Remoting 的 Web 应用

以 Tomcat 为例,详细介绍在 J2EE 环境(非 JRun)下怎样配置支持 Flash Remoting 的 Web 应用。

安装 Tomcat

到下载并安装 Tomcat 5.5.20

执行范例文件。

下载 Flash Remoting for J2EE 升级包。解开压缩包,将其中的 flashgateway-samples.war 复制到 Tomcat 根目录 \webapps。启动 Tomcat,链接到 http://localhost:8080/flashgateway-samples 就可以执行范例文件了。

配置 Web 应用。

如果我们想让 Tomcat 与 JRun 共用 Web 应用配置,请打开 Tomcat 根目录\conf\server.xml,将下面 xml 片段加到 Host 元素之间。

<Context path="/flashservices" docBase="D:\tutorials\flashservices\" 
debug="0" reloadable="true" crossContext="true" />

您也可以将该片段存储在单个的 xml 文件,放在 Tomcat 根目录\conf\Catalina\localhost 下。这样做的好处是我们不用重新启动 Tomcat 就能让改动 的配置生效,即实现热部署(Hot Deploy)。当 xml 文件名与上下文根的值不一致时,以 xml 文件名作为 Web 应用的名称。

  1. 在在 tutorials 下新建一个标准的 Web 应用。
  2. flashgateway.jar 放到 lib 文件夹中。
  3. 打开 web.xml,添加描述。

严格来说,lib 文件夹还应该包括一个文本文件:frconfig.txt。该文件在我们安装的 Flash Remoting for J2EE 根路径下,用来保存的序列号。试用版的序列号为空。

注意:

  • 配置 Web 应用应用最简单的方法是 Web 应用程序放在 Tomcat 根目录\webapps;
  • Tomcat 与 JRun 公用一个标准的 Web 应用时,它们的端口是不一样的;
  • Tomcat 与 JRun 不一样,它只是一个开源的轻型应用服务器,目前不支持 EJB;
  • 关于 Tomcat 的配置使用,请参阅[文档](http://tomcat.jaxwiki.org
    )

使用 Flash Remoting 实现 Flash 与 ColdFusion 通信

如果您对 Flash Remoting 不太了解,请参看前面的入门教程。假设您已经写好了客户端代码并且安装好了 ColdFusion MX 7 服务器。

在本实例中,我们将使用一个 ColdFusion 组件(CFC)来实现 HelloUser 远程服务。组件是 ColdFusion MX 的新功能,它提供面向对象的 ColdFusion 方式,因此非常适合 Flash Remoting。

ColdFusion 根目录 \tutorials\remoting 下新建 HelloWorld.cfc。然后添加如下代码:

<cfcomponent>
    <cffunction name="sayHello" returntype="string" access="remote">
      <cfargument name="userName" type="string" default="">
      <cfreturn "您好,#userName#。这是来自 ColdFusion Flash Remoting 的问候" />
    </cffunction>
</cfcomponent>

这个简单组件只包含一个 sayHello 方法,ActionScript 调用该方法传递一个字符型参数 userName 给组件,组件接收该参数并返回一个字符串给 ActionScript。请注意,不管是 Flash 还是以 Web Service 形式远程访问 ColdfFusion 组件,都必须设置组件的 access 属性为 remote。

在浏览器中打开 http://localhost:8500/tutorials/remoting/HelloWorld.cfc。输入 RDS(远程开发服务)的管理密码,成功登录后我们将看到由 ColdFusion 自动生成的 HelloUser 组件的描述,如下图:

cf_rds.gif

其中,tutorials.remoting.HelloWorld 就是远程服务 HelloWorld 组件的全限定路径,即组件虚拟路径,不包括 .cfc 后缀名。详见Flash Remoting 支持的远程服务

返回到 Flash,注释掉其它版本的网关路径所用的代码。输入用户名,单击按钮测试影片,您将收到来自 ColdFusion Flash Remoting 的问候,如下图所示:

cf_output.gif

使用 ColdFusion Flash Remoting 时,还可以使用 CFM 页面作为远程服务。它为 Flash Remoting 提供开盒即用的支持。

使用 Flash Remoting 实现 Flash 与 J2EE 通信

假设您已经写好了客户端代码,并且在 J2EE 环境下配置好了 Web 应用 flashservices。

在 J2EE 版的实例中,我们将使用一个简单的 Java 类来实现 HelloWorld 远程服务。Java 类很简单,无会话状态(stateless),也就是说每调用一次类都会新增该类的一个实例。

用文本编辑器创建一个纯文本文件,命名为 Services.java,添加如下代码:

package tutorials.remoting;
public class HelloWorld {
  public String sayHello(String userName) {
    return "您好," + userName + "。这是来自 J2EE Flash Remoting 的问候 ";
  }
}

这个简单类也只包含一个 sayHello 方法,其作用与 CF 版本范例中的一样。不难看出,Java 类的核心语法 跟 ActiRemote ObjectonScript 2(特别是 ActionScript 3)类的语法十分相似。

将文件保存在 Web 应用的根目录 classes\tutorials\remoting 中,然后在此路径下使用 JDK 编译 HelloWorld.java,生成类文件。

由于我们架构该 Web 应用时已经整合了 JRun 和 Tomcat,因此它们的服务器端代码放置路径相同,服务名称相同,都是类的完全限定类名。它们的网 关 URL 也类似,都是http:// 主机名/上下文路径 /gateway,只是端口不一样而已。具体细节请参看Flash Remoting 支持的远程服务

确认在 JRun 环境下,已经启动了实例服务器 tutorials,在 Tomcat 环境下已经启动了 Web 应用 flashservices,返回 Flash,分别用这两个版本的网关 路径进行测试,测试效果如下图。

j2ee_output.gif

注意:在 JDK 环境下,如果将 Java 代码 UTF-8 编码,那么需要在编译附加 encoding 参数,参数值为 UTF-8。

当然,J2EE Flash Remoting 也支持其它类型的 Web 服务。如 EJB、JavaBean、Servlet,JRun 环境下支持 JMX。

使用 Flash Remoting 实现 Flex 与 ColdFusion 通信

Flash Remoting Service 是 Flex 访问数据的三种方式之一,它没有 Flex Data Service 那么强大,但是比 HTTP Service 的效率高。

不管是 Flex Data Service 还是 WebORB 都需要额外收费,而 ColdFusion Flash Remoting Service 在 ColdFusion? MX 7 中内置 的,如果我们已经安装有 ColdFusion MX 7,就可以直接使用 ColdFusion Flash Remoting Service 技术了。Flex 与 ColdFusion Flash Remoting Service 的通信实质是 Flash Player 与 Flash Remoting 的通信,数据是通过 AMF 的数据传输方式方式来实现的。Flex 2 对于 AFM0 和 AMF3 都是支持的。相对于 AFM0,AMF3 是一种全新的技术,目前还没有技术规范。

另一方 面,许多开源软件也开始支持 AMF3,比如:

不过目前还是以 ColdFusion Flash Remoting 最为最为正宗。

客户端

下面我们就用 Flex Builder 来用创建本实例所用的简单 Flex 应用。请大家注意步骤的细节。

  1. 打开 Flex Builder,选择 File > New > Flex Project > ColdFusion Flash Remoting Service

cf_how.gif

  1. 浏览选择 Web 应用的根目录,输入 URL 根路径,在上下文根(路径)中填写 Web 应用的虚拟路径。

cf_location.gif

  1. 输入工程名,使用工程的默认路径。

cf_project.gif

  1. 修改工程主文件名称(如 HelloWorld),设置输出文件的路径为在上下文根(路径)的子目录。单击 Finish 完成工程的创建。如下图:

cf_path.gif

默认的输出文件夹 bin 在当前工程的根目录下,一般需要修改。使用了 Flash Remoting 技术的 Flex 工程的输出文 件目录必须是 Web 应用上下文根(路径)的子目录,而调用了 Flash Remoting 服务的 Flash 输出文件时路径可以随意。
  1. 编写客户端代码:

我们此处采用 mxml 不编写代码的,当然我们也可以用 AS3 来实现相同的功能。在这个实例中,我们用 <mx:RemoteObject> 新建了一个 remoteObject 对象,该对象使我们能访问 AMF 编码的 CF 组件 HelloWorldsayHello() 方法 。其 destination 属性为服务器端的真正服务或我们想要调用的对象,该 destination 可以在 services-config.xml 或者包含文件中设置。其 source 属性来指定 CF 组件的服务路径:tutorials.remoting.Services

接着通过按钮的 click 事件调用服务器端的服务器方法 sayHello,该方法将 txtName组件的输入值作主参数。最后将调用成功后返回的结果绑定到 label 组件来显示。

服务器端:

不管是 AMF0 还是 AMF3,服务器端的代码是一样的。请参看使用 Flash Remoting 实现 Flash 与 ColdFusion 通信中的后台代码。

运行该程序。效果如下图:

效果

小结:在本实例中,交换的数据都是字符,属于简单型数据类型,其实用 HTTP Service 应该更合适。Flash Remoting Service 的高效主要体现在处 理复杂数据上。我们会在以后的教程中陆续介绍。

BlazeDS 入门——采用 BlazeDS 的原因:

  • 方便将使用 Flex 和 Ajax 技术的 Flex 和 Adobe AIR 应用连接到已有的 Java 服务器端逻辑;
  • 为需要更敏捷响应的应用提供高效率的数据传输;
  • 透过标准的 HTTP 实现实时的服务器端数据推技术;
  • 扩展已有的消息结构,完全实现发布/订阅消息;
  • 免费开源。

目前,J2EE Flex 数据服务器有 LCDS、BlazeDSWebORB for Java,其中只有 LCDS 是不开源的,至于 openamf,恐怕没几个人用了吧?个人觉得 BlaszeDS 应该会有更好的发展空间。

BlazeDS 入门——HTTP Service

最近有不少网友问我 BlazeDS 的用法,这节省大家时间,下面我将简单谈一谈 BlazeDS 工程的创建、BlazeDS HTTP Service、Remote Object Service 和 Message Service。

其实 BlazeDS 可以看成是 LCDS 的简化版,它少了后者的 Data Management Service 高级功能,目前不支持 RTMP 协议。

下载 BlazeDS

BlazeDS 已经推出正式版,它有三个版本,其中 Turnkey 版内置了 Tomcat 和 Flex 3 SDK,还包含 blazeds.wards-console.warsamples.war,建议初学者使用;Binary Distribution 版只包括 blazeds.war,此为最简配置;而 Source 则包含 blazeds 的 Java 源代码,想做二次开发就下载这个。

新建 BlazeDS 工程

  1. 创建 Flex 工程,勾选 Use remote object access service

blazeds_project.gif

最好在 WTP 上安装 Flex 插件版,这样可以将 Flex 和 Java 整合在一个工程中。

  1. 配置 J2EE 服务器,对于 BlazeDS 来说,使用 Tomcat 就可以了。设定上下文路径和 blazeds.war 的位置,如下图。

blazeds_j2ee.gif

  1. 设置资源文件夹名、主文件名称和输出文件的路径,如下图。

blazeds_path.gif

同域访问

访问 HTTP Service 可以直接在 Flex 端直接指定一个同域名的 URL,也可以在proxy-config.xml 中设置代理。现在我们就用一个简单的 HTTP Service 来检验工程是否可以在服务器上运行,请参考 HTTPServiceDemo.mxml

使用服务器端代理

更多情况下,我们需要对 HTTP Service 跨域访问,这就会存在 Flash Player 存在安全沙箱问题。对于跨域访问 RPC 有三种解决方案:使用 Proxy Service 和 Remote Object Service 或者在目标域下部署 crossdomain.xml 策略文件。

对于服务器端代理,可以简单在服务器端定义 DefaultHTTP,打开 proxy-config.xml,如下配置。其中 * 号表示 http://127.0.0.1:8080/blazeds 下所有的 HTTP Service。由于我们已经设置了默认的终端(destination),因此在 Flex 端不需要设定终端了,但需要在 Flex 中指定 HTTPService 的绝对 URL 属性,并设定*useProxy="true"。请参看 DefaultDestination.mxml

<destination id="DefaultHTTP">
  <properties>
    <dynamic-url>http://127.0.0.1:8080/blazeds/*</dynamic-url>
  </properties>
</destination>

如上所述,服务器端代理使用默认的终端,需要指定 HTTPService 的绝对 URL 属性,不灵活不安全,我们更多时候还是要自定义终端。如下面的配置,我们在 proxy-config.xml 中设置终端的属性值为 student,然后就可以在 Flex 中设定终端为 student,然后就可以调用该终端对应的 HTTP Service 了。请参考 NamedDestination.mxml

<destination id="student">
  <properties>
    <url>http://{server.name}:{server.port}/{context.root}/data/student.xml</url>
  </properties>
</destination>

注意:

  • 使用 BlazeDS/WTP 整合向导时,BlazeDS 工程的 Content Root 始终是 /WebContent,请修改成根据 Root URL 作相应修改;
  • 运行主程序前请导出发布版本(Export Release Build)并启动服务器;
  • url 元素中,{server.name}之类的变量和 * 不能同时使用。关于 BlazeDS 的配置,我们在后面还会讲述。如果我们安装了 Turnkey 版,可以在 blazeds\resources\config 中查看更详细的配置。

点击此处下载工程文件。该工程文件也包括后面要讲述的部分。

BlazeDS 入门——Remote Object Service

对于主流的 Flex 数据服务器,目前都支持 AMF3/RemoteObject,今天我们就来谈一谈 BlazeDS 的远程服务。

  1. 编写远程服务类

编写 BlazeDS 的 Java 远程服务类有三个要求:

  • 所有被调用的方法必须是 public;
  • 所有的编译类必须能够通过 BlazeDS 的 classpath 访问得到;
  • 类必须是 stateful/stateless 的。

大家可以参考工程文件中的 `SimpleService.java。

  1. 配置 remoting-config.xml

Java 服务类写好后,还需要配置,BlazeDS 的 Remote Service 也是在服务器端对应了一个配置文件: remoting-config.xml,配置好 Remote Service 后,Flex 在运行时才能找到相应的服务类并调用其方法。下面就是本工程的 Remote Service 配置文件。

配置文件

第 2~3 行指定服务的 ID 和对应的类,第 5~7 行设置适配器(adapters)的 ID 和对应的类。第 9~11 行指定默认的通道(channels)及其参照,该通道是在 services-config.xml 中定义的。适配器和通道可以设置多个,采用第一个优先的原则。前面这几项设置适用于 proxy-config.xmlremoting-config.xml 和我们后面要讲的 messaging-config.xml

13~18 行设置的服务终端(destination),该属性必须和 RemoteObject 组件的服务终端属性一致。按照服务的种类,服务终端又可以分为代理服务终端、远程服务终端和消息服务终端。上一次讲述的代理服务终端,需要指定该终端的 url,而这次我们讲述的远程服务终端,需要指定该目标的 sourcescopesource 对应 RemoteObject 要调用的远程服务的全限定类名,不像 FluorineFX,它不能在 RemoteObject 组件中指定。scope 表示当前远程服务的作用范围,即远程服务类是 stateful 还是 stateless,有 applicationsessionrequest 三个选项。

注意:我们提倡在配置文件中设置,这样更安全也方便后期维护。
  1. 使用 RemoteObjec 组件

对于 RemoteObjec 组件,请参看Remote Object Service的相关内容。一句话,Flex 的 RemoteObject 与后台语言是无关的。在工程文件中的 BasicRemoteObject.mxml,调用了 SimpleService 类的三个方法,当通过 BlazeDS 从 J2EE 服务器返回 RemoteObjec 时,Java 数据被序列化成 ActionScript 数据。其中 Java 字符串对应 ActionScript 字符串,Java 的数组列表对应 ActionScript ArrayCollection。如果你想了解更多 Java 与 ActionScript 数据类型的转换,请参考官方文档

BlazeDS 入门——Message Service

消息服务(Message Service)提供发布(publish)/ 订阅(subscribe)机制允许 Flex 应用程序发布消息、订阅消息终端(messaging destination),从而实现实时数据的推和协作。

  1. Message Service

消息终端在 messaging-config.xml 配置,其中通道(channel)是其关键元素,它用来实现客户端和服务器端交换数据。使用 BlazeDS,消息目标通常用作 streaming 通道或者 polling 通道。

使用 streaming 通道,服务器端会一直响应 HTTP 请求直到该通道连接被关闭,它允许服务器向客户端不断传送大量的数据。因为 HTTP 连接是独一无二的,可实现数据的双向传送,每个 streaming AMF 或者 HTTP 通道事实上需要两个浏览器 HTTP 连接, 一个连接需要不断处理服务器端与通道紧密相关的客户端的响应。另外需要一个短暂连接,只有当数据需要传送到服务器时,它才脱离浏览器连接池;当短暂连接不再需要时,它立即被释放回浏览器连接池。

polling 通道可以通过简单的时间间隔或者使用服务器等待来配置,如果数据不马上可用 (长轮循)的话。另外,每次轮循响应完成请求。默认下浏览器 HTTP 1.1 的连接是持续的,浏览器轮循已有的连接,发送并发的轮循请求,以此来减轻轮循的开销。

当需要准实时通信时,streaming 通道是最好选择。
  1. IE 与 Firefox 浏览器下的不同

浏览器对每个 session 都有连接数限制。不同的浏览器,连接最大数以及对 session 的处理方式都不一样。

IE 中每个 session 的最大连接数为 2。 但如果从开始菜单或快捷方式打开多个 IE 实例,每个 IE 实例开启不同的进程并拥有各自 session。另外,如果我们通过 CTRL + N 开启对已有的 IE 实例一个新的 IE 窗口,该窗口将与创建它的 IE 实例共用一个 session 。也就是说,如果程序实例开启不同的进程,我们可以通过 HTTP streaming 建立不限量应用取得服务器端数据;如果通过 CTRL + N 开启多个窗口,每个 session 最多建立 2 个连接。

Firefox 中每个 session 最多建立 8 个连接。如果从开始菜单或快捷方式打开多个 Firefox 实例,所有实例开启使用同一进程并共用一个 session。既然浏览器对普通的 HTTP 请求通常只需要一个连接, 理论上我们可以最多可以建立 7 个 HTTP streaming 连接。

  1. messaging-config.xml

另外,如果每个 session 到达最大连接数,使用 streaming channel 连接到服务器的下一次尝试将失败:

错误:Endpoint with id 'my-streaming-amf' cannot grant streaming connection to FlexClient with id 'D640B86F-6B1D-92DF-8288-1B737A371AFE' because max-streaming-connections-per-session limit of '1' has been reached。

不过,BlazeDS 提供一种优雅的退后机制来处理这种情况:客户端始终会尝试使用通道表(messaging-config.xml 中为服务终端定义)中的第一个通道来连接。如果该连接失败, 客户端将自动退后到通道表中的下一通道。在本实例中,我们为所有的服务终端定义了如下默认的 ChannelSet

<default-channels> 
  <channel ref="my-streaming-amf"/> 
  <channel ref="my-polling-amf"/> 
</default-channels>

也就是说,客户端应用会首先尝试使用 streaming channel 连接,如果连接失败会使用 polling channel

客户端代码和使用 LCDS 差不多,比较简单,基本上都会使用 Producer 来发布聊天内容,使用 Consumer 来订阅聊天内容,从而实现实时聊天。另外本应用有简单的登入登出功能。

使用 Flash Builder 4 和 BlazeDS 创建数据为中心的应用

这篇文章拖得太久,为追求系列教程的完事,还是拿出来晒一下。这回我们将以 BlazeDS 为例,讲述怎样使用 Flash Builder 4 和 BlazeDS 远程服务创建数据为中心的应用。

  1. 了解 BlazeDS 与Remote Object Service
  2. 使用 Eclipse 建立一个 Java Project。编写好远程服务类(如附件)。
  3. 下载BlazeDS 4 二进制分发版,解压到 tomcat 的 webapps 目录下。其中 flex-rds-server.jar 是 BlazeDS 4 中的新增的一个包,是 BlazeDS RDS 服务器必须的。

打开 web.xml 文件,添加 RDSDispatchServlet 的声明和映射。这样我们就可以通过连接 BlazeDS 向导导入 BlazeDS 服务了。

<servlet>
  <servlet-name>RDSDispatchServlet</servlet-name>
  <display-name>RDSDispatchServlet</display-name>
  <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
  <init-param>
      <param-name>useAppserverSecurity</param-name>
      <param-value>false</param-value>
  </init-param>        
  <load-on-startup>10</load-on-startup>
</servlet>

<servlet-mapping id="RDS_DISPATCH_MAPPING">
  <servlet-name>RDSDispatchServlet</servlet-name>
  <url-pattern>/CFIDE/main/ide.cfm</url-pattern>
</servlet-mapping>
注意,还要将 useAppserverSecurityvaluefalse 表示不用使用 RDS 服务器身份验证时不需要输入用户名密码。
  1. 修改 remoting-config.xml,配置好远程服务目标(destination)。将 Web Project 部署到 tomcat 并启动它。
  2. 新建一个 Flex Project,在 应用服务器类型 一栏中选择 J2EEBlazeDS 后点击 下一步

新建项目

  1. 在弹出窗体中进行设置,点击 验证配置 按钮,若无错误提示,即可进入下一步后直接按 完成
  2. 创建 UI:新建 HelloWorld.mxml,在主程序中放置 nameTextInputsubmitButtonresultLabel
  3. 配置服务:在数据/服务视图,我们来配置之前后台发布的 RemoteClass,点击链接数据/服务

blazeds_select_type.gif)

在弹出窗体中选择 BlazeDS,此时如果询问你 RDS 的密码,我们可以选择不需要密码直接跳过这步。

简单设置一下服务名及包名,如下图:

blazeds_import_service.gif

  1. 其余步骤与使用Flash Builder 4 和 Zend AMF 创建数据为中心的简单应用中的 7~11 步相同。
4

评论 (0)

取消