springside4(spring4.2.5) 整合 flex(blazeds)

来源:互联网 发布:网络歌手臻言图片 编辑:程序博客网 时间:2024/05/23 10:51
springside4(spring4.2.5) 整合 flex(blazeds)

1 pom.xml 添加依赖包

<!-- https://mvnrepository.com/artifact/org.springframework.flex/spring-flex-core -->
            <dependency>
            <groupId>org.springframework.flex</groupId>
            <artifactId>spring-flex-core</artifactId>
            <version>1.0.3.RELEASE</version>
            </dependency>
            
            <dependency>
                  <groupId>commons-httpclient</groupId>
                  <artifactId>commons-httpclient</artifactId>
                  <version>3.0.1</version>
            </dependency>
            
            <dependency>
      <groupId>com.adobe.blazeds</groupId>
      <artifactId>blazeds-proxy</artifactId>
      <version>4.0.0.14931</version>
    </dependency>
    <dependency>
      <groupId>com.adobe.blazeds</groupId>
      <artifactId>blazeds-core</artifactId>
      <version>4.0.0.14931</version>
    </dependency>
    <dependency>
      <groupId>com.adobe.blazeds</groupId>
      <artifactId>blazeds-remoting</artifactId>
      <version>4.0.0.14931</version>
    </dependency>
    <dependency>
      <groupId>com.adobe.blazeds</groupId>
      <artifactId>blazeds-common</artifactId>
      <version>4.0.0.14931</version>
    </dependency>
    <dependency>
      <groupId>com.adobe.blazeds</groupId>
      <artifactId>blazeds-opt</artifactId>
      <version>4.0.0.14931</version>
    </dependency>
   
    <dependency>
      <groupId>com.adobe.blazeds</groupId>
      <artifactId>blazeds-rds-server</artifactId>
      <version>4.0.0.14931</version>
    </dependency>

如果maven中央中央库无法下载可以到这里下载本地jar包然后手动打包到maven中中央库。

http://download.csdn.net/detail/muzili90s/9627781

2 拷贝 blazeds  /flex 下所有的文件到项目到项目web-inf/flex

可以在这里下载到flex配置文件 

http://download.csdn.net/detail/muzili90s/9627781

messaging-config.xml
proxy-config.xml
remoting-config.xml
services-config.xml
version.properties

