Blazeds体系结构(二)

news/2024/5/19 20:27:24 标签: 数据结构, Flex, 应用服务器, Java, Flash

服务端FlexClientMessageClientFlexSession类的实例代表了Flex应用和服务端的连接。你可以使用这些对象管理FLEX应用程序和服务端的同步。

 

FlexClient, MessageClient, and FlexSession objects

 

FlexClient

 

每一个MXML或者ASFlex应用都被编译进SWF文件。当SWF文件和Blazeds服务通信的时候,一个flex.message.client.FlexClient对象就被创建,并在服务端代表这个SWF文件。SWF文件和FlexClient实例具有一对一的映射关系。Blazeds服务端为每个FlexClient实例生成一个唯一的标识id。在客户端也有一个单例类mx.message.FlexClient,用于存储这个唯一的FlexClient Id

 

MessageClient

 

如果某个Flex应用程序含有一个订阅组件(flex.message.Consumer),服务端就会创建一个相应的flex.messaging.MessageClient实例来代表这个订阅者的发布者。每个MessageClient都有一个唯一的clientId,可以自动由Blazeds服务端生成,也可以在调用Consumer.subscribe()方法之前指定这个Consumer.clientId属性。

 

FlexSession

 

FlexSession对象代表在Flex程序和Blazeds服务之间的连接。它的生命周期基于通道和端点使用的底层协议。如果是基于HTTP的通道,例如AMFChannel或者HTTPChannel,在Blazeds服务端就是浏览器范围。如果它连接的端点是一个基于servlet的端点,那么这个HTTP session是基于J2EE HttpSession 对象。

 

三者之间的关系

 

一个FlexObject对象可以拥有多个FlexSession实例,这取决于Flex应用使用的通道数。例如,一个程序使用了一个HTTPChannel,那么在Blazeds服务端一个FlexSession代表这个HTTP session就会被创建。

 

一个FlexSession也可以拥有一个或多个FlexClient和它关联。例如,a SWF file that uses an

HTTPChannel is opened in two tabs,BlazeDS服务端2FlexClient实例被创建(一个SWF文件一个),但是只有一个FlexSession,因为两个tab共享同一个HTTP session

 

 

每个订阅组件都会创建MessageClient。每一个MessageClient都会和一个FlexClient以及一个FlexClient关联。

 

 

关于三者的监听器

 

BlazeDS服务端提供了下列监听器,来让你根据自己的逻辑来创建、销毁、以及改变三者的状态。

 

FlexClientListener

 

FlexClientAttributeListener

 

FlexClientBindingListener

 

FlexSessionListener

 

FlexSessionAttributeListener

 

FlexSessionBindingListener

 

MessageClientListener

 

 

 

数据序列化

 

       AS对象转换为Java对象



 


 
 

 

Java对象转换为AS对象

 

 



 

 



 



 

 

 

 

// Product.as

package samples.externalizable {

 

import flash.utils.IExternalizable;

import flash.utils.IDataInput;

import flash.utils.IDataOutput;

[RemoteClass(alias="samples.externalizable.Product")]

public class Product implements IExternalizable {

 

public function Product(name:String=null) {

this.name = name;

}

 

public var id:int;

public var name:String;

public var properties:Object;

public var price:Number;

 

public function readExternal(input:IDataInput):void {

name = input.readObject() as String;

properties = input.readObject();

price = input.readFloat();

}

 

public function writeExternal(output:IDataOutput):void {

output.writeObject(name);

output.writeObject(properties);

output.writeFloat(price);

}

}

}

 

// Product.java

package samples.externalizable;

import java.io.Externalizable;

import java.io.IOException;

import java.io.ObjectInput;

import java.io.ObjectOutput;

import java.util.Map;

 

public class Product implements Externalizable {

 

private String inventoryId;

public String name;

public Map properties;

public float price;

 

public Product(){

}

 

public String getInventoryId() {

return inventoryId;

}

 

public void setInventoryId(String inventoryId) {

if (inventoryId != null && inventoryId.startsWith("X")){

this.inventoryId = inventoryId;

}else{

throw new IllegalArgumentException("3rd party product

inventory identities must start with 'X'");

}

}

 

public void readExternal(ObjectInput in) throws IOException,

ClassNotFoundException {

name = (String)in.readObject();

properties = (Map)in.readObject();

price = in.readFloat();

setInventoryId(lookupInventoryId(name, price));

}

 

public void writeExternal(ObjectOutput out) throws IOException {

// Write out the client properties from the server representation

out.writeObject(name);

out.writeObject(properties);

out.writeFloat(price);

}

 

private static String lookupInventoryId(String name, float price) {

String inventoryId = "X" + name + Math.rint(price);

return inventoryId;

}

}

 

 


http://www.niftyadmin.cn/n/1551862.html

相关文章

flex networkmonitor正确配置

在eclipse 中设置flex server: 例如:Root URL http://localhost:8080/nmsflex Context root /nmsflex 然后用validate校验一下,是否正确

Cairngorm框架

Cairngorm框架结构图转自官方 <object classid"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width"644" height"600" codebase"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version6,0,40,0"> <…

Oracle与SQL Server的互连

不同数据库平台的互连一般称之为数据库的异构服务&#xff0c;现在各大数据库之间都可以实现这样的异构互连&#xff0c;只是各厂商的具体实现技术不一样&#xff0c;如&#xff1a;在SQL SERVER里面叫做LINKED SERVER&#xff0c;通过ODBC实现与其它数据库的互联。     而…

sql 2005 express 远程访问和sa密码的问题

sqlserver2005现在的版本比较多&#xff0c;有express 版的&#xff0c;有企业开发版等&#xff0c;我目前用的express版的&#xff0c;占用系统资源还是很少的&#xff0c;不象网上所说的&#xff0c;一运行开发版&#xff0c;就吃掉400多M内存&#xff0c;对于我们绝大多数人…

SQL Server 2005 连接 Oracle 方案

&#xff11;、先在客户端安装 Oracle 客户端并配置好&#xff0c;使其能够连接 Oracle 服务器&#xff0c;配置过程略。 &#xff12;、以 SA 身份登录到 SqlServer 2005 中&#xff0c;依次打开&#xff1a;服务器对象 &#xff0d;> 链接服务器&#xff0c;右键 链接…

在SQL Server 2005中连接Oracle,完成查询、插入操作

http://www.cnblogs.com/1-2-3/articles/sql-link-oracle.html

OpenQuery存储过程返回结果集

解决这个问题,推荐使用OpenQuery或OPENROWSET的方法. 首先要说的是,这是一种非常规的方法,有一些性能上的缺陷. OpenQuery&#xff0c;OPENROWSET允许用户在链接服务器上查询.通过这种方法来得到查询的结果集. 1.在创建存储过程中,必须设置SET ANSI_NULLS ONSET ANSI_WARNINGS …

sqlserver 定时执行

--SQL SERVER2000为例 企业管理器—>数据库服务器—>管理目录—>SQL SERVER代理—>作业—>右键 选—>新建 常规选项页—>输入作业名称—>选中所有者。 步骤选项页—>新建—>输入步骤名—>类型 TSQL脚本—>选择需要执行的数据库—>在…