`

SpringFlex框架搭建 之二、 配置使用SpringFlex

 
阅读更多
            
二、配置使用SpringFlex


2.1SpringFlex的基本配置

   Spring与BlazeDS结合必须使用MessageBroker,Flex客户端的HTTP请求将有Spring的DispatcherServlet分发到Spring管理的MessageBroker。使用Spring管理MessageBroker就无需配置BlazeDS MessageBrokerServlet了。

2.1.1添加Flex配置文件和BlazeDS包

添加BlazeDS相关的jar包:
通过pom搜索blazeds添加相应的jar包。可能版本不是最新的。
或者自行在blazeds-turnkey-4.0.0.rar解压的文件中(路径: blazeds-turnkey-4.0.0.14931\tomcat\webapps\blazeds\WEB-INF\lib)。

        添加XML配置文件:
将下载的BlazeDS解压,如:在blazeds-turnkey-4.0.0.14931\tomcat\webapps\blazeds\WEB-INF路径下的flex整个文件,copy到项目中WEB-INF下。

2.1.2配置Spring的DispatcherServlet

将Spring的DispatcherServlet对应的servlet-mapping的url-pattern改成/messagebroker/*。改完效果如下实例:

<servlet>
	<servlet-name>dispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcher</servlet-name>
	<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
&nbsp;


2.1.3在Spring中配置MessageBroker

Spring提供了简化的XML配置命令来再在Spring的WebApplicationContext中配置(dispatcher-servlet.xml)MessageBroker,需要是这些命名空间支持需要在SpringXML配置文件中添加相应的架构。

典型配置如下例子:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:flex="http://www.springframework.org/schema/flex" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.0.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/flex 
        http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">

</beans>


这使Spring BlazeDS 集成了flex命名空间,可在配置文件中使用。
        最基本的配置,需要在Spring的WebApplicationContext中声明一个MessageBrokerFactoryBean的Bean,以便将传去的请求引导到MessageBroder中,以及Spring管理MessageBroker需要的MessageBrokerHandlerAdapter和HandlerMapping(一般为SimpleUrlHandlerMapping)。
        这些bean可以使用message-broker标签来自动注册。例如最简单的方法:

<flex:message-broker/>


这样设置MessageBroker和必要的基础默认配置。默认值可以被重写,配置message-broker标签的属性和他的子元素。
        例如BlazeDS XML配置文件默认位置为:/ WEB-INF/flex/services-config.xml。但可以使用services-config-path属性重新配置路径。classpath在maven项目中默认为src/main/resources路径下。

<flex:message-broker services-config-path="classpath*:services-config.xml"/>


2.2Flex Remoting调用Spring Bean

使用Spring管理MessageBroker可以使Spring的beans很方便的被Flex客户端直接远程调用。MessageBroker处理在Flex AMF与Java传送的序列化和反序列化的数据格式。

2.2.1配置Remoting Service

通过xml配置文件进行配饰Remoting Service时,只需要声明这个允许被调用的Java类的一个bean,再将这个bean声明成一个remoting-destination。如下示例:

<bean id="flexGeneralController" class="com.springFlex.example.view.flex.FlexGeneralController"/>
<flex:remoting-destination ref="flexGeneralController"/>


也可以写成:

<bean id="flexGeneralController" class="com.springFlex.example.view.flex.FlexGeneralController">
	<flex:remoting-destination/>
</bean>


使用上面方式声明remoting-destination时,必须保证添加了flex:message-broker标签。





2.2.2使用@RemotingDestination


@RemotingDestination注解用于基于注解的remoting-destination配置而替换xml方法。@RemotingDestination使用在类级别上一标记此类为remoting-destination。@ RemotingInclude和 @ RemotingExclude注解用在方法级别上,进行标记@RemotingDestination注解类中的方法,是“包括”还是“不包括”此类remoting-destination远程调用。
        另,被@RemotingDestination注解的类,必须声明成一个bean。例如Service层或Controller层的功能类。



        下面给出一个简单的例子,controller层类被声明成remoting-destination:

@Controller(value="flexGeneralController")
@RemotingDestination(value="flexGeneralController", channels="my-amf")
public class FlexGeneralController {

	@RemotingInclude
	public String getName(String name) {
		return "hello:" + name;
	}
	
	@RemotingExclude
	public double getSqrt(int number) {
		return Math.sqrt(number);
	}
}


@RemotingDestination中的value为destination的id(Flex端的RemoteObject需要配置此属性),channels为AMP通道。

2.2.3Flex端的RemoteObject

在Flex端,使用RemoteObject就可以直接调用Java端的remoting-destination中的方法。需要配置endpoint和destination。
Endpoint一般路径为:http://[java项目IP地址]:[端口号]/[项目名称]/messagebroker/amf;
Destination为Java端的remoting-destination的id。例如在2.2.2中的例子中,Destination值为flexGeneralController。

如下例子:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
				minWidth="955" minHeight="600">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.messaging.ChannelSet;
			import mx.messaging.channels.AMFChannel;
			import mx.rpc.Fault;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			
			protected function button1_clickHandler(event:MouseEvent):void
			{
				this.remoteObject.getName("limingnihao");
			}
			
			protected function button2_clickHandler(event:MouseEvent):void
			{
				this.remoteObject.getSqrt(5);
			}
			
			protected function getStringResultHandler(event:ResultEvent):void{
				Alert.show(event.result.toString());
			}
			
			protected function getSqrtResultHandler(event:ResultEvent):void{
				Alert.show(event.result.toString());
			}
			protected function remoteobject1_faultHandler(event:FaultEvent):void
			{
				Alert.show(event.fault.toString());
			}
			
		]]>
	</mx:Script>
	
	<mx:RemoteObject id="remoteObject" destination="flexGeneralController" fault="remoteobject1_faultHandler(event)" 
					 endpoint="http://192.168.1.119:8080/SpringFlexExample_JavaService/messagebroker/amf">
		<mx:method name="getName" result="getStringResultHandler(event)"/>
		<mx:method name="getSqrt" result="getSqrtResultHandler(event)"/>
	</mx:RemoteObject>
	
	<mx:Button x="37" y="64" label="按钮1" click="button1_clickHandler(event)"/>
	<mx:Button x="130" y="64" label="按钮2" click="button2_clickHandler(event)"/>
	
</mx:Application>


2.3消息拦截器MessageInterceptor

自定义消息拦截器,可以用于处理特殊逻辑在AMF传入传出java 表单的时候。例如,用拦截器检查传入消息的内容,或者给返回信息进行额外统一的操作。
通过实现org.springframework.flex.core.MessageInterceptor接口就可以进行自定义message拦截器。然后必须配置成Spring Bean,在用XML命名空间关联此bean。



如下实例:自定义message拦截器:CustomMessageInterceptor,和xml文件的配置方法。

package com.springFlex.example.exception;

import org.springframework.flex.core.MessageInterceptor;
import org.springframework.flex.core.MessageProcessingContext;

import flex.messaging.messages.Message;

public class CustomMessageInterceptor implements MessageInterceptor {

	public Message postProcess(MessageProcessingContext context, Message inputMessage, Message outputMessage) {
		System.out.println("CustomMessageInterceptor - postProcess");
		return outputMessage;
	}

	public Message preProcess(MessageProcessingContext context, Message inputMessage) {
		System.out.println("CustomMessageInterceptor - preProcess");
		return inputMessage;
	}

}


需要在xml文件中添加bean,和关联bean。

<bean id="customMessageInterceptor" class="com.springFlex.example.exception.CustomMessageInterceptor"/>
<flex:message-broker>
	<flex:message-interceptor ref="customMessageInterceptor"/>
</flex:message-broker>


2.4异常转换器Exception Translators

在服务器发生异常时,会将这个异常对象传播到Flex客户端,但必须将这个原始异常转换翻译成flex.messaging.MessageException 的一个实例。如果不进行翻译工作,一般“Server.Processing”错误将传播到Flex客户端,这样客户端就无法根据错误的原因而作处理。通常情况下,将转换成Spring安全异常MessageException,但也可以使用自定义的应用程序级别异常进行转换。
        通过实现org.springframework.flex.core.ExceptionTranslator接口进行自定义异常转换器。然后必须配置成Spring Bean,在用XML命名空间关联此bean。
        接口的handles方法的返回值来控制是否进行翻译。返回false不进行翻译工作。返回true则就会去执行接口的translate方法进行异常转换。


        如下实例:自定义Exception Translators:CustomExceptionTranslator,和xml文件的配置方法。

package com.springFlex.example.exception;

import org.springframework.flex.core.ExceptionTranslator;

import flex.messaging.MessageException;

public class CustomExceptionTranslator implements ExceptionTranslator {

	public boolean handles(Class<?> clazz) {
		System.out.println("CustomExceptionTranslator - handles - " + clazz.getName());
		return true;
	}

	public MessageException translate(Throwable t) {
		System.out.println("CustomExceptionTranslator - translate - " + t.getMessage());
		return new MessageException(t);
	}
}


需要在xml文件中添加bean,和关联bean。

<bean id="customExceptionTranslator" class="com.springFlex.example.exception.CustomExceptionTranslator"/>
<flex:message-broker>
	<flex:exception-translator ref="customExceptionTranslator"/>
</flex:message-broker>


原始链接:http://limingnihao.iteye.com/blog/774234
分享到:
评论

相关推荐

    SpringFlex框架搭建

    SpringFlex框架搭建是一个将Spring框架与Adobe Flex技术结合使用的实践过程。这个框架允许开发者利用Spring的强大功能来构建后端服务,同时使用Flex作为前端展示层,提供富互联网应用程序(RIA)的用户体验。在本篇...

    flex-spring blazeds integration基本框架搭建记录

    在服务器端,配置Spring项目,确保Spring MVC或Spring Web Services已经安装。 - **创建Flex项目**: 使用Flex Builder创建新项目,导入BlazDS库,并设置适当的AMF通道。 - **创建Spring服务**: 在Spring应用上下...

    spring+hibernate+flex整合

    以上就是Spring、Hibernate和Flex整合的基础知识和搭建步骤,对于初学者来说,这是一个很好的起点,能够帮助他们理解这些技术的协同工作方式,并为更复杂的项目打下基础。通过不断地实践和学习,开发者可以逐步掌握...

    spring flex实例

    在“TestSpringFlex”这个压缩包中,可能包含了搭建 Spring Flex 示例应用的相关文件,如配置文件(如 `applicationContext.xml`)、Flex 应用源代码(`.mxml` 和 `.as` 文件)、服务器端 Java 类和测试脚本等。...

    FLEX_Spring环境搭建

    提供的文件"Flex_Spring环境安装配置说明.xls"可能包含了详细的步骤和注意事项,帮助用户进行环境搭建。"Spring_Flex_Web_Project"可能是一个示例项目,包含了已经配置好的FLEX和Spring的整合实例,可以作为学习和...

    使用Jersey框架搭建Rest服务

    ### 使用Jersey框架搭建Rest服务 #### 编写目的 本文档旨在详细介绍如何利用Spring与Jersey框架构建RESTful Web服务。重点涵盖环境配置、Spring框架配置、Jersey与Spring的集成配置,以及通过前端Ajax调用REST服务...

    Flex+spring+mybatis架构搭建

    3. **配置Spring**:创建Spring MVC项目,配置Spring的bean定义,包括Service、Dao和对应的Mapper接口。同时,设置Spring的配置文件,配置数据源、事务管理器以及Mybatis的SqlSessionFactory。 4. **集成Mybatis**...

    flex+Spring+Hibernate整合配置详解

    Flex+Spring+Hibernate 整合是企业级应用开发中常见的一种技术栈组合,它结合了Flex前端的富互联网应用程序(RIA)开发能力、Spring框架的依赖注入和事务管理功能,以及Hibernate持久化框架的数据库操作便捷性。...

    Spring Flex 整合

    通过在Spring Security配置中指定访问规则,限制Flex客户端对特定资源的访问,确保应用的安全性。 5. **异常处理**:在Spring服务端捕获的异常可以通过BlazeDS传递到Flex客户端,从而在客户端显示适当的错误信息,...

    Myeclipse10搭建Flex+spring+mybatis架构

    ### MyEclipse10搭建Flex + Spring + MyBatis架构详解 #### 一、环境配置与准备工作 在开始搭建基于MyEclipse10的Flex + Spring + MyBatis架构之前,我们需要确保以下软件和工具已经安装配置好: 1. **JDK**:...

    spring-flex-reference

    Spring框架自设计之初就致力于保持技术中立性,尤其是在处理客户端访问其核心服务时。这意味着Spring并不限定特定的前端技术栈,而是尽可能地提供广泛的兼容性和灵活性。随着Flex这一富互联网应用程序(RIA)开发...

    Flex+BlazeDS+Spring环境一步步搭建

    **集成Remote Object到Spring**:在Flex客户端,使用RemoteObject组件与BlazeDS建立连接,然后在Spring配置文件中定义相应的服务代理,以便于Spring管理这些远程服务。 D. **引入Hibernate框架**:在Java后端,...

    FLEX环境搭建及开发流程

    如果项目使用了Spring等服务器端框架,还需要配置服务器端的相应设置。 6. **持续集成和版本控制**:对于大型项目,使用持续集成工具(如Jenkins)和版本控制系统(如Git)是必要的,以保证团队协作的高效性和代码...

    activiti+flex项目搭建

    此外,Activiti 还集成了Spring框架,使得在Java环境中集成和使用变得非常容易。 在项目搭建的过程中,你需要完成以下几个关键步骤: 1. **环境准备**:确保你的开发环境中已经安装了Java JDK、Maven、Eclipse 或...

    Flex Builder3+MyEclipse8.5搭建Flex Spring Hibernate环境

    以下将详细介绍如何使用Flex Builder3和MyEclipse8.5搭建Flex、Spring和Hibernate的开发环境。 **1. 下载必备软件** 首先,你需要获取以下软件的最新版本: - **Flex Builder3**:Adobe的IDE,用于编写Flex前端代码...

Global site tag (gtag.js) - Google Analytics