3 修改 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      version="2.5">
      <display-name>myspring</display-name>
      
      <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                  classpath*:/applicationContext.xml,
                  classpath*:/applicationContext-shiro.xml
            </param-value>
      </context-param>
      <context-param>
            <param-name>spring.profiles.default</param-name>
            <param-value>production</param-value>
      </context-param>
      
      <context-param>
            <param-name>flex.class.path</param-name>
            <param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>
      </context-param>
      <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      
      <listener>
            <listener-class>flex.messaging.HttpFlexSession</listener-class>
      </listener>
      <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                  <param-name>encoding</param-name>
                  <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                  <param-name>forceEncoding</param-name>
                  <param-value>true</param-value>
            </init-param>
      </filter>
      <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>
            <filter-name>openEntityManagerInViewFilter</filter-name>
            <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
      </filter>
      <filter-mapping>
            <filter-name>openEntityManagerInViewFilter</filter-name>
            <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>
            <filter-name>shiroFilter</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
            <init-param>
                  <param-name>targetFilterLifecycle</param-name>
                  <param-value>true</param-value>
            </init-param>
      </filter>
      <filter-mapping>
            <filter-name>shiroFilter</filter-name>
            <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>
            <filter-name>sitemeshFilter</filter-name>
            <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
      </filter>
      <filter-mapping>
            <filter-name>sitemeshFilter</filter-name>
            <url-pattern>/*</url-pattern>
      </filter-mapping>
      <servlet>
            <servlet-name>springServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>/WEB-INF/spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
            <servlet-name>springServlet</servlet-name>
            <url-pattern>/</url-pattern>
      </servlet-mapping>
      
      <!-- MessageBroker Servlet -->
      <servlet>
            <servlet-name>MessageBrokerServlet</servlet-name>
            <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
            <init-param>
                  <param-name>services.configuration.file</param-name>
                  <param-value>/WEB-INF/flex/services-config.xml</param-value>
            </init-param>
            <init-param>
                  <param-name>flex.write.path</param-name>
                  <param-value>/WEB-INF/flex</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
            <servlet-name>MessageBrokerServlet</servlet-name>
            <url-pattern>/messagebroker/*</url-pattern>
      </servlet-mapping>
      <session-config>
            <session-timeout>20</session-timeout>
      </session-config>
      <error-page>
            <exception-type>java.lang.Throwable</exception-type>
            <location>/WEB-INF/views/error/500.jsp</location>
      </error-page>
      <error-page>
            <error-code>500</error-code>
            <location>/WEB-INF/views/error/500.jsp</location>
      </error-page>
      <error-page>
            <error-code>404</error-code>
            <location>/WEB-INF/views/error/404.jsp</location>
      </error-page>
</web-app>

4 测试

package com.bceapp.springbbs.myspring.service.test;
import org.springframework.stereotype.Component;
@Component
public class FlexServiceTest {
      
      private static int num = 0;
       
        public String getHello() {
          System.out.println("In Here");
          num ++;
          return "You are In Java Service" + num;
        }
       
        public String showInputVal(String input) {
          System.out.println("Input Here");
          num++;
          return "You Input Value: " + input + "; Num:" + num;
        }
}

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                     xmlns:s="library://ns.adobe.com/flex/spark"
                     xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
      <fx:Script>
            <![CDATA[
                  import mx.controls.Alert;
                  import mx.rpc.events.FaultEvent;
                  import mx.rpc.events.ResultEvent;
                  protected function button1_clickHandler(event:MouseEvent):void
                  {
                        this.remoteObject.getName();
                  }
                  
                  protected function remoteObject_faultHandler(event:FaultEvent):void
                  {
                        Alert.show(event.fault.toString());
                  }
                  
                  protected function getNameResultsHandler(event:ResultEvent):void
                  {
                        Alert.show(event.result.toString());
                  }
                  
                  
                  
                  protected function servFlex_resultHandler(event:ResultEvent):void
                  {
                        // TODO Auto-generated method stub
                        //                      Alert.show("OK: "+event.result, "Msg");
                  }
                  
                  protected function servFlex_faultHandler(event:FaultEvent):void
                  {
                        // TODO Auto-generated method stub
                        //                      Alert.show("OK: "+event.fault, "Msg");
                  }
                  
                  protected function button2_clickHandler(event:MouseEvent):void
                  {
                        this.servFlex.getHello();
                  }
                  
                  protected function getNameResultsHandler2(event:ResultEvent):void
                  {
                        Alert.show(event.result.toString());
                  }
                  
            ]]>
      </fx:Script>
      
      <fx:Declarations>
            <!--  -->
            <s:RemoteObject id="servFlex" destination="javaService" result="servFlex_resultHandler(event)" fault="servFlex_faultHandler(event)" >
                  
                  <s:method name="getHello" result="getNameResultsHandler2(event)"/>
            </s:RemoteObject>
      
      </fx:Declarations>
      <s:Button x="51" y="35" label="1" click="button1_clickHandler(event)"/>
      
      <s:Button x="151" y="35" label="2" click="button2_clickHandler(event)"/>
      
</s:Application>

直接使用spring拦截flex请求有问题,spring4.2.5和blazeds 有冲突

如果有牛人把这个问题解决了 请告诉我。不胜感激


忘了最重要的一步了 

添加server remote

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>

    <destination id="javaService"> 
        <properties> 
            <source>com.bceapp.springbbs.myspring.service.test.FlexServiceTest</source> 
        </properties> 
    </destination>

</service>

--------------------------------------------------------------------------------------------------------------

flex 调用 spring 

6  增加一个spring的工厂类

packagecom.bceapp.springbbs.myspring.web.flex; 
importorg.springframework.context.ApplicationContext; 
importorg.springframework.web.context.support.WebApplicationContextUtils; 
importorg.springframework.beans.BeansException; 
importorg.springframework.beans.factory.NoSuchBeanDefinitionException; 
 
importflex.messaging.FactoryInstance; 
importflex.messaging.FlexFactory; 
importflex.messaging.config.ConfigMap; 
importflex.messaging.services.ServiceException; 
 
 
publicclassSpringFactoryimplementsFlexFactory 
   privatestaticfinalStringSOURCE= "source"
 
    
   publicvoidinitialize(Stringid, ConfigMapconfigMap) {} 
 
    
   publicFactoryInstance createFactoryInstance(Stringid, ConfigMapproperties
    { 
        SpringFactoryInstanceinstance= new SpringFactoryInstance(this,id,properties); 
       instance.setSource(properties.getPropertyAsString(SOURCE,instance.getId())); 
       returninstance
    }// end method createFactoryInstance() 
 
    
   publicObject lookup(FactoryInstanceinst
    { 
        SpringFactoryInstancefactoryInstance= (SpringFactoryInstance)inst
       returnfactoryInstance.lookup(); 
    } 
 
 
   staticclassSpringFactoryInstanceextendsFactoryInstance 
    { 
        SpringFactoryInstance(SpringFactoryfactory, Stringid, ConfigMapproperties
        { 
           super(factory,id,properties); 
        } 
 
 
       publicString toString() 
        { 
           return"SpringFactory instance for id="+ getId() +" source="+ getSource() +" scope="+ getScope(); 
        } 
 
       publicObject lookup() 
        { 
            ApplicationContextappContext= WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext()); 
            StringbeanName= getSource(); 
 
           try 
            { 
               returnappContext.getBean(beanName); 
            } 
           catch(NoSuchBeanDefinitionExceptionnexc
            { 
                ServiceExceptione= new ServiceException(); 
                Stringmsg= "Spring service named '" + beanName + "' does not exist."
               e.setMessage(msg); 
               e.setRootCause(nexc); 
               e.setDetails(msg); 
               e.setCode("Server.Processing"); 
               throwe
            } 
           catch(BeansExceptionbexc
            { 
                ServiceExceptione= new ServiceException(); 
                Stringmsg= "Unable to create Spring service named '"+ beanName + "' "
               e.setMessage(msg); 
               e.setRootCause(bexc); 
               e.setDetails(msg); 
               e.setCode("Server.Processing"); 
               throwe
            } 
        } 
         
    } 
 
}

7在services-config中增加一个spring工厂

<factories>
      <factoryid="springFactory"class="com.bceapp.springbbs.myspring.web.flex.SpringFactory"/>
      </factories>
 
在remoting-config中增加一个destination

<destinationid="javaService"> 
       <properties> 
            <factory>springFactory</factory>
              <!-- 这里只定义名字 会在spring容器里找到bean 注解方式为类名第一个字母小写-->
           <source>testUserMybatisService</source> 
       </properties> 
   </destination>

至此flex整合spring4完成。

0 0
原创粉丝点击