文档章节

Flex、Spring整合:blazeds

暗之幻影
 暗之幻影
发布于 2015/09/23 16:59
字数 750
阅读 47
收藏 0
准备:
1、下载blazeds 4.x,下载地址:http://download.macromedia.com/pub/livecycle/blazeds/4_0/blazeds-bin-4.0.0.14931.zip


2、部署blazeds至tomcat,访问http://localhost:8080/blazeds/messagebroker/amf,显示空白页,则部署成功


整合:
====================服务端开发========================================
1、建立一测试Service:
public class GuestListService implements Serializable, IGuestListService {

	private static final long serialVersionUID = 3552207441192189726L;

	public List<Guest> getGuestList() {
		List<Guest> guestList = new ArrayList<Guest>();
		guestList.add(new Guest("Guest One"));
		guestList.add(new Guest("Guest Two"));
		guestList.add(new Guest("Guest Three"));
		guestList.add(new Guest("Guest Four"));
		return guestList;
	}
}


2、配置bean:在blazeds/WEB-INF/下新建applicationContext.xml文件,添加
<beans>
	<bean id="guestListService" class="com.sky.flexonspring.services.GuestListService" />
</beans>


3、修改web.xml文件,添加spring支持
<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>


4、打开blazeds/WEB-INF/flex/services-config.xml,添加
<factories>
		<factory id="spring" class="com.sky.flexonspring.factories.SpringFactory" />
	</factories>

使得flex的bean对象创建交由spring负责
SpringFactory类的代码如下:
package com.sky.flexonspring.factories;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import flex.messaging.FactoryInstance;
import flex.messaging.FlexFactory;
import flex.messaging.config.ConfigMap;
import flex.messaging.services.ServiceException;

/**
 * This interface is implemented by factory components which provide instances
 * to the flex messaging framework.
 * 
 * @author Jeff Vroom
 */
public class SpringFactory implements FlexFactory {
	private static final String SOURCE = "source";

	/**
	 * This method can be used to initialize the factory itself. It is called
	 * with configuration parameters from the factory tag which defines the id
	 * of the factory.
	 */
	public void initialize(String id, ConfigMap configMap) {
	}

	/**
	 * This method is called when we initialize the definition of an instance
	 * which will be looked up by this factory. It should validate that the
	 * properties supplied are valid to define an instance. Any valid properties
	 * used for this configuration must be accessed to avoid warnings about
	 * unused configuration elements. If your factory is only used for
	 * application scoped components, this method can simply return a factory
	 * instance which delegates the creation of the component to the
	 * FactoryInstance's lookup method.
	 */
	public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {
		SpringFactoryInstance instance = new SpringFactoryInstance(this, id,
				properties);
		instance.setSource(properties.getPropertyAsString(SOURCE,
				instance.getId()));
		return instance;
	} // end method createFactoryInstance()

	/**
	 * Returns the instance specified by the source and properties arguments.
	 * For the factory, this may mean constructing a new instance, optionally
	 * registering it in some other name space such as the session or JNDI, and
	 * then returning it or it may mean creating a new instance and returning
	 * it. This method is called for each request to operate on the given item
	 * by the system so it should be relatively efficient.
	 * <p>
	 * If your factory does not support the scope property, it report an error
	 * if scope is supplied in the properties for this instance.
	 */
	public Object lookup(FactoryInstance inst) {
		SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
		return factoryInstance.lookup();
	}

	static class SpringFactoryInstance extends FactoryInstance {
		SpringFactoryInstance(SpringFactory factory, String id,
				ConfigMap properties) {
			super(factory, id, properties);
		}

		public String toString() {
			return "SpringFactory instance for id =" + getId() + " source="
					+ getSource() + " scope=" + getScope();
		}

		public Object lookup() {
			ApplicationContext appContext = WebApplicationContextUtils
					.getWebApplicationContext(flex.messaging.FlexContext
							.getServletConfig().getServletContext());
			String beanName = getSource();
			try {
				return appContext.getBean(beanName);
			} catch (NoSuchBeanDefinitionException nexc) {
				ServiceException e = new ServiceException();
				String msg = "Spring service named '" + beanName
						+ "' does not exist.";
				e.setMessage(msg);
				e.setRootCause(nexc);
				e.setDetails(msg);
				e.setCode("Server.Processing");
				throw e;
			} catch (BeansException bexc) {
				ServiceException e = new ServiceException();
				String msg = "Unable to create Spring service named '"
						+ beanName + "' ";
				e.setMessage(msg);
				e.setRootCause(bexc);
				e.setDetails(msg);
				e.setCode("Server.Processing");
				throw e;
			}
		}
	}
}


