构建Flex数据服务程序
当我们使用Flex数据服务来开发程序,我们利用加强的数据服务体系结构。这个话题包含Flex数据服务的一个概览。
关于Flex数据服务
我们通过添加Flex数据服务构建基于FlexSDK的功能的程序。Flex数据服务包含企业信息支持,以及一个加强的数据服务体系。这些特性可以使得我们创建与部署充分利用Flex所提供的丰富的表现层的企业类程序。
Flex数据服务在我们的Java程序服务器上或是Java容器上执行,在下列特性上提供功能:
加强的数据服务
多个客户端的数据共享
客户到客户的数据通信支持
自动的服务器数据增加
客户访问服务器资源的认证
数据服务日志
加强的远程过程调用(RPC)功能
关于Flex数据管理服务
Flex数据管理服务是一个Flex数据服务特性,可以让我们创建使用发布的数据进行工作的程序。这个特性可以让我们构建提供数据同步,数据复制以及偶而连接程序服务器等功能的程序。另外,我们可以管理数据的大量连接以及嵌入的数据关系,例如一对一和一对多的关系,并且使用数据适配器来与数据源进行集成。
数据管理服务,消息服务以及Flex数据服务的RPC服务都是基于底层的消息部件的,如下图所示:
消息部件可以让一个Flex程序与消息目的地进行连接,向其发送消息,以及从其他的消息客户接收消息。这些消息客户端可以是Flex程序或是者是其他类型的客户端,例如Java消息服务(JMS)客户端。JMS客户端可以发布以及向同一个Flex程序消息目的地进行订阅。这意味着Flex程序可以在Java客户端程序之间进行消息交互。
消息部件使用一个服务器端消息服务和一个在Flex客户端程序的相应消息API。Flex客户端程序通过一个服务器上的端点集合来发送消息,消息服务然后将这些消息发送到一个主题。消息服务然后将这些消息广播回端点,然后发送到订阅这个主题的客户端程序。
Flex数据服务同时提供作为Flex消息服务的消息部件,这样我们就可以充分利用他来创建自己的程序。
关于Flex消息服务
Flex消息服务是建立在已建立的消息标准和术语上的。Flex消息服务提供了一个客户端API以及一个相应的服务器端消息服务用来创建Flex消息程序。消息服务同时也可以参与Java消息服务(JMS)。
消息系统通过在消息服务中传递称之为消息的数据包返回与前进,使得单个的程序平等的异步的进行交流。一个消息通常由一个消息头与一个消息体组成。消息头包含标识与路由信息。消息体包含程序数据。
发送消息的程序称之为生产者,而接收消息的程序称之为消费者。在大多数的有意义的系统中,生产者与消费者并不需要了解彼此的任何任何东西。生产者发送消息到指定的消息目的地,而消息服务器将这些消息转发到合适的消息消费者。
消息通道将生产者与消费者连接到消息目的地。要在一个特定的通道上发送消息,程序连接到与消息通道相关的消息端点上。消息端点是负责将消息数据编码为消息的代码,并且将消息解码为消费者可以用的格式。在一些消息系统中,一个端点可以将解码的消息发送到一个消息中介,然后消息中介将这些消息转发到合适的目的地。
消息适配器是扮演Flex消息服务与其他的消息系统之间管道的代码。例如,Java消息服务(JMS)适配器是可以让Flex程序向JMS主题与队列订阅的消息适配器。Java程序可以将消息发送到Flex,而Java代码可以响应Flex程序发送的消息。
下面的例子演示了由消息生产者发送到消息消费者的数据流。数据编码为消息,并且通过通道发送到目的地。这个消息然后通过通道发送到消息消费者并且解码为消费者可用的数据。
发布-订阅消息
Flex支持发布-订阅消息,也就是所谓的基于主题的消息。在Flex消息服务中,主题是与消息服务目的同义的。在发布-订阅消息中,每一个消息可以有多个消费者。当我们希望多于一个的消费者来接收同一个消息时我们可以使用这种类型的消息。使用发布-订阅消息的程序例子如拍卖站点,股票报价服务,以及其他的需要将一个消息发磅到多个订阅者的程序。
生产者向消息服务器上指定的主题发布消息,而消费向这个主题订阅来接收消息。消费者只可以消费那些向他所订阅的主题发布的消息。
下面的例子演示了一个简单的发布-订阅消息流:
在程序中使用Flex数据服务
Flex提供了MXML以及ActionScript API可以让我们在我们的程序中使用Flex数据服务。我们可以创建扮演生产者,消费或是者同时是二者的程序。Flex数据服务程序通过在Flex服务器上声明的通道发送消息到同时在Flex服务器上声明的目的地。
Flex数据服务使用XML配置文件来管理服务器上的消息主题也队列。作为消息配置的一部分,我们可以设定消息的最大尺寸。如果消息超过了这个最大值,就会使用多个消息分支,在客户端将这些单个的消息重新进行组合。这就允许了跨网络的异步的消息调度。
关于RPC服务
Flex数据服务包含配置RPC服务的远程服务以及代理服务。这些特性基于Flex 2 SDK中可用的RPC服务。
使用仅在Flex 2 SDK中可用的RPC服务组件
我们可以使用Flex 2 SDK而不需要Flex数据服务来创建程序,这个程序可以直接调用HTTP服务或是网络服务而不需通过服务器端的代理服务。我们不可以在没有Flex数据服务的情况下使用远程对象组件。在默认情况下,Flash播放器不允许从与程序不在同一个服务器的域获取数据。所以RPC服务或者是与程序服务器在同一个域,或者是远程服务器定义了crossdomain.xml文件。
一个crossdomain.xml文件是一个XML文件,这个文件提供了一种方法来标识他的数据或是文档对于特定域或是所有域的SWF文件可用。crossdomain.xml文件必须位于Flex程序服务器的根。
配合Flex数据服务使用RPC服务组件
当我们要提供企业级功能时我们可以使用Flex数据服务,例如从不同域的服务阻塞代理,客户认证,允可的RPC服务URL判优,服务器逻辑,本地化支持,以及RPC服务的集中管理。Flex数据服务同时允许我们使用远程对象组件来访问远程Java对象,而不需要将他们配置为SOAP适应网络服务。
当我们使用Flex数据服务时,并不是直接访问服务器,RPC服务组件访问目的地。目的地是可管理的服务端点,可以让我们通过基于XML的服务器端来进行管理。
关于开发环境
我们将Flex数据服务的服务器端代码以及程序文件存储在J2EE适应程序服务器或是Servlet容器的标准网络程序的目录结构中。MXML的部署模型与JSP相似。我们在我们的文本编辑器中创建MXML文件,然后将其放置在由网络浏览器可以直接访问的网络程序目录中。例如,我们可以将MXML文件放在网络程序的根目录或是子目录中,而不是保留的WEB-INF目录中。
标准的Flex网络程序的目录结构如下表所示:
web_app 包含WEB-INF目录以及由用户浏览器可以访问的所有文件,例如MXML文件,JSP,HTML页面,CSS,图像以及Javascript文件。我们将这些文件直接放在网络程序的根目录或是不使用保留的WEB-INF的子目录中。
/WEB-INF 包含标准的网络程序的部署描述(web.xml)。
/WEB-INF/flex 包含Flex配置文件
/WEB-INF/flex/user_class 包含自定义的ActionScript类和MXML组件
/WEB-INF/lib 包含在JAR文件中的Flex服务器代码
/WEB-INF/flex/frameworks 包含SWC组件文件,例如包含Flex程序框架文件framework.swc和rpc.swc