admin 管理员组

文章数量: 1184232


2024年4月20日发(作者:assert0函数)

维普资讯

2007年第6期 

文章编号:1006-2475(2007)06-0036--04 

计算机与现代化 

JISUANJI YU XIANDAIHUA 总第142期 

种基于XML的数据集成中间件系统方案 

李爱华,陶宏才 

(西南交通大学信息科学与技术学院,四川成都610031) 

摘要:针对数据库异构问题,给出了一个基于XML的数据集成中间件解决方案,并给出了该中间件实现的关键技术。 

关键词:XML;数据集成;中间件;数据库 

中图分类号:TP311 文献标识码:A 

A Middleware Solution to Data Integration Based on XML 

U Ai-hua.TAO Hong—cai 

(School of Information ciSence&Technology,Southwest Jiaotong University,Chengdu 610031,China) 

Abstract:To solve the heterogeneous database problem,a middleware solution to data integration based on XML is put forward. 

Also.an implementation of the middleware is siren. 

Key words:XML;data integration;middleware;database 

0 引 言 

随着计算机技术,特别是Internet技术的迅猛发 

展,许多企业单位和政府部门内部都逐步实现了业务 

信息的计算机化管理。然而,由于各业务系统建设和 

实施数据管理系统的阶段性、技术性以及其它经济和 

人为因素等影响,相对独立的信息系统建设,致使不 

同企业之间,甚至同一企业内部,虽然有丰富的信息 

资源,但数据“数出多门”、“异数异源”等情况时有发 

生。这些异构数据源虽然数据资源丰富,但难以彼此 

沟通,不能交换,无法最大限度地发挥作用,形成了无 

数的信息孤岛。 

随着企业信息化管理和应用向高层次方向发展, 

比如:决策支持系统、领导查询系统、电子商务系统等 

等,就必须基于大量的、各个方面的企业信息才能做 

出科学的决策支持,这使信息孤岛的问题显得越发严 

重。而基于XML的数据集成中间件就是保护原有投 

资,解决信息孤岛问题的一种很好的方法。 

本文利用XML和中间件技术,提出一种基于 

XML和中间件的数据集成方案,给出了中间件的关 

键实现。通过该中间件,可将各种异构数据库集成在 

起,并为高层提供一个统一的访问服务接口。 

由以下四层组成: 

1数据集成体系设计 

根据信息共享的特点,笔者提出了一种如图1所 

示的,基于XML的数据集成体系结构。该体系结构 

收稿日期:2006-06-09 

(1)客户端层:用户交互界面,接受用户的信息 

请求并返回请求结果。分为基于Web的和非基于 

Web的。基于Web的客户端,就是浏览器,非基于 

Web的客户端则是独立的应用程序。 

(2)Web层:Web层为企业提供Web服务,包括 

信息的发布、交互和处理的功能。Web层只存在于 

基于Web的分布式企业信息系统中。 

(3)业务层:数据集成中间件封装了系统的业务 

逻辑,提供集成的业务服务,构成系统的业务层,用来 

实现企业级信息系统的业务逻辑。中间件对外部请 

求信息的处理流程为:接收客户端的查询请求(基于 

Web的情况下,客户端的查询请求经Web层传递过 

来),获取查询请求的查询参数并根据元数据库提供 

的数据字典进行参数匹配,把单个SQL查询分解成 

对应于多个异构数据库的SQL子查询,存储到SQL 

子查询队列中。依据FIFO(先进先出)调度策略的队 

列管理机制,依次取队列的头元素,判断其属性参数, 

发送到相应的包装器。由包装器负责把SQL子查询 

发送到对应的后台数据库执行查询请求,接收来自数 

据库的源数据格式的查询结果,并将其转化为XML 

文档。XML合成器将来自各个异构数据库的XML 

文档合成为一个XML文档,从而实现了异构数据库 

的数据集成。合成的XML文档经语法分析、处理,协 

同XSL,依据客户端要求的文件格式返回。 

(4)数据库层:处于最底层,是系统的数据提供 