5、将service公开,提供flex客户端调用:打开blazeds/WEB-INF/flex/remoting-config.xml,增加如下配置
<destination id="guestListService">
		<properties>
			<factory>spring</factory>
			<source>guestListService</source>
		</properties>
	</destination>


至此,服务端整合、开发完毕

====================客户端开发========================================
1、新建flex应用程序,添加remoteObject调用:
<mx:RemoteObject id="ro"
					 destination="guestListService"
					 endpoint="http://localhost:8080/blazeds/messagebroker/amf"
					 result="resultHandler(event)"
					 fault="faultHandler(event)"/>

注意这边的guestListService整合就是与remoting-config.xml中配置的destination的id保持一致
ro.getGuestList()
这段代码调用就得到调用
GuestListService.getGuestList()
后的List<Guest> 列表
private function resultHandler(event:ResultEvent):void
			{
				guestListDP = ArrayCollection(event.result);
			}


至此客户端就得到了服务器端的数据了,下面就是根据业务自由处理了。

效果图:


本文转载自:http://depravedangel.iteye.com/blog/871480

暗之幻影
粉丝 20
博文 377
码字总数 71245
作品 0
南京
高级程序员
私信 提问
Apache Flex BlazeDS 4.7.3 发布,Web 通讯工具

Apache Flex BlazeDS 是基于服务器的 Java 远程和 Web 通讯工具,方便开发者连接后端分布式数据和实时推送数据到 Adobe(r) Flex(r) 和 Adobe AIR(tm) 应用,提供更丰富的网络应用 (RIA) 体验...

王练
2017/04/01
742
4
集成 Flex, Spring, Hibernate 构建应用程序

RIA(Rich Internet Application)—— 富 Internet 应用以其良好的客户体验得到越来越广泛的应用,银行,电信等领域已有诸多成功案例。Adobe 的 Flex 是最具有代表性的基于 Flash 的 RIA 技...

红薯
2009/12/31
5.2K
7
Spring BlazeDS Integration 1.0.2 发布

Spring BlazeDS Integration 可以用来简化开发基于 Spring 框架开发的Web应用,前端采用 Adobe Flex 开发的应用界面。它使用 Spring 的风格提供了对 Adobe BlazeDS 的支持。 改进内容: * FL...

红薯
2010/02/08
593
1
将 Flex 集成到 Java EE 应用程序的最佳实践

传统的 Java EE 应用程序通常使用某种 MVC 框架(例如,Struts)作为前端用户界面,随着 Flex 的兴起,基于 RIA 的客户端能够给用户带来更酷的界面,更短的响应时间,以及更接近于桌面应用程...

小编辑
2010/01/05
1K
1
Spring BlazeDS Integration 1.5.0.M2 发布

Spring BlazeDS Integration 今天发布了 1.5.0.M2 里程碑版本,Spring BlazeDS Integration 可以用来简化开发基于 Spring 框架开发的Web应用,前端采用 Adobe Flex 开发的应用界面。它使用 ...

红薯
2011/02/11
580
0

没有更多内容

加载失败,请刷新页面

加载更多

Blockstack-2 :Blockstack ID注册

本篇文章主要记录Blockstack ID注册的流程; 在介绍注册流程之前,先简单的介绍一下Blockstack ID; 相对于传统互联网来说,Blockstack ID更像是统一的账号系统;即一个账号即可登录和授权所...

Riverzhou
40分钟前
8
0
面试官问:平时碰到系统CPU飙高和频繁GC,你会怎么排查?

处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运...

Java高级架构师n
今天
23
0
面向对象编程

1、类和对象 类是对象的蓝图和模板,而对象是实例;即对象是具体的实例,类是一个抽象的模板 当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定...

huijue
今天
23
0
redis异常解决 :idea启动本地redis出现 jedis.exceptions.JedisDataException: NOAUTH Authentication required

第一次安装在本地redis服务,试试跑项目,结果却出现nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required错误,真是让人头疼 先检查一...

青慕
今天
35
0
Spring 之 IoC 源码分析 (基于注解方式)

一、 IoC 理论 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 二、IoC方式 Spring为IoC提供了2种方式,一种是基于xml...

星爵22
今天
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部