`
badqiu
  • 浏览: 673915 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

与Spring BlazeDS Integration相比,更简单的实现来调用spring bean

阅读更多

 

注:后面使用SBI替代Spring BlazeDS Integration

 

1.介绍:

为了使flex客户端能够直接调用服务端的spring bean,SBI提供的此种功能,SBI使用DispatchServlet代理转发MessageBrokerServlet的请求,增加了一些无用的类及相关配置,

而其实完成相同的功能,最简只需两个类即可.

 

2.扩展实现

 

BlazeDS本身提供一个AbstractBootstrapService的类用于扩展,该类主要是在BlazeDS初始化时用于动态创建 services, destinations, and adapters. rapid扩展了该类,用于将spring applicationContext的bean自动导出为destination,以供flex客户端调用. SpringRemotingDestinationBootstrapService 自动导出包含"@RemoteObject标注及以FlexService结尾"的Spring Bean为RemotingDestination


public class SpringRemotingDestinationBootstrapService extends AbstractBootstrapService {

    public static final String DEFAULT_INCLUDE_END_WITH_BEANS = "FlexService";
    
        private String destChannel;
        private String destSecurityConstraint;
        private String destScope;
        private String destAdapter;
        private String destFactory;
        
        private String serviceId;
        
        private String includeEndsWithBeans;

    public void initialize(String id, ConfigMap properties)
    {
        serviceId = properties.getPropertyAsString("service-id", "remoting-service");
        
                destFactory = properties.getPropertyAsString("dest-factory", "spring");
                destAdapter = properties.getProperty("dest-adapter");
                destScope = properties.getProperty("dest-scope");
                destSecurityConstraint = properties.getProperty("dest-security-constraint");
                destChannel = properties.getPropertyAsString("dest-channel","my-amf");
                
                includeEndsWithBeans = properties.getPropertyAsString("includeEndsWithBeans",DEFAULT_INCLUDE_END_WITH_BEANS);
                
                Service remotingService = broker.getService(serviceId);
                if(remotingService == null) {
                        throw createServiceException("not found Service with serviceId:"+serviceId);
                }
        
        createSpringDestinations(remotingService);
    }

        private ServiceException createServiceException(String message) {
                ServiceException ex = new ServiceException();
                ex.setMessage(message);
                return ex;
        }

        private void createSpringDestinations(Service remotingService) {
                WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(broker.getInitServletContext());
                List<String> addedBeanNames = new ArrayList();
                for(String beanName : wac.getBeanDefinitionNames()) {
                        Class type = wac.getType(beanName);
                        
                        boolean isCreateSpringDestination = type.isAnnotationPresent(RemotingObject.class) 
                                                                                || beanName.endsWith(includeEndsWithBeans) 
                                                                                || isCreateDestination(beanName,type);
                        
                        if(isCreateSpringDestination) {
                                createSpringDestination(remotingService, beanName);
                                addedBeanNames.add(beanName);
                        }
                }
                System.out.println("[Auto Export Spring to RemotingDestination],beanNames="+addedBeanNames);
        }

        protected boolean isCreateDestination(String beanName,Class type) {
                return false;
        }

    /*
    <!--
        动态生成的配置内容
    -->
    <destination id="sampleVerbose">
        <channels>
            <channel ref="my-secure-amf" />
        </channels>
        <adapter ref="java-object" />
        <security>
            <security-constraint ref="sample-users" />
        </security>
        <properties>
            <source>my.company.SampleService</source>
            <scope>session</scope>
            <factory>myJavaFactory</factory>
        </properties>
    </destination>     
     */
        protected void createSpringDestination(Service service, String destinationId) {
                flex.messaging.services.remoting.RemotingDestination destination = (flex.messaging.services.remoting.RemotingDestination)service.createDestination(destinationId);
        
        destination.setSource(destinationId);
        destination.setFactory(destFactory);
        
        if(destAdapter != null) 
                destination.createAdapter(destAdapter);
        if(destScope != null) 
                destination.setScope(destScope);
        if(destSecurityConstraint != null)
                destination.setSecurityConstraint(destSecurityConstraint);
        if(destChannel != null)
                destination.addChannel(destChannel);
        
        service.addDestination(destination);
        }

}
 

3.配置

将该类与网上的SpringFactory结合,即可使用. 以下为service-config.xml中关于自动导出的配置.

 

 

        <!-- 创建Spring RemotingDestination使用,与spring-remoting-service配合使用 -->
        <factories>
                <factory id="spring" class="cn.org.rapid_framework.flex.messaging.factories.SpringFactory"/>
        </factories>
        
    <services>
        <service-include file-path="remoting-config.xml" />
        <service-include file-path="proxy-config.xml" />
        <service-include file-path="messaging-config.xml" />
        
        <!-- 
                自动导出包含"@RemoteObject标注及以FlexService结尾"的Spring Bean为RemotingDestination
                FlexService结尾可以通过includeEndsWithBeans变量指定
        -->
        <service id="spring-remoting-service" class="cn.org.rapid_framework.flex.messaging.services.SpringRemotingDestinationBootstrapService">
                <!-- 其它生成的RemotingDestination默认属性 -->
                <properties>
                        <!-- 
                        <service-id></service-id>
                        <dest-factory></dest-factory>
                        <dest-adapter></dest-adapter>
                        <dest-scope></dest-scope>
                        <dest-channel></dest-channel>
                        <dest-security-constraint></dest-security-constraint>
                        <includeEndsWithBeans></includeEndsWithBeans>
                         -->
                </properties>
        </service>
                
    </services>

 

4.flex客户端调用

 

//简单示例调用
this.blogFlexService = new RemoteObject("blogFlexService");

//这里需要指定endpoint,因为是动态的RemotingDestination,而静态的RemotingDestination ,flex编译器会将endpoint编译进源代码.
//这个也是flex编译器需要指定配置文件而导致使用flex经常会犯的错误之一.
this.blogFlexService.endpoint = '../messagebroker/amf';

 

5.结论

 

 

与SBI相比,更加简单即可完成相同功能。并且通过AbstractBootstrapService,你可以很容易的完成将Java Bean, Or EJB3的session bean导出为destinations以供flex客户端直接调用.

具体使用请下载rapidframework并查看flex插件

 

rapid官方网站: http://www.rapid-framework.org.cn

 

 

11
4
分享到:
评论
3 楼 fhjxp 2010-02-22  
正确的配置导致错误的结果,一个正确的配置没办法使用
2 楼 badqiu 2010-02-22  
你在后台应该可以看到:

[Auto Export Spring to RemotingDestination],beanNames=[userInfoFlexService]

这样就证明你的配置正确,就可以直接调用userInfoFlexService了。

1 楼 fhjxp 2010-02-22  
为什么我按照这样做后老出现错误提示:xxx not availabel in the specified

相关推荐

    Spring BlazeDS Integration 1.0.0

    **Spring BlazeDS Integration 1.0.0** 是一个关键的框架,它为Spring应用程序与Adobe Flex客户端之间的通信提供了一种高效且灵活的解决方案。这个版本的发布标志着开发者可以更轻松地利用Flex的富互联网应用(RIA)...

    Spring BlazeDS Integration Spring集成BlazeDS

    综上所述,Spring BlazeDS Integration 提供了一个高效且灵活的途径,让Spring后端服务与Flex前端应用无缝对接,从而在企业级应用开发中实现强大的交互性和用户体验。通过文档"Flex与Java通讯文档三",读者可以深入...

    Flex、Spring整合:Spring BlazeDS Integration

    Spring BlazeDS Integration则是Spring社区为方便Spring与BlazeDS集成而开发的一套工具,它简化了两者之间的通信,允许开发者利用Spring的强大功能来处理业务逻辑,并通过BlazeDS将这些逻辑暴露给Flex前端。...

    Spring整合flex-Spring BlazeDS Integration-带项目demo

    Spring BlazeDS Integration是Spring框架的一个组件,它提供了与Adobe Flex的无缝集成,允许后端Java服务与前端Flex客户端进行通信。这个项目demo提供了实际操作的例子,帮助开发者理解和实现Spring与Flex的结合。 ...

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

    1. 调用远程服务:在Flex客户端通过代理类调用服务器端的Spring Bean方法,实现数据交互。 2. 数据绑定:使用Flex的DataBinding特性,实现在Flex组件和后台数据模型之间的双向绑定。 七、异常处理与安全考虑 1. ...

    spring-blazeds结合项目源码

    Spring通过Spring BlazeDS Integration项目实现了与BlazDS的无缝对接。该项目提供了一组Spring Bean定义,使得在Spring应用上下文中配置BlazDS服务变得更加简单。通过Spring,你可以声明式地定义...

    flex+spring flex整合

    整合Flex和Spring的关键在于让Flex客户端能够方便地访问Spring管理的Bean,而BlazeDS和Spring BlazeDS Integration就是为了实现这一目标。BlazeDS是Adobe的开源项目,它提供了一个中间层,使得基于Flex的前端能够...

    Adobe Flex 和 Spring 相关配置整合

    6. **部署与测试**:将工程打包部署到支持Java EE的服务器,如Apache Tomcat,然后通过Flex客户端进行测试,确保Flex能正确调用Spring服务。 软件环境要求包括Java 1.5或以上版本、Tomcat 6或以上版本、Spring 2.5...

    spring-flex官方文档

    Spring BlazeDS Integration还支持与BlazeDS Message Service的集成,从而实现更丰富的实时通信功能。 总之,Spring BlazeDS Integration为构建基于Spring的RIA提供了强大的支持,使得开发者能够充分利用Spring的...

    spring-flex-reference

    1. **Spring框架版本**:确保使用的Spring框架版本与BlazeDS Integration兼容。 2. **Adobe BlazeDS**:需要安装并配置Adobe BlazeDS服务器端组件,它提供了与Flex客户端通信的能力。 3. **支持的Java版本**:确保...

    BlazeDS整合Spring实现增删改查

    - **Spring-BlazeDS Integration**: 这是Spring社区提供的一个模块,简化了BlazeDS与Spring的集成,提供了配置和服务的声明式声明。 - **配置服务代理**: 使用`&lt;flex:message-broker&gt;`标签配置BlazeDS,并通过`...

    Flex 与 Spring整合

    2. **创建Flex客户端**:在Flex项目中,我们需要创建服务代理(Service Proxy)来调用Spring服务。Flex使用HTTPService或RemotingDestination来与Spring服务通信。如果是使用AMF,可以实现更高效的数据传输。 3. **...

    SpringFlex框架搭建

    Spring BlazeDS Integration提供了与BlazeDS的集成,BlazeDS是一个开源项目,负责处理Flex与Java之间的通信。而STS则是一个强大的开发环境,支持Spring和Flex的开发。 接下来,搭建SpringFlex项目的第一步是配置...

    flex整合spring需要的spring相关包

    Spring BlazeDS Integration或Spring Web Services提供了支持AMF的能力,使得Flex客户端可以直接调用Spring服务层的方法。 2. **Spring BlazeDS Integration**:这是Spring项目的一个子模块,用于集成BlazeDS,...

    使用BlazeDS整合Flex 4 与 JavaEE(Hibernate 3.5 Spring 3).doc

    4. Spring BlazeDS Integration 1.5.0:这个库是Spring与BlazeDS的集成模块,帮助简化配置和使用过程。 然后,我们将搭建一个基于Hibernate 3.5.5和Spring 3.0.3的Web项目。首先,创建一个名为fbsh-server的Java ...

    Spring 整合 Flex 包

    通过使用 Spring BlazeDS Integration,可以轻松地在 Flex 客户端和 Spring 服务之间建立双向数据绑定,实现高效的远程调用(Remote Procedure Call,RPC)机制。 Spring Flex 提供了以下关键组件和特性: 1. **...

    Flex整合spring

    在Flex应用程序中,我们通常利用远程对象(RemoteObject)或Web服务(如Hessian)来调用Spring管理的Bean中的方法和访问其属性,从而为用户提供动态、丰富的用户界面。 首先,让我们深入理解Flex与Spring的集成过程...

    Spring Flex 整合

    1. **Spring-BlazeDS-Project**: 提供了Spring与BlazeDS的集成支持,包括配置工具、适配器和自定义标签库,使得在Spring应用中添加Flex组件变得简单。 2. **Spring Actionscript Framework (SAF)**: SAF是Spring ...

Global site tag (gtag.js) - Google Analytics