陈奕成1,2 李炜1,2 王晶1,2
1北京邮电大学网络与交换技术国家重点实验室,北京(100876)
2东信北邮信息技术有限公司,北京(100191)
摘要:能力开放平台的管理子系统主要负责平台中各类数据的维护与管理,其中数据同步模块是管理系统的一个重要组成部分。本文为管理子系统设计了一个耦合度低、可用性强的数据同步模块;并利用Web Service、Java技术实现了该模块,使之很好地运用到实际系统中。
关键词:OMP Web Service Axis2 数据同步
Design and Implementation of Data Synchronization Module of OMP Management Subsystem
Chen Yicheng1,2 Li wei1,2 Wang Jing1,2
[1] State Key Laboratory of Networking and Switching Technology, Beijing University of Posts and Telecommunications, Beijing (100876)
2 EBUPT Information Technology Co. Ltd., Beijing (100191)
Abstract: OMP's (Open Mobile Platform) management subsystem is mainly responsible for data maintenance and management between platform's subsystems. The data synchronization module is an important part of the management subsystem. A low coupling and high performance architecture for the data synchronization module is designed, and the module is implemented with Axis2, Java which is applied to the practical subsystem.
Key Words: OMP Web Service Axis2 Data Synchronization
1. 引言
能力开放平台是以提供业务能力开放(为各类能力提供标准化的接口[1]),并实现与能力开放相关的管理运营为主要功能的平台系统;其分为接入子系统,管理子系统,鉴权子系统,开发者门户等组成部分。其中管理子系统主要负责管理平台中各类数据,实现开发者管理、应用管理、能力管理、用户管理、订购关系管理等综合管理功能,同时提供各类信息管理的界面。
能力开放平台管理子系统要实现的一个主要功能就是完成管理子系统与其他子系统间的数据同步,进而确保各个子系统间相关业务数据的一致性,使整个平台系统正常稳定的运行。本文针对管理子系统与其他子系统间的数据关系,以及从降低软件模块的耦合度出发,设计并实现了一种可用性较强的数据同步模块。
2. 相关背景
2.1. 能力开放平台组成
图1显示了管理子系统与能力开放平台其他子系统间基于数据同步需求的关系。

图1 管理系统与其他系统间的关系图
从图1可以看出,管理子系统与多个系统间都存在着数据同步的需求,其中大部分的数据都是开放平台中的业务对象,如应用、能力、开发者等,同一个业务对象可能需要同步到多个其他子系统。只有在某一个业务对象创建、修改或者被删除时才产生数据同步的需要,本文将这种业务对象创建、修改或者被删除统称为对象的生命周期发生变化。
2.2. 传统实现
Web Service是基于网络的、分布式的模块化组件, 它执行特定的任务, 遵守具体的技术规范, 这些规范使得Web Service能与其他兼容的组件进行互操作。Web Service的主要目标就是在现有的各种异种平台的基础上构筑一个通用的平台无关、语言无关的技术层, 各种不同平台上的应用依靠这个技术层来实施彼此的连接和集成[2]。
利用Web Service,一种通常的实现是直接在业务逻辑中需要数据同步之处添加对Web Service服务方法的调用请求,并根据请求的可能结果(成功,异常,返回错误码等)进行对应处理。这样的设计将数据同步与系统内部的业务逻辑高度耦合在一起,使得模块的逻辑不够清晰,同时降低了模块的重用性,而且当需要同步到更多的系统或者同步的方法或方式发生变化时,需要去修改系统本身的业务逻辑代码,没有很好的可扩展性。
显然,这样的解决方案是十分不恰当的。
3. 数据同步模块的设计
3.1. 同步模块整体框架设计
当前,模块设计过程中,越来越多的考虑模块的重用性,以及可扩展性。通过结合上述背景,本文设计了如图2所示的数据同步模块整体框架。

图2 基于对象事件处理器的数据同步模块
当管理子系统内部的业务数据对象生命周期发生变化时将触发对象变化事件,事件交由对象事件处理器进行处理,处理器决定是否要进行数据同步,如果需要则由数据同步控制子模块来调用各个系统对应的Web Service方法进行数据同步,控制子模块根据同步结果做出不同的响应。
其中,事件处理器接受处理各类业务对象的生命周期变化事件,根据不同业务对象的特性来决定是否需要进行数据同步。而Web Service数据发送子模块就是传统意义上的Web Service请求。数据同步控制子模块将在下一部分详细介绍。
新方案通过引入数据同步模块,将数据同步处理逻辑与系统内部的其他业务逻辑相分离。避免了上述一般办法的缺点,使整个系统各模块功能独立清晰,且具有较强的可扩展性[3]。
3.2. 数据同步控制子模块
管理子系统在用Web Service进行数据同步的过程中,会出现连接超时,网络故障以及其他一些异常。数据同步过程中的这些异常将导致管理子系统与其他子系统间的数据出现不一致,这有可能使整个能力开放平台发生一些未知错误,影响整个系统的正常运行。因此异常的处理在整个数据同步模块中十分重要。
本文针对管理系统对不对数据对象同步的实时性要求不同,设计出如图3所示的异常处理流程。