作者简介:李爱华(1981.),女,山东济南人,西南交通大学信息科学与技术学院硕士研究,研究方向:网络数据库;陶宏才 

(1964.),男,湖北武汉人,副教授,硕士生导师,研究方向:网络与信息系统,网络安全。 

维普资讯

2007年第6期 李爱华等:一种基于XML的数据集成中闻件系统方案 37 

者,分布于企业内部或企业之间需要集成的各个异构 

典提取出相应的表进行参数匹配,然后根据关系数据 

数据库系统。 

’—’

塑苎嚣 _I I ^pF—— pkt l l。 JM客尸演I。。 l非Jm客尸璃 

’ 

客户匐‘曩 

儿… JL II-_… I1O 

wn般募器(sewle吩p) 咖 ll0P 啪屡 

ll。 叼e Q 

应用服务器 

辇 .1查诲分一,l’_ -I数据字囊l l数据转技H f XSL l 

蠢禹

件 

 薹  

I调度策喀I 

≤【垂=鍪=苎曼 lJ I

 

 

x 眙成器j器 

法+处 理分理析 l、}结果处  业 务 层 

… 

lI l Il 

图1基于XML的数据集成模型结构图 

数据集成中间件是整个数据集成体系的核心,由 

查询处理器、包装器、元数据库和结果处理器四部分 

构成。中间件位于异构数据库系统和应用程序之间, 

向下协调各异构数据库系统,向上访问集成数据的应 

用提供统一数据模式和数据访问的通用接口。利用 

中间件集成异构数据库,并不需要改变数据库原始数 

据的存储和管理方式,各数据库的应用仍然完成它们 

的任务,中间件不存储任何异构数据库中的实际数 

据,而是集中为异构数据库提供一个高层次检索服 

务。用户的查询基于全局模式,不必知道每个数据源 

的特点,查询处理器直接与包装器打交道,将基于全 

局模式的查询转换为基于各局部数据库模式的查询。 

2数据集成中间件的实现 

中间件的实现采用WebLogic Server作为应用服 

务器、使用IBM公司的XMIAJ Apache Xerces作为 

XML的Java解析器,具体实现工具是Bolfand公司的 

Jbuilder。以下具体说明该中间件几个主要部件的实 

现过程。 

2.1查询处理器 

查询处理器是针对数据库查询请求的处理。它 

为客户端提供一个统一的接口对数据源进行查询。 

负责接收来自客户端的查询请求,根据数据字典中相 

应的集成信息,将客户端提交的全局SQL查询分解 

成针对各个异构数据库的SQL子查询,存储到SQL 

子查询队列中,依据调度策略的队列管理机制,依次 

提交到相应的包装器。 

(1)查询分解。 

通过设计一个JavaBean—getSq1.java获取子查 

询的SQL语句。getSq1.java有一个人口一个出口,人 

口方法接收从客户端传来的查询参数,通过JDBC本 

地连接到元数据库(元数据库与系统主类所在的服 

务器位于一台机器上,后面有介绍),从全局数据字 

字典中全局数据库表所对应的局部数据库表名产生 

子查询,出口生成多个子查询的SQL语句对象。 

(2)SQL子查询请求队列。 

sQL子查询请求队列用来存储查询处理生成的 

SQL子查询,用Vector可以快速实现Java的队列类。 

Vector类是Java.util包中的类,它的作用相当于数 

组,不同的是,这个数组可以存储多个不同的对象,并 

负责处理对象元素有序存储和任意增删。为此,我们 

定义了SqlQueue对象作为SQL子查询请求队列Vec- 

tor中的对象元素。SqlQueue对象记录了SQL子查询 

的相关参数,封装了SQL子查询的SQL语句、数据库 

类型、服务器地址、服务器端口号、用户名和密码。 

SqlQueue对象的定义如下: 

//队列中每一个对象元素的结构 

