基于Hibernate和ActiveMQ的远程数据同步服务器设计与实现

时间:2022-06-25 07:25:44

基于Hibernate和ActiveMQ的远程数据同步服务器设计与实现

摘要:当前,随着Java技术的不断发展,越来越多的应用程序开始基于Java技术进行开发。本文从分析远程数据同步服务器的主要问题入手,提出了基于Hibernate持久化框架和ActiveMQ消息服务实现远程数据同步服务器的体系架构、关键技术及其实现方法。

关键词:Hibernate;ActiveMQ;数据;同步;消息服务;服务器

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2011) 23-0000-02

Remote Data Synchronize Server Design and Implementation Based on Hibernate and ActiveMQ

Li Xin,Li Jun,Huang Hongwei

(Yunnan Science and Technology Information Institute,Yunnan Science and Technology Department Information Center,Kunming 650051,China)

Abstract:Nowadays,more and more application based on Java along with the Java technology.This article analysis the main problems in the remote data synchronize server,and put forward the architecture,main technology and implementation of the remote data synchronize server what based on hibernate persistence framework and ActiveMQ message service.

Keywords:Hibernate;ActiveMQ;Data;Synchronize;Message Service;

Server

一、引言

随着计算机网络的不断发展,网络规模越来越庞大,基于Internet网络开发的应用也日益增加,各个Web应用产生的数据量也随之不断增加,为了减轻数据库管理人员的工作量,保证数据同步的准确性和实效性,数据同步服务成为不同Web应用系统进行数据同步的一个选择。

数据库管理员可选择的数据同步方式有:(1)编写特定的程序连接到远程数据库获取相关数据,并更新到系统中。如果存在多个远程数据库,那么将针对每个数据库编写对应的程序来进行数据的同步。这显然是很不方便的。(2)通过移动介质进行更新,在实效性和安全性上存在一定的问题。(3)利用专业同步数据工具进行同步,需要购买相关服务或软件工具,将增加系统运行成本。

如何方便的、快捷的、降低成本或免费的实现远程数据同步将成为本文研究的一个问题。为了解决以上这些问题,保证数据同步的灵活性、准确性、实时性和安全性,基于Java实现的远程数据同步服务器应运而生。本文基于Java、XML、Hibernate[4][5][6]、ActiveMQ[8]对数据同步服务器进行分析和研究。

二、数据同步服务器设计

数据同步服务器是多线程[1]的应用服务器,服务器根据XML配置文件,将源数据库中的相关数据同步到目标数据库中,而源数据库和目标数据库都可能为远程数据库。本文将利用Hibernate实现对本地和远程数据的存取,ActiveMQ实现远程消息的发送和监听。

(一)服务器结构

数据同步服务器具有可配置、多线程、可扩展等应用特征。使用面向对象和结构化的分析方法对数据同步服务器进行分析,将数据同步服务器分为启动模块、命令控制模块、定时器模块、配置模块、数据同步模块等五个模块。

(二)服务器接口

数据同步服务器的可扩展性将通过定义的一系列接口来实现。通过配置,数据同步服务器能动态的加载和运行数据同步服务。

1.服务接口ServiceAware

通过服务接口,服务类通过监听相应端口,完成如下工作:(1)接收来自键盘输入的命令,完成对服务器的管理,例如重新启动定时服务、停止定时服务、关闭服务器等操作。(2)接收远程连接[2][3]请求,处理并回应远程连接。

public void serve(InputStream in,OutputStream out)throws IOException;

2.定时器接口TimerAware

通过定时器接口,数据同步定时服务按照配置指定的运行时间间隔定时的自动运行数据同步工作,而无需人工的干预。

public void start() throws Exception;

public void start(boolean restart)throws Exception;

3.数据转换接口DataConvertAware

通过数据转换接口,数据同步类通过数据转换接口完成远程数据到本地数据格式的转换,或者本地数据到远程数据的转换,实现不同数据库类型之间的数据转换,降低数据转换模块之间的耦合性。

Public long localToRemote(Converter converterCFG) throws Exception;

public long remoteToLocal(Converter converterCFG) throws Exception;

(三)配置

通过XML格式进行配置,利用Apache Digester[7]组件完成XML配置文件到Java Bean的动态加载,使用面向对象的方法实现服务配置的存取。按照服务器的结构,将配置分为服务配置、定时器配置、数据同步配置等三种类型。

(四)数据存储与消息队列

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,可以使用对象编程思维来操纵数据库,在提供完全透明的持久化机制的同时又提供尽可能多的灵活性。数据同步服务器选取Hibernate作为关系数据库的存取中间组件,减少使用JDBC模式的代码量,提高转换程序的开发效率。

ActiveMQ是开源消息服务系统,是完全支持JMS1.1和JEE规范的JMS Provider实现,可以方便、快捷的实现消息队列的发送和监听。ActiveMQ支持点对点消息传输、/订阅消息传输两种模式。Hibernate适用已知数据结构的情况,ActiveMQ适用未知和已知数据结构的情况,数据同步服务器采用Hibernate和ActiveMQ实现互补。

三、数据同步服务器的实现

(一)启动模块

启动模块是启动远程数据同步服务器的入口,负责加载数据同步服务器运行依赖的软件包及相关资源,并启动数据同步服务器。启动模块从磁盘上指定的目录下加载jar文件包和类文件,并完成服务器的启动,是服务器运行的基础。

(二)控制模块

控制模块包含了命令行服务,启动端口监听线程和连接线程。其中命令行服务实现了ServiceAware接口,由类Console实现;端口监听线程由Listener实现;连接线程由Connection实现。类Server通过Apache Digester组件加载配置目录下的XML配置文件,根据配置文件启动相应的服务。

(三)定时器模块

数据同步定时服务是数据同步服务器的核心模块,通过此模块可以在指定的时间间隔内完成远程数据的同步工作。因此,数据同步定时服务从TimerTask继承,并实现TimerAware接口,使数据同步定时服务除了可以定时运行外,还可以接受控制台服务的命令行控制,实现启动、停止、重启等操作,增强模块的可控制性。定时器程序初始化数据同步配置,并根据配置实例化数据转换接口实现类,分别调用localToRemote方法和remoteToLocal方法,完成本地到远程、远程到本地的双向同步工作。

(四)配置模块

配置模块基于Apache Digester[7]组件,以规则和模式为基础处理XML文档。与SAX和DOM之类的标准API相比,Digester不涉及太多的细节问题,非常适合于对XML文档进行简单的处理。使用数据同步服务器中的工具类DigesterUtils提供的相关方法可以根据服务器根目录下的config目录下指定的XML配置文件创建对应的配置对象,并将每项配置存放到对应的对象成员中,通过此方法,可以快速的实现XML配置面向对象的数据存取。

(五)数据同步模块

数据同步模块是数据同步服务器的核心模块,数据同步模块包含数据转换和消息发送/监听两个子模块。数据转换模块的转换类实现了DataConvertAware数据转换接口,数据转换模块只需简单的调用转换接口即可完成数据的转换和同步。消息发送/监听模块实现了MessageQueueAware接口,对消息实现发送和监听。

1.数据转换模块

数据转换模块根据数据同步配置实现数据的自动抓取、自动存储和数据格式处理。Hibernate根据配置来管理本地或远程数据库连接,并根据配置实现不同数据库类型之间的数据存储,无需编写特殊的代码,是基于ActiveMQ实现数据同步的基础。数据转换模块按照如下流程执行。(1)数据抓取。数据转换类启动Hibernate,创建远程连接会话,按照配置中保存的时间戳获取满足条件的数据,并将数据交由数据存储方法处理。(2)数据存储。数据转换类创建本地连接会话,处理数据抓取方法传递的数据,并存储到本地数据库,返回最后一条数据的时间戳。(3)保存配置。将数据存储方法返回的时间戳保存到数据转换配置中,供下一次数据转换执行时使用。

2.消息发送/监听模块

通过ActiveMQ的消息服务可以方便、快捷的实现本地与远程数据库之间的数据同步,是基于Hibernate进行数据同步的一种较为高级的模式,使数据同步工作可管理性、可监控性增强。(1)消息发送。ActiveMQ的消息支持字节数组、对象、文本等消息类型,数据同步模块大都使用文本消息,文本消息使用XML和JSON两种数据格式。XML格式是消息发送的默认格式,JSON格式与XML格式相比,具有没有多余的冗余信息、数据传输量少的特点,是目前较为流行的数据格式,需要JSON组件的支持。数据同步模块将需要更新的数据准备为XML格式或JSON格式,连接到远程消息服务器,创建会话,发送消息并等待回应继续剩余消息的发送。(2)消息监听。消息监听实现远程消息队列的监听,其中包括本地消息发送后远程消息服务器的回应监听和远程同步消息的监听。对本地消息发送后远程消息服务器的回应监听可以检验消息是否发送成功,发送成功后将通知消息发送模块继续剩余数据的发送。对远程同步消息的监听则包括消息队列的处理和消息处理结果的发送两个步骤,其中消息队列的处理将远程消息转换为本地数据格式,并通过Hibernate存储到本地数据库;消息处理成功与否都将发送消息到远程消息服务器,以通知远程消息服务器消息的处理状态。

(六)应用实践

本程序运行在Windows 2003 Service Pack 2,JDK1.6 update30,ActiveMQ5.2.0,SQL Server 2000 Service Pack 4上,通过连接到远程数据库服务器同步数据,远程数据库服务器为主数据库,本地数据库服务器为从数据库。目前在数据同步服务器上运行了2个数据转换定时器,两个定时器每隔6小时执行一次,共16个数据转换程序,每个数据转换程序每次转换500条记录,每次同步9000条数据,大约用时30~45秒,每个数据转换程序大致执行时间在1.9~2.8秒内,能满足实际的应用需求。

四、小结

随着越来越多的Web应用构建在Java体系结构之上,以分布式架构为基础的Web应用之间共享的数据同步问题渐渐凸现。本文结合实际应用需要,基于Java实现了数据同步服务器,能够灵活、方便快捷地实现远程数据的同步,并支持不同的关系数据库之间的数据存取。基于配置开发的数据同步服务具有易用性和易操作性,通过接口编程可以适用不同应用服务的开发需求,大幅度提高了Web应用系统管理人员的工作效率。

参考文献:

[1][美]SCOTT OAKS&HENRY WONG.JAVA线程(第二版)[M].东南大学出版社,2006,3:18-47

[2]汪晓平,俞俊,李功.精通Java网络编程[M].清华大学出版社,2005,9

[3]孙卫琴.Java网络编程精解[M].电子工业出版社,2007,3

[4][德]CHRISTIAN BAUER,[澳]GAVIN KING.Hibernate实战(第2版)[M].人民邮电出版社,2008,4

[5]孙卫琴.精通Hibernate:Java对象持久化技术详解[M].电子工业出版社,2005,4

[6]蔡雪焘.Hibernate开发及整合应用大全[M].清华大学出版社,2006,3

[7]Otis Gospodnetic.Parsing,indexing,and searching XML with Digester and Lucene[OL/EB],Jun 2003.Technical Report,www.省略/developerworks/java/library/j-lucene/.

上一篇:一种基于GSM网的OA办公短信平台设计与实现 下一篇:计算机本科专业嵌入式系统方向课程体系研究