之前写过一篇文章:flex+blazeds+java后台消息推送(简单示例) ,现在要写的是这个的升级版,改动还是挺多的,在上面的基础上增加了spring配置,还有界面的维护。后台基本上全变了。呵呵 。。。下面看实现过程
大体的思路是:服务器启动时,查询数据库获取为推送的消息,存储到内存中,定义了一个全局变量MESSAGE_LIST,集合类型。以后的每次维护,包括 (增、删、改),都同时维护两份,及数据库和内存,保证两者的一致。当一条消息推送完成,即从MESSAGE_LIST中删除。
首先,添加spring的配置,在web-application-config.xml文件中添加
复制代码
没添加之前时:
复制代码
主要是为了在后台获取message-broker,services-config.xml的配置还是一样,不变。
然后,后台java类:
/** * 新增消息 * @param paramMessage * @return * @throws ServiceException * @throws SQLException * @author: IT氧吧 * @createDate: 2011-5-17 * @modifiedBy:IT氧吧 * @modifiedDate:2011-5-17 */ public String savePushMessage(PushMessage paramMessage) throws ServiceException SQLException { paramMessage.setStartDate(DateUtil.parseDate(paramMessage.getStartDateCN() DateUtil.YMDHMS_PATTERN)); paramMessage.setEndDate(DateUtil.parseDate(paramMessage.getEndDateCN() DateUtil.YMDHMS_PATTERN)); Date d = systemService.getDateFromDataBase(); if(paramMessage.getStartDate().compareTo(d) < 0 || paramMessage.getEndDate().compareTo(d) < 0){ throw new ServiceException("推送日期不能早于当前日期"); } if(paramMessage.getStartDate().compareTo(paramMessage.getEndDate()) > 0){ throw new ServiceException("推送起始日期不能晚于推送结束日期"); } /** 保存到数据库 */ Long messageId = systemService.savePushMessage(paramMessage); /** 添加到集合中 */ GlobalNames.MESSAGE_LIST.add(paramMessage); /** 集合重新排序 降序 Comparator comparator = new Comparator(){ @Override public int compare(PushMessage o1 PushMessage o2) { return o1.getStartDate().compareTo(o2.getStartDate()); } }; Collections.sort(GlobalNames.MESSAGE_LIST comparator); */ /** * 如果GlobalNames.MESSAGE_LIST没有消息,此时新增消息的时候就得推送,否则只是把消息添加到GlobalNames.MESSAGE_LIST并排序 * */ if(GlobalNames.MESSAGE_LIST.size() == 1){ PushMessageUtil.startPush(systemService); } return messageId.toString(); }