`
shlei
  • 浏览: 287808 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

动态配置AMF与后台接口调用

 
阅读更多
以下是一个AMF调用类:
package common
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.utils.ByteArray;
	import flash.utils.Dictionary;
	
	import mx.controls.Alert;
	import mx.core.FlexGlobals;
	import mx.messaging.ChannelSet;
	import mx.messaging.channels.AMFChannel;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.RemoteObject;
	
	
	public class SimpleAmf
	{
		public function SimpleAmf(v:SingletonTemp,sourceData:String,url:String=null ){
			_dispatcher = new EventDispatcher();
			_service = new mx.rpc.remoting.RemoteObject();
			
			_nonPollingChannelSet = new mx.messaging.ChannelSet();		
			_pendingOperations = new flash.utils.Dictionary();
			_cachedOperations = new Array();
			_serviceUrl = url;
			_sourceData = sourceData;
			
			initChannels();
			
			_service.addEventListener(mx.rpc.events.FaultEvent.FAULT, serviceFaultHandler);
		}
		
		/**
		 * destination初始化
		 */
		protected function initChannels():void{
			_service.requestTimeout = _requestTimeout;
			_service.source = _sourceData;//"ssoc.AssetService";
			_service.destination = "amfphp";
			_service.source= _sourceData;
			_service.endpoint = _serviceUrl;
		}
		
		/**
		 * SimpleAmf单例模式
		 * */
		public static function instance(source:String,url:String=null):SimpleAmf{
			
			if ( url == null ){
				url = FlexGlobals.topLevelApplication._host;//要传入的gateway从全局变量中取,如:http://192.168.1.146/ssoc/phpserver/gateway.php
			}
			var key:String = url + "/" + source; //md5.hash( _binKey ).toString();
			if( null == _instanceHash[key] ){
				var server:SimpleAmf = new SimpleAmf(new SingletonTemp(),source,url);
				_instanceHash[key] = server;//把调用的后台接口类存入数组,这样第二次就可直接调用了
			}
			
			return _instanceHash[key];
		}
		
		/**
		 * 
		 * @param Operation
		 * @param eventType
		 * @param arguments
		 * @param bRecallOnError
		 * 
		 */
		protected function startRemoteOperation(Operation:String, eventType:String, arguments:Object,callback:Function=null, bRecallOnError:Boolean=true):void{
			var requestData:AmfRequestData = new AmfRequestData(eventType);
			requestData.operation = _service.getOperation(Operation);
			requestData.callback = callback;
			requestData.recallOnError = bRecallOnError;
			
			requestData.operation.arguments = arguments;
			requestData.token = requestData.operation.send();
			
			_pendingOperations[requestData.token] = requestData;
			return;
		}
		
		/**
		 * 
		 * @param token
		 * @param arg2
		 * @return 
		 * 
		 */        
		protected function finishRemoteOperation(token:mx.rpc.AsyncToken, arg2:Boolean=true):AmfRequestData{
			var requestData:*;
			requestData = this._pendingOperations[token] as AmfRequestData;
			if (requestData == null)
			{
				return null;
			}
			delete _pendingOperations[token];
			
			return requestData;
		}
		
		/**
		 * callback(success:Boolean,response:Object,arguments:Object)
		 * @success 是否调用城功
		 * @response 返回的数据
		 * @arguments 传入的调用参数
		 * */
		private function onDefaultGetHandler(resultEvent:mx.rpc.events.ResultEvent):void{	
			var requestData:AmfRequestData = finishRemoteOperation(resultEvent.token);	
			if ( requestData.callback != null ){
				requestData.callback(true,resultEvent.result,requestData.operation.arguments);
			}			
		}
		
		/**
		 * 异常处理
		 */
		private function serviceFaultHandler(event:FaultEvent):void{
			var requestData:AmfRequestData = finishRemoteOperation(event.token);	
			if ( requestData.callback != null ){
				requestData.callback(false,event.fault.faultString,requestData.operation.arguments);				
			}
		}
		
		/**
		 * 请求调用函数
		 */
		public function request( operation:String, arguments:Object,callback:Function=null, eventType:String=null ):void{
			
			_service.getOperation(operation).addEventListener(mx.rpc.events.ResultEvent.RESULT, onDefaultGetHandler);			
			
			startRemoteOperation( operation, eventType , arguments,callback );
		}
		
		protected var _pendingOperations:flash.utils.Dictionary;
		protected var _service:mx.rpc.remoting.RemoteObject;
		protected var _requestTimeout:int=120;
		protected var _dispatcher:EventDispatcher;
		protected var _cachedOperations:Array;
		protected var _nonPollingChannelSet:mx.messaging.ChannelSet;
		private var _serviceUrl:String=null;
		private var _sourceData:String=null;
		
		private static var _instanceHash:Dictionary = new Dictionary();		
	}
}

class AmfRequestData{
	
	public function AmfRequestData(_eventType:String=null){
		eventType = _eventType;
		return;
	}
	
	public var callback:Function=null;	
	public var eventType:String=null;	
	public var operation:mx.rpc.AbstractOperation=null;	
	public var recallOnError:Boolean=false;	
	public var token:mx.rpc.AsyncToken=null;
}

class SingletonTemp{};


调用方法:
/**
 * @SsocService 后台接口调用类
 * @getp_asset_eventCount 调用接口
 * @[bTime,eTime,"I",ip]调用接口传入参数,必须放到数组中
 * @getp_asset_eventCountHandler 回调函数名
 */
SimpleAmf.instance("SsocService").request("getp_asset_eventCount",[bTime,eTime,"I",ip],getp_asset_eventCountHandler);


回调函数:
/**
 * callback(success:Boolean,response:Object,arguments:Object)
 * @success 是否调用城功
 * @response 返回的数据
 * @arguments 传入的调用参数
 * */
private function getp_asset_eventCountHandler(success:Boolean,response:Object,arguments:Object):void
{
				
}
分享到:
评论

相关推荐

    flex 与java后台整合 PPT

    在Java后端,我们需要创建服务接口和实现类,这些接口将在Flex客户端通过AMF调用。接口设计应考虑到Flex的异步调用特性,通常使用Java的Servlet或Spring MVC来处理请求。 4. **Flex客户端调用**: 在Flex端,使用...

    flex使用BlazeDS远程调用java例子.

    在本例子中,我们将探讨如何使用Flex与Java后端进行远程调用,借助Adobe的BlazeDS服务。BlazeDS是Flex与Java服务器之间通信的一个中间件,支持AMF(Action Message Format)协议,提供数据推送、拉取和消息代理等...

    flex+java前后台通讯

    本文将深入探讨如何使用Flex与Java进行后台通信,以实现动态、实时的Web应用。首先,我们将从创建Java项目开始,然后讨论Flex中的关键配置,包括设置远程服务对象、通道设置和事件监听,最后分析通信过程中的异常...

    Flex如何让前台链接后并访问数据库

    Flex是一种强大的富互联网应用...总结,Flex通过数据绑定和服务调用来实现前台与后台的紧密集成,通过AMF通道高效地与数据库进行交互。理解并熟练运用这些技术,能帮助开发者创建功能强大、数据驱动的Flex应用程序。

    felxJ2ee实例+整合Flex和J2ee--配置(带图)绝对完整

    2. **在Flex中创建服务调用**:在Flex中,可以通过`WebService`或`RemoteObject`组件来调用Java后台的服务。`WebService`适用于SOAP协议,而`RemoteObject`更适合于AMF。 3. **在Java端创建服务接口**:在J2EE...

    Flex +BlazeDS+java后台分页的实现

    2. **设置BlazeDS配置**:在项目的services-config.xml文件中,配置一个ChannelSet,定义与Java服务的连接。同时,创建一个Service来暴露Java后台的分页接口。 3. **编写Java服务**:在Java后端,创建一个服务类,...

    Flex使用RemotingObject和后台通信的基本步骤

    总结,使用Flex的RemotingObject类与后台通信,主要涉及设置服务连接、定义服务接口、处理回调函数、调用服务方法等步骤。了解这些基本操作后,开发者可以轻松构建出与后台服务器紧密交互的Flex应用程序。通过不断的...

    Flex的Cairngorm框架工程 Java后台

    8. **Service**:服务接口定义了与后台数据交互的规范,Java后台通常会实现这些接口来提供服务。 9. **Presentation Model**:视图模型是一种设计模式,它将视图和业务逻辑分离,使得视图可以专注于显示数据,而...

    Flex调用Web服务的应用开发(一)

    以调用一个RESTful API为例,首先在Flex项目中添加HTTPService组件,然后配置其`url`属性指向API接口,`method`属性设置为GET或POST,`result`事件处理函数用于接收返回数据。在ActionScript代码中,可以动态设置...

    flex4.0和java后台通信实例

    本实例是Flex 4.0与Java后台通信的一个典型应用,主要目的是帮助初学者理解和掌握这两者之间的数据交换机制。运行说明通常会涵盖以下内容: 1. **环境配置**:首先,确保你已经安装了Adobe Flex Builder或类似的IDE...

    Cairngorm交互示例源文件(JSP后台)

    - `*.jsp`:JSP后台接口,处理与Flex的交互。 - ` CairngormEvent.as`:自定义事件类。 - `*.xml` 或 `*.config`:配置文件,可能包含服务配置和事件映射。 通过深入学习和分析这些源文件,开发者可以了解Cairngorm...

    Flex + ASP_Net + FlourineFX环境配置,开发,发布(文檔+代碼)

    通过AMF通道配置,使Flex客户端能够调用服务器端的方法。 6. **调试与测试**:开发过程中,需要进行客户端和服务器端的联合调试,确保数据传输无误。 7. **发布与部署**:完成开发后,将Flex应用打包成SWF文件,...

    flex和hibernate的整合

    10. **部署与维护**:最后,部署时要考虑服务器配置,如BlazeDS/LCDS的设置,以及如何更新和维护服务端代码,而不影响正在运行的Flex应用。 以上是Flex和Hibernate整合的主要方面,实际开发中还需要结合具体项目...

    j2ee+flex+blazeds 配置实践

    在实际项目中,源码会包含J2EE的后台服务类、Flex的MXML视图和ActionScript业务逻辑代码,以及BlazeDS的配置文件。理解源码的关键在于理解AMF的序列化和反序列化过程,以及如何在Java和Flex之间传递数据对象。 六、...

    flex+java+remoteObject

    例如,你可以创建一个名为`JavaService`的接口和`JavaServiceImpl`的实现类,然后在BlazeDS的配置文件(如services-config.xml)中将这个服务暴露为AMF端点。 ```java public interface JavaService { public ...

    java_JDBC+Blazeds_Demo

    开发者可以通过这个Demo学习如何使用JDBC操作数据库,以及如何在Flex应用中利用BlazeDS调用Java服务,实现动态数据展示和交互。同时,这个Demo也展示了BlazeDS在企业级RIA开发中的强大功能,有助于提升Web应用的用户...

    完整的三种flex与java整合方式

    Flex应用通常通过HTTP或AMF协议与Java后台服务进行交互,使用 BlazeDS 或 LCDS (LiveCycle Data Services) 作为中间层来处理数据交换。开发者需要配置服务端的部署描述符文件(如services-config.xml)和Flex客户端...

    Flex+Spring+Hibernate 环境

    在Flex+Spring的集成中,Spring主要负责处理业务逻辑和服务调用,通过HTTP或AMF(Action Message Format)与Flex客户端通信。 3. Hibernate:Hibernate是一个优秀的对象关系映射(ORM)框架,它简化了Java应用对...

    java_flex交互

    Flex的强项在于用户界面设计和动态交互,而Java擅长后台处理和数据管理。通过两者结合,我们可以创建既有美观界面又具备强大功能的应用。 4. **通信方式**: - **AMF(Action Message Format)**:AMF是一种高效...

Global site tag (gtag.js) - Google Analytics