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 名字 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |