`
xo_tobacoo
  • 浏览: 390909 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

spring(Blazeds)-flex中实现jms的持久化(durable)订阅

阅读更多

这几天用spring-flex做一个能够接收离线消息的Flex应用,在网上找了很多资料,但是都没提到如何实现离线消息,最后在blazeds的开发文档里找到了如何让blazeds message service实现持久化订阅JMS消息。但是还是找不到在spring-flex里如何配置,最后只能两个并用了,下面把过程贴上来给大家看看!

环境: 

JMS服务器: activemq5.2
spring-flex 1.0
blazeds

1、首先是在tomcat中配置JMS服务器信息:
在应用根目录下/META-INF/context.xml(没有可以自己创建)中增加如下内容:

  1. < Context   antiJARLocking = "true" >  
  2.      < Resource  
  3.          name = "jms/flex/ActiveMqConnectionFactory"  
  4.          auth = "Container"  
  5.          type = "org.apache.activemq.ActiveMQConnectionFactory"  
  6.          description = "JMS Connection Factory"  
  7.          factory = "org.apache.activemq.jndi.JNDIReferenceFactory"  
  8.          brokerURL = "tcp://localhost:61616"  
  9.          brokerName = "LocalActiveMQBroker"  
  10.          useEmbeddedBroker = "false" />  
  11.  
  12.      < Resource   name = "jms/JMSChat"  
  13.          auth = "Container"  
  14.          type = "org.apache.activemq.command.ActiveMQTopic"  
  15.          factory = "org.apache.activemq.jndi.JNDIReferenceFactory"  
  16.          physicalName = "stockQuoteTopic" />  
  17. </ Context >  

2、在web.xml文件中增加如下内容:

  1. < resource-ref >  
  2.          < description > Connection Factory </ description >  
  3.          < res-ref-name > jms/flex/ActiveMqConnectionFactory </ res-ref-name >  
  4.          < res-type > javax.jms.QueueConnectionFactory </ res-type >  
  5.          < res-auth > Container </ res-auth >  
  6.      </ resource-ref >  
  7.  
  8.      < resource-env-ref >  
  9.          < resource-env-ref-name > jms/JMSChat </ resource-env-ref-name >  
  10.          < resource-env-ref-type > javax.jms.Topic </ resource-env-ref-type >  
  11.      </ resource-env-ref >  

3、接下来是配置Blazeds的message service

  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>  
  2. < service   id = "message-service"   class = "flex.messaging.services.MessageService" >  
  3.      < adapters >  
  4.          < adapter-definition   id = "actionscript"   class = "flex.messaging.services.messaging.adapters.ActionScriptAdapter"   default = "true"   />  
  5.          < adapter-definition   id = "jms"   class = "flex.messaging.services.messaging.adapters.JMSAdapter" />  
  6.      </ adapters >  
  7.      < destination   id = "JMSChat" >  
  8.          < properties >  
  9. <!--这里的配置是最关键的,只有durable 属性设计为true才能实现持久化订阅-->
  10.              < server >  
  11.                 < durable > true</ durable >  
  12.             </ server >  
  13.              < jms >  
  14.                  < destination-type > Topic </ destination-type >  
  15.                  < message-type > javax.jms.TextMessage </ message-type >  
  16.                  < connection-factory > java:comp/env/jms/flex/ActiveMqConnectionFactory </ connection-factory >  
  17.                  < destination-jndi-name > java:comp/env/jms/JMSChat </ destination-jndi-name >  
  18.                  < delivery-mode > PERSISTENT </ delivery-mode >  
  19.                  < message-priority > DEFAULT_PRIORITY </ message-priority >  
  20.                  < acknowledge-mode > AUTO_ACKNOWLEDGE </ acknowledge-mode >  
  21.                  < initial-context-environment >  
  22.                      < property >  
  23.                          < name > Context.INITIAL_CONTEXT_FACTORY </ name >  
  24.                          < value > org.apache.activemq.jndi.ActiveMQInitialContextFactory </ value >  
  25.                      </ property >  
  26.                      < property >  
  27.                          < name > Context.PROVIDER_URL </ name >  
  28.                          < value > tcp://localhost:61616 </ value >  
  29.                      </ property >  
  30.                  </ initial-context-environment >  
  31.              </ jms >  
  32.          </ properties >  
  33.          < channels >  
  34.              < channel   ref = "my-polling-amf" />  
  35.              < channel   ref = "my-streaming-amf" />  
  36.          </ channels >  
  37.          < adapter   ref = "jms" />  
  38.      </ destination >  
  39.  
  40. </ service >  

 4、前端Flex聊天室代码

  1. <? xml   version = "1.0"   encoding = "utf-8" ?>  
  2. < mx:Application   creationComplete = "init()"    xmlns:mx = "http://www.adobe.com/2006/mxml"   fontSize = "12" >  
  3.      < mx:Script >  
  4.          <![CDATA[  
  5.             import mx.controls.Alert;  
  6.             import mx.messaging.messages.AsyncMessage;  
  7.             import mx.messaging.messages.IMessage;  
  8.             import flash.external.ExternalInterface;     
  9.               
  10.             //以下代码向浏览器反向插入js方法监听浏览器关闭事件  
  11.             private function init():void{  
  12.                 ExternalInterface.call(FUNCTION_USEREXIT);     
  13.                 ExternalInterface.addCallback("checkExit",checkExit);  
  14.             }  
  15.             //关闭浏览器时退出  
  16.             public function checkExit():String {     
  17.                       logout();  
  18.                       var userExitStr:String = "你已经离开聊天室,下次再见!";     
  19.                       return userExitStr;     
  20.             }  
  21.               
  22.             //监听浏览器关闭事件函数  
  23.             private static var FUNCTION_USEREXIT:String =      
  24.                 "document.insertScript = function () " +     
  25.                 "{ " +     
  26.                     "window.onbeforeunload = function() " +     
  27.                     "{ " +     
  28.                         "var flexObj = JMSChat.checkExit(); " +//JMSChat是swf在html中object的id     
  29.                         "if(flexObj != \"\") " +     
  30.                         "{ " +     
  31.                             "return flexObj; " +     
  32.                         "}else{ " +     
  33.                             "return; " +     
  34.                         "} " +     
  35.                     "} " +     
  36.                 "} ";    
  37.                   
  38.               
  39.             private function login():void{  
  40.                 //订阅主题的时候带上一个唯一ID,jms服务器会记录ID,在下次登录时发送离线消息  
  41.                 if(userName.text==""){  
  42.                     Alert.show("请输入您的用户名");  
  43.                 }else{  
  44.                     consumer.subscribe(userName.text);  
  45.                     userName.enabled=false;  
  46.                 }  
  47.             }  
  48.               
  49.             private function logout():void{  
  50.                 //退订消息的时候,true表示在jms服务器端记录离线消息,flase的时候将不记录离线消息  
  51.                 consumer.unsubscribe(true);  
  52.                 userName.text="";  
  53.                 userName.enabled=true;  
  54.             }  
  55.  
  56.             private function send():void  
  57.             {  
  58.                 var message:IMessage = new AsyncMessage();  
  59.                 if(userName.enabled){  
  60.                     Alert.show("您还未登录!");  
  61.                 }else{  
  62.                     message.body=userName.text+" : "+ msg.text;  
  63.                     producer.send(message);  
  64.                     msg.text = "";  
  65.                 }  
  66.             }  
  67.                               
  68.             private function messageHandler(message:IMessage):void  
  69.             {  
  70.                 chatRoom.text += message.body+ "\n";      
  71.             }  
  72.         ]]>  
  73.      </ mx:Script >     
  74.      < mx:ChannelSet   id = "cs" >  
  75.          < mx:AMFChannel   url = "http://192.168.0.109:8080/FlexJms/messagebroker/amflongpolling" />  
  76.          < mx:AMFChannel   url = "http://192.168.0.109:8080/FlexJms/messagebroker/amfpolling" />  
  77.      </ mx:ChannelSet >  
  78.      < mx:Producer   id = "producer"   destination = "JMSChat"   channelSet = "{cs}" />  
  79.      < mx:Consumer   id = "consumer"    destination = "JMSChat"   channelSet = "{cs}"  
  80.           message = "messageHandler(event.message)" />  
  81.       
  82.      < mx:Panel   title = "聊天室"   width = "100%"   height = "100%" >  
  83.          < mx:TextArea   id = "chatRoom"   width = "100%"   height = "100%" />  
  84.          < mx:ControlBar >  
  85.               < mx:Label   text = "用户名" />  
  86.               < mx:TextInput   id = "userName"   />  
  87.               < mx:TextInput   id = "msg"   width = "100%"   enter = "send()" />  
  88.               < mx:Button   label = "发送"   click = "send()" />    
  89.               < mx:Button   label = "登陆"   click = "login()" />    
  90.               < mx:Button   label = "退出"   click = "logout()" />  
  91.               < mx:Button   label = "清屏"   click = "chatRoom.text=''" />    
  92.          </ mx:ControlBar >  
  93.      </ mx:Panel >  
  94.       
  95. </ mx:Application >  

 以下是截图:

 test

test2

这个时候我们“退出test”, 然后用test2发送多条信息!

 test22

过两分钟后我们再用test登录:

test12

 

这就简单的实现了离线消息的发送。下图是activemq控制台上持久消息订阅用户信息图:
可通过http://localhost:8161/admin 查看.

 acivetest

这里记录了JMS信息的持久订阅者及等发送信息等内容。

分享到:
评论
1 楼 lmh395174704 2010-10-12  
只会照抄。哪有用到spring的配置。

相关推荐

    Flex blazeds-spring

    Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring Flex blazeds-spring

    spring-flex-1.5.0.M2-dist.zip

    在Spring Flex 1.5.0.M2中,核心组件`spring-flex-1.5.0.M2.jar`扮演了关键角色,它是Spring和Flex集成的核心库,提供了诸如消息代理、配置支持和Spring服务代理等功能。这个库使得Flex客户端可以轻松地调用Spring...

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

    在Spring BlazeDS Integration中,BlazeDS是Adobe提供的一个开源服务器端组件,它作为中间件,处理Flex客户端与Spring应用服务器之间的数据传输。BlazeDS支持AMF(Action Message Format),这是一种高效的二进制...

    spring-blazeds-reference.rar_blazeds-bin-4._flex

    BlazeDS是Adobe提供的一个中间件,用于实现Spring和Flex之间的通信。它提供了AMF(Action Message Format)协议,可以高效地传输数据,减少网络延迟。BlazeDS通过HTTP和WebSocket等协议,将Spring服务暴露为Remoting...

    spring-flex-1.0.1.RELEASE

    Spring Flex 将 Spring MVC 模型与 Flex 应用程序中的数据模型进行绑定,通过 BlazeDS 或 LCDS 实现 AMF 通信。 三、Spring Flex 组件结构 1. `flex-messaging-spring`:这是 Spring Flex 的核心模块,它包含 ...

    blazeds-bin-3.3.0.22497.zip

    这个版本“blazeds-bin-3.3.0.22497.zip”是BlazeDS的一个特定发行版,包含了运行和部署BlazeDS所需的所有组件。 在解压后的文件中,我们看到两个关键文件: 1. **blazeds.war**:这是一个Web应用归档文件(Web ...

    spring-flex集成-demo

    3. **Spring-BlazeDS Integration**:在Spring Flex项目中,通常会使用BlazeDS作为中间件,它是一个免费的数据和消息传递服务器,允许Flex客户端与Spring应用服务器进行通信。BlazeDS提供了Remoting和 Messaging服务...

    Spring BlazeDS Integration 1.0.0

    开发者还需要理解如何在Spring中创建可被Flex调用的服务端bean。 7. **安全考虑**:在使用Spring BlazeDS Integration时,应考虑数据安全和访问控制。Spring的安全组件可以与BlazeDS集成,以实施身份验证和授权策略...

    blazeds-bin-4.0.1.17657.zip

    Blazeds是一个强大的工具,主要用于实现Flex客户端与Java后端之间的通信。这个“blazeds-bin-4.0.1.17657.zip”压缩包包含了BlazDS的二进制版本,这是一个开放源代码的服务器端技术,由Adobe开发并广泛应用于构建富...

    spring-flex官方文档

    ##### 2.3 在Spring中配置Message Broker 为了实现Spring与BlazeDS之间的集成,还需要在Spring配置文件中定义BlazeDS的Message Broker。这通常涉及到以下步骤: - 定义一个`org.springframework.messaging.simp....

    Spring BlazeDS + flex

    为了实现Java后端与Flex前端的无缝连接,Adobe开发了一款名为BlazeDS的中间件。本文将详细介绍如何利用Spring、BlazeDS和Flex进行集成开发。 #### 二、Spring、BlazeDS与Flex的基本概念 ##### 2.1 Spring概述 ...

    blazeds-bin-4.0.0.15974.zip

    4. **数据服务**:RemoteObject、LiveCycle Data Services (LCDS) 和 Flex Data Services (FDS) 提供了丰富的数据访问和服务调用功能,可以轻松地与Java的持久化框架如Hibernate、Spring等集成。 5. **Flex到Java的...

    blazeds-turnkey-4.0.0.14931

    BlazeDS是Adobe公司开发的一款开源项目,它主要提供了一个基于服务器的解决方案,用于实现Java应用程序与客户端的Flex应用之间的远程调用(Remoting)和Web消息传递(Messaging)。这个项目的目标是帮助开发者构建富...

    spring-flex-core-1.5.0.M1.jar

    Spring BlazeDS Integration

    blazeds-core-3.2.0.3978.jar

    blazeds-core-3.2.0.3978.jar blazeds-core-3.2.0.3978.jar

    最简单的BlazeDS实现flex与java通信.rtf

    最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的...

    flex-spring-blazeds demo

    2. 在Spring中定义服务接口和实现,利用依赖注入提供给Flex客户端。 3. 在Flex中创建用户界面,通过BlazeDS调用Spring服务。 4. 理解AMF数据传输的优势,以及如何优化Flex与Java之间的数据交换性能。 5. 实践Spring...

    spring-flex-reference

    MessageTemplate是Spring中的一个工具类,用于简化发送AMF消息的过程。 #### 六、构建和运行Spring BlazeDS Integration示例 **构建测试环境:** 1. **搭建开发环境**:确保安装了必要的开发工具,如IDE、Java ...

    spring+blazeDS+flex4 例子

    Spring、BlazeDS和Flex4的结合,正是实现这一目标的强大工具组合。本篇文章将深入探讨这三者之间的整合,并通过一个实际的项目示例来展示它们如何协同工作,以实现数据的动态交互和页面的高效渲染。 首先,Spring是...

Global site tag (gtag.js) - Google Analytics