public class¥qlQueue{ 

String ;//SQL语句; 

String db name;//数据库名称; 

String db

address;//服务器地址; 

_

String db

_

po.,//服务器端口号; 

String user;//用户名; 

String password;//密码; 

public class QueueNode(String sql;String db type;String 

db

_

address;String user;String password){ 

this.8ql=sql; 

this.db--咖e=db

type; 

_

this.dbaddress=dbaddress; 

this.dbport=db

port; 

__

this.user=user; 

this.password password; 

} 

} 

从查询处理接收到SQL子查询请求后,使用一 

个线程创建一个SqlQueue对象,通过读取查询分解 

返回的查询参数,初始化该对象;使用一个线程查看 

SQL子查询请求队列Vecmr是否已满,未满则将 

SqlQueue对象插人到Vector末端,已满就等待;使用 

个线程做调度线程,将SQL子查询请求队列Vector 

中的对象移出并发送到相应的数据库包装器。 

(3)调度策略。 

在实际应用中,请求队列中会有多个对异构数据 

库的SQL子查询请求,依据队列的特性,采用基于 

FIFO(先进先出)调度策略的队列管理机制。调度线 

程首先取队列头元素,依据其属性参数,发送到相应 

包装器。 

2.2元数据库 

元数据库是一个中间数据库,存放着一系列数据 

字典,每一个数据字典以一个或多个表的形式存在。 

主要由管理员使用手工对元数据库进行管理。数据 

字典是一组数据对象的集合,它存储了系统工作中所 

需的各种元数据。元数据是数据集成能否顺利实现 

维普资讯

计算机与现代化 2007年第6期 

的关键,只有在系统设计阶段对系统的元数据反复分 

析和综合,才能导出系统准确的数据模型。元数据库 

主要由全局数据字典、局部数据字典和关系数据字典 

三部分组成。这些数据字典由一系列表格组成,主要 

包括以下内容: 

Props.put(”pert ,”1079”); 

//创建连接 

Connection con=myDriver.connect(”jdbc:weblogie: 

mssqlserver4”.props); 

//创建SQL语句对象 

Statement stmt=con.createStatement(): 

//执行SQL查询语句,并返回结果集 

(1)全局数据字典,记录了全局数据库的基本信 

息,包括数据库名称,数据库中包含的表,数据库表中 

所包含的字段等,是统一的数据结构。 

(2)关系数据字典,记录了全局数据库与局部数 

据库的映射关系,包括全局数据库与局部数据库的基 

本表的对应情况,以及全局数据库基本表与局部数据 

库基本表的字段的对应情况等。 

(3)局部数据字典,记录了各局部数据库的基本 

信息,包括各局部数据库的数据库名称,数据库类型, 

数据库驱动名称,服务器地址,服务器端口,用户名和 

密码等。 

元数据库和系统主类所在的服务器位于同一台 

饥器上。这样对于元数据库的访问只需要本地连接 

到元数据库即可。对于客户端提交的全局查询,在进 

行完语法分析和词法分析后,通过JDBC本地连接到 

元数据库,结合全局数据字典与关系数据字典,实现 

全局SQL查询语句的查询分解,生成多个局部SQL 

子查询。局部数据字典,则为SQL子查询提供局部 

数据库的连接参数。这些参数信息被封装到一个 

SqlQueue对象中。SqlQueue对象进人SQL子查询请 

求队列Vector中.等待调度,发送到相应包装器。 

2.3包装器 

数据集成是中间件系统的关键,由包装器来实 

现。底层的数据源各自有不同的数据结构,要有效地 

把不同数据结构的数据结合起来,就要为每个数据源 

设计相应的包装器。包装器接收查询处理器发送过 

来的SQL子查询的查询参数,对应到相应后台数据 

库执行查询操作.并将返回的源数据格式的结果集封 

装成XML文档格式。因此,包装器主要完成的任务 

有访问后台数据库和封装结果集为XML文件。 

(1)访问后台数据库。 

利用JDBC访问后台数据库。假设.有一个SQL 

Server数据库db.在db中创建一个简单的公司员工 

表db—employee(emp一.id.emp—name,emp—age,sala— 

ry)。对SQL Server数据库的访问,可由如下代码实 