图3 异常处理主要流程
根据图3中的处理逻辑,数据同步控制子模块均将返回数据得到正确同步的信息,否则将以运行时异常的方式直接通知当前的系统使用人员。这样,除了数据同步控制子模块,其他模块部分均无需考虑数据同步成功与否的因素,将影响范围缩至最小。
之所以能够对数据同步过程中不可处理的异常和错误响应码直接抛出运行时异常,是由于这些情况都将导致之后的业务逻辑无法继续进行,必须直接反馈给使用人员。例如,一个开发者订购能力时对应的订购关系对象无法正确同步到鉴权子系统,必须立即通知给开发者,告诉其订购失败;管理系统的业务逻辑不能够进行处理,给开发者以订购成功的假象,这将导致开发者之后的使用能力造成错误。而能够处理的错误码或者异常是指这样的情况,数据同步不要求很强的实时性,经过处理后可以得到正确解决或者可以在之后的某一个时间再次对该数据进行同步而不影响结果。例如,应用信息同步到接入系统时,由于当前网络拥堵发生了超时异常,可以通过记录该对象的同步失败,而后通过定时机制重新同步该应用信息。
4. 数据同步模块的实现
4.1. 事件处理器实现
实现中,每一个业务对象对应一个类,由于对象拥有较多的属性,因此采用了构造器模式(Builder模式)进行对象的构造,这样可以避免构造方法的参数过多而出现错误[4];对象的状态或者属性的变化对应一个方法。对于对象生命周期变化发生的事件,采用基于注解(Annotation)和代理类(Proxy)的通知方式。图4是开发者类(Developer)的部分代码:

图4 Developer类部分代码图
通过添加注解的方式来触发生命周期变化事件,上述中logoff()方法的注解after = EntityChangedDealer.class 比在方法内部直接调用触发事件降低了耦合度。为了使注解代码能够有效,管理系统中的类采用了代理类方式(实现JDK(Java Development Kit)提供的InvocationHandler接口),通过代理类在方法的执行前或者执行后检查对应的注解[5],根据注解调用对应的事件处理器方法。
4.2. Web Service实现
根据其他子系统提供的WSDL(Web Services Description Language)文件,采用SOAP(Simple Object Access Protocol)引擎Axis2自动生客户端代码,并编写了一个批处理文件来调用Axis2提供的自动生成命令,以供几个系统之间共同使用。
同时,为了尽可能地降低Java类之间的耦合性,并不是在控制子模块中直接调用Axis2生成的客户端代码;而是采用了基于接口的编程,控制子模块直接调用的是接口方法,只在接口实现中才调用Axis2生成的客户端代码方法,并通过Spring进行依赖注入。
4.3. 异常处理逻辑实现
对于不可处理的数据同步异常,创建了两个运行时异常类,其中WrongCodeRuntime -Exception对应数据同步过程中因返回错误码而抛出的运行时异常,ErrorRuntimeException则对应因数据同步过程中产生的TimeOutException、AxisFaultException等异常。对于抛出的这两类运行时异常,由struts2的拦截器对异常进行拦截,返回给用户对应的提示页面。
对于可处理的数据同步异常,细分为立即处理和定时重传处理两类。对于定时重传处理,创建类SoapSyncTask类来存储每一个需要重传的数据对象,具体包括objectType、objectId、operation 等属性,使得能够根据这些属性恢复重传需要的所有数据。并采用了quart定时框架进行定时的触发。quart框架是一个可基于Spring配置的轻量级定时处理框架[6],这正好与管理子系统的SSH(Struts Spring Hibernate)主体架构相一致。
5. 结束语
本文针对管理子系统数据同步的需求设计出一种耦合度低、可用性高的数据同步模块,并设计出一种能较好处理Web Service数据同步过程中产生异常的处理逻辑,在能力开放平台管理子系统中得到了很好的利用。当然,在实现过程中页发现还可以改进的地方,例如如果采用异步方式实现Web Service,可以加快数据同步的响应时间[7],进而提高用户体验。
参考文献
[1] 廖建新.移动智能网技术的研发现状及未来发展.电子学报,2003,31(11):1725—1731.
[2] 刘英丹,董传良.利用Web Service实现企业应用集成[J].计算机应用,2003,23(7):124-126.
[3] 陆钢,廖建新.移动智能网业务管理系统的演进和发展[J].电信科学,2002,18(2):18—21.
[4] 程杰 著.大话设计模式 . 清华大学出版社, 2007.12.
[5] Bruce Eckel 著.Thinking in Java (4th Edition). 机械工业出版社,2007.06.
[6] 伍起鑫 彭德巍.基于Spring框架的定时数据采集关键技术研究. 电脑知识与技术,2011.07.
邓式阳. 通过Axis2异步调用实现较大数据传输WEB服务. 计算机应用与软件,20
* 基金项目:国家自然科学基金(No. 61072057,61101119,61121001,61271019,60902051);长江学者和创新团队发展计划资助(No. IRT1049);国家科技重大专项(No. 2011ZX03002-001-01,移动互联网总体架构研究)
作者简介:陈奕成,硕士研究生,研究方向:业务网络智能化,E-mail:chenyc311@gmail.com