flex4 + spring + blazeds , 使用anonation(注解)机制,利用push技术的实现例子和过程。

实现目标:java做后台service,每隔300毫秒,生成一个uuid,以 testJob做为订阅关键词,发布给所有订阅此关键词的flex客户端。

 

配置过程和源码:

 

1.修改blazeds自动生成的WEB-INF/flex/services-config.xml文件。由于原来没有polling-amf的定义,所以需要加入。代码如下:

 

2.在spring的配置文件中定义 defaultMessageTemplate class="org.springframework.flex.messaging.MessageTemplate"

 

之所以要定义这个bean,是为了在做service的时候。可以用注解@Autowired来引入这个MessageTemplate的实例。

3.在web.xml中定义spring和flex的集成。这个配置是使用spring和flex集成时候的配置,和push技术无关。

 

4.由于web.xml配置中引入了WEB-INF/classes/META-INF/springFlex.xml这个文件,所以在springFlex.xml文件中进行详细配置

5.springFlex.xml文件如下,主要是定义flex:message-destination ,既是监听的数据的关键词

 

6.编写后台推送的java service bean:

 

注意:这里使用了@Service,@@RemotingDestination 注解和 @Autowired    MessageTemplate template; 这样就避免了在spring中利用配置文件进行定义bean。

如果要使用spring 配置文件来定义。可以参考下面代码(来自blazeds的官方例子中的spring配置文件)

 

 

 

 

具体的业务实现是在 内联线程类FeedThread 里面的run()中实现。

 

这要做的目标是为了让这个线程启动,是一定要通过flex的一个客户端连上来,才能启动。而不能随着spring context启动而启动。否则会报告messageBroke没有设置在flexContext之类的错误。

 

那么:如果我们想后台在没有任何一个客户端连上来的情况下,也要启动这个发送服务应该如何做?

典型场景: 后台web应用启动,并且定义了一个定时器。每隔 5s 进行一个逻辑处理,然后把处理结果发送给前台 flex(无论是否有felx客户端连上)

 

这就需要用下面代码:

 

这个work2 方法可以通过 quartz或者spring 的@Scheduled注解来进行定时器调用。

主要的关键代码是 

 MessageBroker msgBroker = MessageBroker.getMessageBroker("_messageBroker");  

 

这个就是获得一个 _messageBroker的实例。"_messageBroker"字符串是由 <flex:message-broker > 标签中的id来指定。

如果没有id 指定,则缺省使用 “"_messageBroker"”这个字符串

 

 

7.前台的订阅flex程序:

 

其中关键代码是:

 

注意:

<s:StreamingAMFChannel uri="/Aerie/messagebroker/streamingamf"/>

<s:AMFChannel uri="/Aerie/messagebroker/amflongpolling"/>

<s:AMFChannel uri="/Aerie/messagebroker/amfpolling"/>

这三个通道的设置中用到的

 Aerie是代表context名字。

messagebroker 是代码 web.xml中的配置的MessagebrokerServlet中的url-pattern

amfpolling 等是指 在services-config.xml文件中设置的 channel-definition 下的endpoint 名字

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值