现: 

//加载数据库驱动程序 

Driver myDriver=(java.sq1.Driver)Class.forName(” 

weblogie.jdbc.mssqlserver4.Driver”).newlnstance(); 

//设置属性变量:用户名、密码、数据库名称、服务器地址 

和端口号 

Properties props=new Properties(); 

Props.put(”useI/n, s ); 

Props、put(”password","pw”): 

Props.put(”db”.”db”): 

Props.put(”servern,"172.24.216.55”); 

ReslutSet rs=sturt.execute(select・from db_employee); 

(2)将查询返回的结果集封装成XML文件。 

为了将返回的结果集封装成XML文件格式,我 

们利用了Xerces解析器。创建一个Document对象 

doc,并创建一个根结点root,然后在结果集中循环, 

取出其中的每一条记录,并用表的字段名作为标记来 

把结果封装成XML格式。部分实现代码如下: 

//创建Document对象doc 

Document doc=DOMImplementation.creatDocument(null, 

null,nul1); 

//创建根结点 

Element root=doc.createElement(”results”); 

//循环取出结果集的每一条记录,并用表的字段名作为 

标记来把结果封装成XML格式 

While(r8.next()){ 

Element child=doc.ereateElement( row"); 

For(i=1;i<rs.getMetaData().getColmunCount();i+ 

+){ 

Element childl=doc.ereateElement(1"8.getMetalData(). 

getColumnName(i)); 

child1.appendChild(doe.createTextNode(rs.getMetalData( 

).getString(i)))i 

child.appendChild(child1);} 

root.append(child); 

} 

doc.appendChild(m0t); 

//将DOM树序列化到XML文件 

XM1.Serilaizer serial=new XMLSerializer(typeof(Docu— 

ment)); 

Seri1a.seirlaize(doc.getDocumentElement()); 

将访问SQL Server数据库返回的结果集,通过该 

封装程序的运行,转换成的XML文件如下: 

<?xl1ll version=”1.0”encoding ”gb2312”?> 

<db employee> 

<row> 

<emp id>1001</emp id >

_

<emp nanle>李明</emp name> 

<emp age>25</emp age> 

<salary>7000.0</salary> 

</row> 

<row> 

<emp

id>1002</empid> 

_

_

<emp name>张三</emp name> 

<emp

gae>32</emp

age> 

_—

<salary>9000.0</salary> 

</row> 

维普资讯

2007年第6期 

</db

employee> 

_

李爱华等:一种基于XML的数据集成中间件系统方案 39 

2.4结果处理器 

3结束语 

异构数据源的集成,特别是基于XML的数据集成 

问题已经成为当前计算机领域中一个重要的研究方向。 

XML具有简单、开放、可扩展性、灵活、自描述性等特点, 

给Intemet注入了新的活力。作为数据表示的一个开放 

标准,XblL为数据集成带来了新的机遇。用XblL作为 

数据交换的中介,给系统的实现带来了极大的灵活性。 

系统可以屏蔽掉后台的多种数据源,用统一的XblL格 

式的数据呈现给用户。接收数据方可以对数据进行任 

意的处理,如分解出其中需要处理的数据或是以不同的 

样式来显示。通过本数据集成方案,可以实现异构数据 

源中的数据的无缝集成。 

参考文献: 

结果处理器接收来自各个包装器的局部XML文 

档,将它们合成为一个全局XML文档,最后将合成的 

XML文档经语法分析、处理,协同XSL,依据客户端 

要求的文件格式返回。由于合成的XML文档的后续 

处理的实现方法比较简单,在这里,我们重点介绍 

XML合成器的实现。XML合成器将来自各个异构数 

据库的XML文档合成为一个XML文档,实现了异构 

数据库的数据集成。假设有两个XML文档doel和 

doe2,将doe2的根元素的子结点列表合并为doe1的 

根元素的子集,实现代码如下: 

public void unite(Document docl,Document doc2){ 

//得到docl,doc2的根元素 

Element root1=doe1.getDocumentElement(); 

Element rootl=dc2.geotDocumentElement(); 

//得到doc2根结点的子结点列表 

NodeList children=root2.getChildNodes(); 

//如果子结点列表不为空,则顺次插人 J docl的最后 

if(children!=nun){ 

int len=children.getLength(): 

for(int i=0;i<len;i++) 

root1.insertBefore(children.item(i),root1.getLastChild( 

))} 

} 

[1]叶华,张森.一种异构数据库间的XML接El方案[J]. 

计算机应用,2001,21(6). 

[2] 马松,牛文琪.数据库访问中间件的研究与构造[J]. 

北京轻工业学院学报,2002(2). 

[3]都志辉.XML实践编程[M].北京:清华大学出版社, 

2o02. 

[4]Mike Jasnowski.Java,XML和Web服务宝典[M].盖江 

南,等译.北京:电子工业出版社,2002. 

[5]张宏展,蔡宗琰,吴欣.实战J2EE与WebLogic Server 

应用开发[M].北京:电子工业出版社,2004. 

(上接第35页) 

表1 200o年一加06年A企业文档产出率指标历史数据 

意义,可以舍弃不用。 

项目名称 

×省×营销管理信息系统 

×省安全生产管理信息系统 

时间 文档产出率 

2Oo0.6 0.242页/d,时 

2Oo0.8 0.571页/d,时 

×公司科教管理信息系统 

×省×规费征稽系统 

×省×VIP客户分析系统 

×省×行业部重点示范工程 

×省×代码管理信息系统 

2oo1.5 0.414页/d,时 

2o03.5 0.895页/d,时 

2OO4.8 0.976页/d,时 

2oo5.8 1.142页/d,时 

20o6.5 1.164页/d,时 

整体上,本文提出的项目量化管理模型经过在A 

企业3年多的实际应用,A企业的进度变化率、进度 

偏离率、缺陷密度、模块缺陷率、返工比率、客户满意 

度、文档产出率、用例产出率、文档丰富度都得到了极 

大的改进;其他几个指标也相应地有所改进。通过该 

模型的应用,A企业在软件开发的各个阶段都加强了 

项目管理水平,产生了极大的效益。 

3结束语 

本文提出的项目量化管理模型,属于轻量型的量 

化管理模型,其特点专门针对国内中小型软件企业定 

制,实施起来方便、有效,实践证明本模型可以促进中 

小型软件企业对于项目管理过程的规范化和制度化; 

提高中小型软件企业对于项目进度的控制能力;提高 

 

制在逐步规范,已经达到了国内同行业的先进水平,该指 

中小型软件企业对于项目间的资源的协调能力。

标可以作为A企业项目管理的非关键指标进行监控,一 

 

旦文档产出率指标低于目前的1.164页/小时,公司应及 

参考文献:

[1]杨洋.我国软件企业发展现状与对策[J].商业经济, 

时进行分析,找出用例测试环节存在的隐患。 

2006(5):119—120. 

(3)规模变化率。 

[2]王迪.CMM在软件企业过程改进中的应用[J].中国金 

由于A企业所在行业和所承接项目的特殊性,通 

融电脑,2006(2):54—58. 

常应用软件的规模在签订后不会随意变动,如果需求 

[3] 陈佳杰.国内中小型软件企业的CMM发展思路[J].电 

变动较大,通常通过增补合同的方式予以解决,此时 

脑知识与技术,2005(11):46—48. 

 傅铅生.CMM对软件工程中的过程管理和改进作用研 

在企业内视为另外一个单独的项目,其指标也和原项 

[4]

究[J].测量技术,2005(1):1—4. 

目没有联系。因此该指标对A企业来说没有太大的 

从表1可以看出,A企业的文档产出率总的来说 

是逐年提高的,特别是2006年的X省X代码管理信 

息系统,已经达到了同行业内的优秀标准。 

文档产出率的获取相对容易,产生指标的过程相对 

简单,成本较低,从A企业的历史数据看,用例文档的编 


本文标签: 数据库 数据 查询 集成 企业