• blazeDS集成spring的remote访问


     欢迎交流转载,请注明出处:http://www.cnblogs.com/shizhongtao/p/3490037.html

    上一篇我只是简单实用blazeds创建了一个实例,大多数开发中,都是结合spring的spring BlazeDS Integration来进行开发。首先你要去官方网站上下载个jar包,我这里提供了我项目中的所有jar包的打包供你测试本示例实用,当然里面有很多多余jar包。项目中所有jar包地址(如地址问题,请联系博主)。

    集成开始,当然你要创建一个web项目,然后配置web.xml如下,这个就多添加了个spring的servlet,来代替"flex.messaging.MessageBrokerServlet"这个servlet。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
     3 <web-app>
     4 
     5     <display-name>BlazeDS Spring Integration Application</display-name>
     6     <description>BlazeDS Spring Integration Application</description>
     7     
     8     <!-- Http Flex Session attribute and binding listener support -->
     9     <listener>
    10         <listener-class>flex.messaging.HttpFlexSession</listener-class>
    11     </listener>
    12 
    13     <listener>
    14         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    15     </listener>
    16 
    17     <!-- Spring Dispatcher Servlet -->   
    18     <servlet>
    19         <servlet-name>flex</servlet-name>
    20         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    21         <init-param>
    22         <param-name>contextConfigLocation</param-name>
    23         <!-- 就是你项目中的‘applicationContext.xml’,作用一样 -->
    24         <param-value>/WEB-INF/flex-servlet.xml</param-value>
    25     </init-param>
    26         <load-on-startup>1</load-on-startup>
    27     </servlet>
    28 
    29     <servlet-mapping>
    30         <servlet-name>flex</servlet-name>
    31         <url-pattern>/messagebroker/*</url-pattern>
    32      </servlet-mapping>
    33 
    34     <welcome-file-list>
    35         <welcome-file>index.html</welcome-file>
    36         <welcome-file>index.jsp</welcome-file>
    37     </welcome-file-list>
    38 
    39 
    40 </web-app>

     然后修改/WEB-INF/flex-servlet.xml这个配置文件,为了使用 Spring BlazeDS Integration 的 tag,增加命名空间flex。我还是文件内容全部贴上,说明写到注释里面吧。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:flex="http://www.springframework.org/schema/flex"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     6     xsi:schemaLocation="
     7         http://www.springframework.org/schema/beans
     8         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     9         http://www.springframework.org/schema/flex
    10         http://www.springframework.org/schema/flex/spring-flex-1.5.xsd
    11         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    12     
    13     <context:component-scan base-package="com.bing">
    14     </context:component-scan>
    15     <!-- 请求路由给 MessageBroker -->
    16      <flex:message-broker>
    17         <flex:message-service default-channels="my-streaming-amf,my-longpolling-amf,my-polling-amf,my-amf" />
    18     </flex:message-broker> 
    19     <!--     <flex:message-broker />  -->
    20     <!-- 定义 Bean,并用 remoting-destination tag 把它暴露给 Flex,因为我用了annotation的方式,所以下面的注解掉了 -->
    21     <!-- <bean id="myService" class="com.bing.service.MyServiceImpl" />  
    22     <flex:remoting-destination ref="myService" />   -->
    23 </beans>

    然后修改/WEB-INF/flex/services-config.xml这个配置文件,默认的话这个文件夹是有四个文件的(services-config.xml、remoting-config.xml、proxy-config.xml、messaging-config.xml),集成spring后,其他三个都没有什么用了,我删掉了。

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <services-config>
      3 
      4   <!--   <services>
      5         <service-include file-path="remoting-config.xml" />
      6         <service-include file-path="proxy-config.xml" />
      7         <service-include file-path="messaging-config.xml" />        
      8     </services> -->
      9      <services>
     10         <default-channels>
     11            <channel ref="my-amf"/>
     12         </default-channels>
     13     </services>
     14     <security>
     15         <login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/>
     16         <!-- Uncomment the correct app server
     17         <login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss">
     18         <login-command class="flex.messaging.security.JRunLoginCommand" server="JRun"/>        
     19         <login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/>
     20         <login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/>
     21         -->
     22 
     23         <!-- 
     24         <security-constraint id="basic-read-access">
     25             <auth-method>Basic</auth-method>
     26             <roles>
     27                 <role>guests</role>
     28                 <role>accountants</role>
     29                 <role>employees</role>
     30                 <role>managers</role>
     31             </roles>
     32         </security-constraint>
     33          -->
     34     </security>
     35 
     36     <channels>
     37 
     38         <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
     39             <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
     40         </channel-definition>
     41 
     42         <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
     43             <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
     44             <properties>
     45                 <add-no-cache-headers>false</add-no-cache-headers>
     46             </properties>
     47         </channel-definition>
     48 
     49         <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
     50             <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
     51             <properties>
     52                 <polling-enabled>true</polling-enabled>
     53                 <polling-interval-seconds>4</polling-interval-seconds>
     54             </properties>
     55         </channel-definition>
     56         <channel-definition id="my-longpolling-amf" class="mx.messaging.channels.AMFChannel">
     57             <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
     58             <properties>
     59                 <polling-enabled>true</polling-enabled>
     60                 <polling-interval-seconds>5</polling-interval-seconds>
     61                 <wait-interval-millis>60000</wait-interval-millis>
     62                 <client-wait-interval-millis>1</client-wait-interval-millis>
     63                 <max-waiting-poll-requests>200</max-waiting-poll-requests>
     64             </properties>
     65         </channel-definition>   
     66         <channel-definition id="my-streaming-amf"  
     67             class="mx.messaging.channels.StreamingAMFChannel">  
     68             <endpoint  
     69                 url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf"  
     70                 class="flex.messaging.endpoints.StreamingAMFEndpoint" />  
     71             <properties>  
     72                 <idle-timeout-minutes>0</idle-timeout-minutes>  
     73                 <max-streaming-clients>100</max-streaming-clients>  
     74                 <server-to-client-heartbeat-millis>1000  
     75                 </server-to-client-heartbeat-millis>  
     76                 <user-agent-settings>  
     77                     <!--  
     78                         MSIE 5, 6, 7 default max number of permanent HTTP connections is  
     79                         2.  
     80                     -->  
     81                     <user-agent match-on="MSIE" kickstart-bytes="2048"  
     82                         max-streaming-connections-per-session="1" />  
     83                     <!-- MSIE 8 max number is 6. -->  
     84                     <user-agent match-on="MSIE 8" kickstart-bytes="2048"  
     85                         max-streaming-connections-per-session="5" />  
     86                     <!-- Firefox 1, 2 max number is 2. -->  
     87                     <user-agent match-on="Firefox" kickstart-bytes="2048"  
     88                         max-streaming-connections-per-session="1" />  
     89                     <!-- Firefox 3 max number is 6. -->  
     90                     <user-agent match-on="Firefox/3" kickstart-bytes="2048"  
     91                         max-streaming-connections-per-session="5" />  
     92                     <!-- Safari 3, 4 max number is 4. -->  
     93                     <user-agent match-on="Safari" kickstart-bytes="2048"  
     94                         max-streaming-connections-per-session="3" />  
     95                     <!-- Chrome 0, 1, 2 max number is 6. -->  
     96                     <user-agent match-on="Chrome" kickstart-bytes="2048"  
     97                         max-streaming-connections-per-session="5" />  
     98                     <!-- Opera 7, 9 max number is 4.-->  
     99                     <user-agent match-on="Opera" kickstart-bytes="2048"  
    100                         max-streaming-connections-per-session="3" />  
    101                     <!-- Opera 8 max number is 8. -->  
    102                     <user-agent match-on="Opera 8" kickstart-bytes="2048"  
    103                         max-streaming-connections-per-session="7" />  
    104                     <!-- Opera 10 max number is 8. -->  
    105                     <user-agent match-on="Opera 10" kickstart-bytes="2048"  
    106                         max-streaming-connections-per-session="7" />  
    107                 </user-agent-settings>  
    108             </properties>  
    109         </channel-definition> 
    110         <!--
    111         <channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel">
    112             <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/>
    113         </channel-definition>
    114 
    115         <channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel">
    116             <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/>
    117             <properties>
    118                 <add-no-cache-headers>false</add-no-cache-headers>
    119             </properties>
    120         </channel-definition>
    121         -->
    122     </channels>
    123 
    124     <logging>
    125         <target class="flex.messaging.log.ConsoleTarget" level="Error">
    126             <properties>
    127                 <prefix>[BlazeDS] </prefix>
    128                 <includeDate>false</includeDate>
    129                 <includeTime>false</includeTime>
    130                 <includeLevel>false</includeLevel>
    131                 <includeCategory>false</includeCategory>
    132             </properties>
    133             <filters>
    134                 <pattern>Endpoint.*</pattern>
    135                 <pattern>Service.*</pattern>
    136                 <pattern>Configuration</pattern>
    137             </filters>
    138         </target>
    139     </logging>
    140 
    141     <system>
    142         <redeploy>
    143             <enabled>false</enabled>
    144             <!-- 
    145             <watch-interval>20</watch-interval>
    146             <watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
    147             <watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file>
    148             <watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
    149             <watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
    150             <watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file>
    151             <touch-file>{context.root}/WEB-INF/web.xml</touch-file>
    152              -->
    153         </redeploy>
    154     </system>
    155 
    156 </services-config>
    View Code

    基本的配置差不多都好了,当然你得加入jar包。下面就开始编写代码部分。代码是网上拷贝的,自己懒得写了。

    创建实体类,模拟用,其实你可以这返回一句话。

     1 package com.bing.vo;
     2 
     3 public class MyEntity {
     4     private String frstName;
     5     private String lastName;
     6     private String emailAddress;
     7 
     8     public String getFirstName() {
     9         return frstName;
    10     }
    11 
    12     public void setFirstName(String frstName) {
    13         this.frstName = frstName;
    14     }
    15 
    16     public String getLastName() {
    17         return lastName;
    18     }
    19 
    20     public void setLastName(String lastName) {
    21         this.lastName = lastName;
    22     }
    23 
    24     public String getEmailAddress() {
    25         return emailAddress;
    26     }
    27 
    28     public void setEmailAddress(String emailAddress) {
    29         this.emailAddress = emailAddress;
    30     }
    31 }

    创建service接口类及其实现类。

    package com.bing.service;
    
    public interface MyService {
        String getMyEntities();   
    }
     1 package com.bing.service;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.springframework.flex.remoting.RemotingDestination;
     7 import org.springframework.flex.remoting.RemotingInclude;
     8 import org.springframework.stereotype.Component;
     9 
    10 import com.bing.vo.MyEntity;
    11 import com.thoughtworks.xstream.XStream;
    12 @Component("myService")
    13 @RemotingDestination(channels = { "my-amf" })
    14 public class MyServiceImpl implements MyService {
    15 
    16     @Override
    17     @RemotingInclude
    18     public String getMyEntities() {
    19         List<MyEntity> list = new ArrayList<MyEntity>();
    20         MyEntity entity = new MyEntity();
    21         entity.setFirstName("Hello");
    22         entity.setLastName("World");
    23         entity.setEmailAddress("hello@world.com");
    24         list.add(entity);
    25         MyEntity entity2 = new MyEntity();
    26         entity2.setFirstName("你好");
    27         entity2.setLastName("jone");
    28         entity2.setEmailAddress("hello@space.com");
    29         list.add(entity2);
    30         XStream x=new XStream();
    31         x.alias("vo", MyEntity.class);
    32         System.out.println(x.toXML(list));
    33         return x.toXML(list);
    34     }
    35 
    36 }

    后台代码基本搞定,就是返回一个xml的对象字符串。中间用了一下Xstream这个jar工具。发布一下项目到tomcat下,然后启动看看……

    前台就简单了,打开flash builder,创建一个flash项目,和上一篇例子基本一样。不过这里我把输出的路径改到tomcat下了。

    然后编写成徐代码:进行测试

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
     3                xmlns:s="library://ns.adobe.com/flex/spark" 
     4                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
     5     <fx:Script>
     6         <![CDATA[
     7             import mx.controls.Alert;
     8             import mx.messaging.ChannelSet;
     9             import mx.messaging.channels.StreamingAMFChannel;
    10             import mx.messaging.messages.IMessage;
    11             import mx.rpc.events.FaultEvent;
    12             import mx.rpc.events.ResultEvent;  
    13             
    14             
    15             private function dotest():void {
    16                 //var myStreamingAMF:StreamingAMFChannel = new StreamingAMFChannel("my-amf", "/blazedsfirst/messagebroker/amf");
    17                 
    18             /*    var myStreamingAMF:StreamingAMFChannel=new StreamingAMFChannel(); 
    19                 var channelSet:ChannelSet=new ChannelSet(); 
    20                 channelSet.addChannel(myStreamingAMF);
    21                 remoteObject.channelSet=channelSet;*/
    22                 remoteObject.getMyEntities();
    23             }
    24             // Handle the recevied message.
    25             private function resultHandler(event:ResultEvent):void {
    26                 Alert.show(event.result.toString());
    27             }
    28             
    29             // Handle a message fault.
    30             private function faultHandler(event:FaultEvent):void {
    31                 Alert.show("Received fault: " + event.fault);
    32             }
    33             
    34         ]]>
    35     </fx:Script>
    36     <fx:Declarations>
    37         <s:RemoteObject id="remoteObject" 
    38                         destination="myService" 
    39                         result="resultHandler(event);"
    40                         fault="faultHandler(event);"/>
    41         
    42         
    43     </fx:Declarations>
    44     
    45     <s:layout>
    46         <s:VerticalLayout gap="0" horizontalAlign="center"  paddingTop="50"/>
    47     </s:layout>
    48     <s:Label text="测试spring集成remote"/>
    49     <s:Button label="Send" click="dotest();"/>
    50     
    51      
    52 </s:Application>

    直接运行进行测试,弹出结果如下:

    <list>
      <vo>
        <frstName>Hello</frstName>
        <lastName>World</lastName>
        <emailAddress>hello@world.com</emailAddress>
      </vo>
      <vo>
        <frstName>你好</frstName>
        <lastName>Space</lastName>
        <emailAddress>hello@space.com</emailAddress>
      </vo>
     </list>

    下一篇我将介绍一下,push推送技术,如何利用spring和blazeds实现。

  • 相关阅读:
    利用python 学习数据分析 (学习四)
    numpy 模块常用方法
    利用python 学习数据分析 (学习三)
    numpy 常用方法2
    瞎JB逆
    Codeforces 907 矩阵编号不相邻构造 团操作状压DFS
    AT Regular 086
    矩阵快速幂 求斐波那契第N项
    指数循环节(指数降幂)
    Educational Codeforces Round 32
  • 原文地址:https://www.cnblogs.com/shizhongtao/p/3490037.html
Copyright © 2020-2023  润新知