杨国梁 王纯 廖建新 武家春
摘要:简要介绍了手机报系统的结构和功能划分,提出了基于Java技术的手机报系统的实现方案,设计了承载多种通信协议的消息容器,业务功能灵活加载的机制,满足了手机报系统的高性能和灵活扩展的要求。
关键字:手机报;增值业务;数据持久化
1.引言
随着中国电信市场向3G的逐步迈进,移动数据增值业务[1]越来越成为业界关注的焦点。手机报业务是一种适应2.5G并面向3G的新型业务。它是将纸媒体的新闻内容,通过无线技术平台发送到用户的手机上,通过手机的移动性使用户随时随地阅读到当天报纸报刊内容。手机报业务的“手机报纸”目前主要是以WAP (Wireless Application Protocol)和MMS (Multimedia Messaging Service)的形式呈现给用户,用户可以通过网站、短信、WAP或者数据业务运营支撑系统(DBOSS: Data Business & Operations Support System)的方式订制报刊,也可以通过这些方式使用手机报业务的相关功能。
图1. 手机报系统平台结构图
图1简要介绍了手机报的平台结构,如图1中所示手机报系统使用多层分布式应用模型,前后台之间采用HTTP (Hyper Text Transfer Protocol)承载XML消息的方式通信,前后台各自的实现形式不会相互影响。
手机报后台服务处理系统,属于手机报的业务处理核心,通过后台服务处理系统外界的请求消息或后台服务处理系统自身内部的消息来触发手机报系统的相关业务。后台服务处理系统由四个层面构成,第一层为通信协议层,负责消息的解析与发送;第二层为业务支撑层,是用于维护业务和扩展业务的基础层,它是通信协议层和应用业务层的衔接层;第三层是具体的业务层,可以在支撑层上不断扩展;第四层是数据持久层,提供面向对象的数据操作。利用多层应用模型可以简化前台的处理流程,提高手机报系统的可维护性、稳定性和扩展性。
由于Java先天所具有的与平台无关性和面向对象性,并且Java可以很好地满足分布式系统的设计要求,因此手机报系统使用Java以及相关技术作为系统的实现工具。
2.系统设计概述
手机报系统按逻辑功能分为多个功能模块,由多个模块组成的手机报系统具有良好的可维护性、可复用性和可扩展性。手机报软件结构图如下图2所示:
图2.手机报软件结构图
-
门户WAP/WW网站:采用SUN官方推荐的Tomcat作为网站的Web容器。
-
消息处理模块:通信协议层的主要实现模块。为系统维护了与多种协议客户端之间消息的交互,是手机报系统后台与外界通信的主要枢纽之一。
-
HTTP处理模块:通信协议层的实现子模块。接收并处理外界的HTTP业务请求,根据业务关键字来获得具体的业务实例。
-
日志管理模块:业务支撑层的子模块。记录在整个业务流程中的所有详细日志。通过使用LOG4J技术为系统提供完整、准确的日志信息。
-
配置管理模块:业务支撑层的子模块。系统中为了实现各模块灵活控制,将一些重要的参数通过配置管理的方式实现托管。通过配置管理的形式,利用Java的反射技术,可以实现业务的在线加载,更新等功能。
-
数据缓存管理模块:业务支撑层的子模块。手机报系统提供了一套数据缓存管理方案,其具有LRU (Least Recently Used)和FIFO (First In, First Out)的数据缓存策略。使用数据缓存可以减少不必要的数据库操作开销,加快系统的执行速度,也可以达到提高系统服务性能的目的。
-
业务代理:应用业务层的子模块。是系统与外界请求交流的门户。通过该代理实例(MPSProxy)向用户提供手机报具体业务的代理服务。
-
业务处理模块:具体的业务实现模块。是系统的业务会话产生,执行和回收的核心模块。
-
数据持久层:为手机报系统提供了一套完整的面向对象的数据持久化的解决方案。整个系统在设计之初,就以系统的高性能和扩展性为设计目标,设计时倡导敏捷开发的原则[2],通过模块分工实现系统的高可复用性和可维护性。
3.主要设计实现
3.1业务模式的实现
实现系统的可扩展性,包括业务的扩展和系统的平台的扩展性,很重要的一点就是要在关键点处将重要关系分离。Proxy模式[3]定义了一个代理主题和真实主题的共同抽象接口,通过使用代理主题作为真实主题的引用,从而达到重要关系分离的设计目的。系统中通过Proxy模式分离了业务实现和业务使用之间的紧耦合关系。手机报系统业务Proxy模式的静态模型如图3所示:
图3. 业务Proxy模式的静态模式图
如图3所示,MPSProcessor为一个抽象接口,定义了手机报系统的基本业务功能。MPUserCenter是该接口的具体实现类,即系统业务的真实主题。通过代理主题类MPSProxy对外界提供具体业务的代理访问,同时MPSProxy也是一种智能引用代理,在MPSProxy中添加了一些附加功能,包括业务访问锁的分配和回收,业务访问量的统计等。
图4. 业务逻辑序列图
图4给出的是整个手机报系统开户的业务逻辑序列图,通过开户业务来了解手机报系统的业务活动流程。从图中发现,系统的业务流程中还包括User和Transaction两个要素,User接口抽象了手机报系统的用户,而Transaction接口抽象为了手机报系统的各种业务实例。开户请求被派发到MPSProxy代理后,将由MPUserCenter去具体实施。在此,MPUserCenter充当了用户管理中心的角色,外界请求在MPUserCenter中将会对应到具体的User,通过User实例去触发Transaction相应的开户实例。整个系统在设计上体现了面向对象的设计思路,运用良好的设计模式来满足手机报系统的扩展能力。
3.2关键技术的实现
手机报系统可以受理多种业务请求,在对不同请求的维护和处理需要有专门的容器替系统去实现。对于HTTP方式的请求可以利用现在通用的Servlet容器去实现,而对于类似CMPP/DBOSS方式的请求,系统给出了一个专门的解决方案。
消息处理模块是手机报系统后台的多种通信协议消息的承载容器,负责响应业务的请求消息,维护系统的请求消息,处理后台的发送请求,并有请求响应的超时管理机制,以及具备负载控制的功能。消息处理模块的核心类包括: Agent、 MsgEngine、 MsgManager、 MsgProxy、 ThreadPool, 并以Java 5.0的java.util.concurrent包为基础而开发的。
Agent是与协议客户端的交互类,Agent在收到消息后应能及时通知系统处理消息。为此系统引入Observer的模式,Observer模式定义了一种一对多的依赖关系,可以让多个观察者同时监听某一个被观察者对象。MsgEngine即为Agent的消息观察者,MsgEngine通过ThreadPool线程管理器实现请求的多线程处理。MsgProxy是后台消息下发的代理类,通过MsgProxy代理类系统能够主动与协议客户端通信。为了防止请求对响应的无限期等待,系统通过MsgManager定义了一个超时管理机制,使用MsgManager能够发现已无效的请求,并触发相应的方案进行处理。
整个容器设计精巧,能满足异步通信和多线程的处理要求,同时配有消息管理机制和负载控制机制,对手机报系统性能上的提高是至关重要的一环。
4.面向对象的数据持久层解决方案
4.1Hibernate技术
面向对象开发方法是当今软件开发的主流,但是在开发企业应用时需要使用关系数据库,所以在企业应用开发时,对象关系的映射是面向对象开发过程不可缺少的环节。围绕对象关系的映射和持久数据的访问,在Java领域中有许多这类的API和框架。手机报系统在对于这方面的问题采用了Hibernate的解决方案。
Hibernate是对象/关系映射的解决方案,即ORM (Object/Relational Mapping)。Hibernate提供与数据库无关的实现方案,程序员只要定义好数据持久化对象和数据库表之间的映射就可以方便的使用面向对象的开发方法,而不用在系统中嵌入难以维护的SQL语句。
4.2面向对象的数据持久层设计
数据持久层按照功能可分为两部分:PO (Persistent Object)和DAO (Data Access Object),即数据持久化对象和数据访问对象。PO为手机报系统数据库表经过对象/关系影射之后的Java对象,一个PO对象既为数据库中的一条记录,这种一一对应的关系由Hibernate来进行映射。将数据库表转化为PO需要很大的工作量,好在现在Java领域中已经有许多的对象/关系映射的转换工具,因此系统数据持久层设计的工作重心集中在DAO部分。
DAO将数据访问的实现加以封装,与数据的使用代码相分离,从使用者的角度看,DAO提供了黑盒式的存取接口。DAO通过调用Hibernate提供的数据访问接口能够轻松实现在各种数据库上的访问,从而实现对PO的数据库操作。
为了不让业务层依赖于DAO的具体实现,系统采用了Factory的设计模式,这种模式允许使用者只依赖于抽象接口就能创建出具体对象的实例,同时手机报系统使用Java的反射技术,通过配置管理模块可以实现DAO的实现工厂的动态装入技术。通过这种技术,可以方便地使用新的数据访问接口热替换现有的数据访问接口。
5.结束语
本文提出了基于Java技术的手机报系统的设计、实现方案。手机报系统的模块化结构有效地解决了系统的软件模块重用以及系统自身的发展性和扩展性问题,而且手机报系统提供业务访问锁和多线程的业务处理机制,为系统的可维护性和高性能要求提供了支持。但此方案未能满足手机报系统的高可用性和容错能力的要求,缺乏软件不间断运行的保障机制,这些问题将是下一步的设计与实现的工作内容。
参考文献:
[1]廖建新,移动数据增值业务的发展,中国数据通信,2004年6月 Vol.6 No.6 P.25-27
[2]Robert C. MARTIN, Agile Software Development Principles, Patterns, and Practices, Pearson Education, November 2002
[3]Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison Wesley Longman, Inc, January 15, 1995
|