zoukankan      html  css  js  c++  java
  • [转载]关于flex与blazeDS和spring配置的问题

    Flex和Spring的整合:
    1、将Spring的jar包拷贝到WEB-INF的lib下
    2、在web.xml中注册Spring,如下配置:
    <!-- Spring configuration file (Not needed if you don't use Spring) -->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <!-- Spring ContextLoaderListener (Not needed if you don't use Spring) -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    3、增加SpringFactory.java,代码如下:
    package com.samples.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. To configure flex data services
    * to use this factory, add the following lines to your services-config.xml
    * file (located in the WEB-INF/flex directory of your web application).
    *
    * <factories>
    * <factory id="spring" class="flex.samples.factories.SpringFactory" />
    * </factories>
    *
    * You also must configure the web application to use spring and must copy the spring.jar
    * file into your WEB-INF/lib directory. To configure your app server to use spring,
    * you add the following lines to your WEB-INF/web.xml file:
    *
    * <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</listenerclass&
    gt;
    * </listener>
    *
    * Then you put your spring bean configuration in WEB-INF/applicationContext.xml (as per the
    * line above). For example:
    *
    * <?xml version="1.0" encoding="UTF-8"?>
    * <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/
    spring-beans.dtd">
    *
    * <beans>
    * <bean name="weatherBean" class="dev.weather.WeatherService" singleton="true"/>
    * </beans>
    *
    * Now you are ready to define a destination in flex that maps to this existing service.
    * To do this you'd add this to your WEB-INF/flex/remoting-config.xml:
    *
    * <destination id="WeatherService">
    * <properties>
    * <factory>spring</factory>
    * <source>weatherBean</source>
    * </properties>
    * </destination>
    *
    * @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()));
    System.out.println("SpringSpringSpring" + instance.toString());
    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;
    }
    }
    }
    }
    4、在services-config.xml中注册SpringFacotry,配置如下:
    <factories>
    <factory id="spring" class="com.samples.factories.SpringFactory"/>
    </factories>
    5、接下来就要在applicationContext.mxl中注册helloJavaFlexBean,配置如下:
    <bean id="helloJavaFlexBean" class="com.test.HelloJavaFlex">
    </bean>
    6、在remoting-config.xml中将SpringBean公开给Flex客户端,配置如下:
    <destination id="helloJavaFlex">
    <properties>
    <factory>spring</factory>
    <source>helloJavaFlexBean</source>
    </properties>
    </destination>
  • 相关阅读:
    MySQL运维案例分析:Binlog中的时间戳
    身边有位“别人家的程序员”是什么样的体验?
    苹果收取30%过路费_你是顶是踩?
    1019 数字黑洞 (20 分)C语言
    1015 德才论 (25 分)C语言
    1017 A除以B (20 分)C语言
    1014 福尔摩斯的约会 (20 分)
    求n以内最大的k个素数以及它们的和、数组元素循环右移问题、求最大值及其下标、将数组中的数逆序存放、矩阵运算
    1005 继续(3n+1)猜想 (25 分)
    爬动的蠕虫、二进制的前导的零、求组合数、Have Fun with Numbers、近似求PI
  • 原文地址:https://www.cnblogs.com/fx2008/p/2240800.html
Copyright © 2011-2022 走看看