基于EJB的数据互操作技术研究
2008-12-20
作者:刘东波,李由
网络技术的发展使人类社会进入“信息爆炸”的时代,而人们却常常被淹没在浩瀚的数据海洋之中,难以有效地检索、访问和使用数据。由于受到当时计算机技术和应用水平的制约,早期的信息系统都是根据行业或部门的特殊需求而建立的,没有充分考虑与其它相关信息系统的数据共享" title="数据共享">数据共享问题,所以形成了所谓的“数据烟囱”或“数据孤岛”,这已经成为制约信息系统进一步发展的“瓶颈”之一。
到了二十一世纪,异构" title="异构">异构数据环境带来的互操作" title="互操作">互操作问题变的越来越突出。即便是针对同一领域的应用问题,并且采用相同的技术体制,也无法保证所有应用系统" title="应用系统">应用系统都有相同的数据模式。为了在这些系统之间交换数据,必须将信源模式中的数据转换为信宿模式的格式。
本文所说的异构数据环境是指网上相互独立且需要进行数据交换的各种不同数据库系统构成的集合,其中的每个数据库系统都具有自治性。这里包含两层意思:
(1)数据库管理系统(DBMS)的异构性,即分别采用不同供应商的DBMS产品;
(2)数据模型(Data Model)的异构性,即采用的数据库逻辑模型或物理模型不同,或者对数据元素的语法描述不同,或者同一语法描述在不同的数据库系统中有不同的语义解释。
要解决DBMS的异构性,可以采用DBMS网关技术,它主要解决不同DBMS之间的语法转换问题,目前已经有许多成熟的商用软件可以选择,如Sybase提供的OmniSQL网关。要解决数据模型的异构性,不仅涉及到语法转换(Transform),还涉及到语义仲裁(Mediation)问题,这是异构数据集成的关键。
早期的方法是为每一对交换数据的系统写一个特殊的接口程序。历史的经验告诉我们,开发和维护这些接口程序的时间和经费开销都很大。而且,随着需要交换数据的系统不断增加,为此而付出的代价也将不断增大。
如何实现分布式数据的交换与共享是人们普遍关注的研究领域。因为目前大量的数据是通过分布式、异构数据库系统进行管理的,所以要实现数据共享与透明访问,就必须集成各种异构数据库系统,并最终达到数据互操作的目的。
本文回顾数据共享技术的发展历程,讨论数据标准化对数据互操作的作用及其局限性,在此基础上,提出一种基于EJB的异构数据互操作解决方案,最后介绍其中的部分实现问题。
2 数据共享技术发展
从数据共享的角度来看,信息系统的发展大致经历了的四个阶段:数据与应用捆绑阶段、数据与应用相对独立阶段、基于标准的数据集成阶段、异构数据互操作阶段。
2.1 应用与数据捆绑
早期的应用程序都有自己的数据,而且应用程序很少访问其它部门或系统的数据,数据与程序紧紧捆绑在一起,数据的定义、格式以及操作规则都完全由使用它们的应用程序来解释,共享数据几乎是不可能的。
客观地说,直到20世纪90年代,各企业、各部门在建立应用系统时,往往的只考虑自己对数据的需求,而很少关心是否能够满足其它机构的需求。系统间进行数据交换时,需要很多专用的、点对点的接口程序,而且多数是通过格式化消息或文件传递来实现的。
2.2 数据与应用相对独立
随着计算机应用范围的不断扩大,系统之间的互操作和数据共享需求日益迫切。随着数据库管理系统的不断成熟,应用系统的程序和数据已经分离。应用系统不仅能够访问自己的数据,还能够通过查询和操纵其它系统的数据,但是,不同的数据库/数据文件之间仍是彼此孤立的“数据孤岛”,无法形成统一的数据视图。
2.3 基于标准的数据集成
为了给所有用户提供访问共享数据的统一逻辑视图,人们从20世纪90年代开始大力推进数据标准化工作,并取得了明显成效。
通过制订企业标准数据模型以及标准数据交换格式,可以将分散在不同宿主机上的数据库集成为一个物理上分布、逻辑上统一的数据库系统,应用系统可以通过统一的数据访问服务透明地查询和更新分布式数据库中的数据,而分布式数据库管理系统本身具有维护全局数据一致性的功能。
数据标准化工作大大提高了信息系统之间的数据共享与互操作能力。但是,数据标准化不是万能的,它不能一劳永逸地解决数据共享问题。
2.4 异构数据互操作
由于各部门都掌握并维护着与自己的业务相关的数据,其中有一部分是专用数据,还有很多数据是需要并且可以与其它部门共享的,所以必须建立相应的软件基础设施,以满足各种可能的数据共享需求。
(1)为了制定正确的生产计划,往往需要销售部门和财务部门及时提供客户订单和财务方面的数据。
(2)为了应对市场的变化,往往需要临时改变营销计划和增减业务部门,这里存在大量现有系统无法预见的新关系,以及新增业务部门对信息共享的需求。
(3)当企业经营模式发生改变时,可能会导致应用系统数据采集和共享模式的改变,而管理员很难事先了解这些改变的后果。
(4)为了适应企业新的数据共享需求,必须能够通过简单的软件配置或组装方法(而不是开发新的代码)来实现新的功能。
(5)由于数据源存储在不同的宿主机上,所以必须提供便捷的方式,使之快速找到所要数据源,从而避免开发人员通过建立私有、冗余的数据源,达到降低数据集成与转换代价的目的。
(6)为了满足数据安全需求,应提供统一的访问控制、用户识别和授权服务,如果每个应用都采用特有的授权和访问控制方式,将给系统间的互操作和数据共享带来了很大的障碍。
上述一系列问题需要一种崭新的数据管理和数据共享机制。
美国国防部最早在其DII COE中提出数据共享工程(SHAred Data Engineering,SHADE)计划。SHADE首先将各应用系统的需求汇总,通过分析去掉冗余数据集,以提高公共数据的一致性,然后再将这些数据以所有应用程序都认可的形式存入数据库,实现数据与应用程序的独立性。SHADE还提供公共数据的一致性表示,软件开发者可以容易地使用这些数据,并与其专用数据结合。
SHADE实际上是DII COE提供的一种数据共享策略,它的作用不仅仅局限于军事领域,它在数据标准化的基础上,通过提供多种可重用软件和数据组件,特别是引入数据仲裁机制,为遗留系统、现有系统和新研系统之间的数据共享与互操作提供了三种用法不同而基础一致的解决方案:共享数据服务器、虚拟数据仓库和XML门户,使数据共享技术的发展进入了新的历史阶段。
3 数据标准化及其局限性
3.1 数据标准化是基础
数据共享工程的目标是保护现有数据库、数据结构和数据记录的投资;通过数据重用提高互操作性;提供数据融合的基础。达到这一目标的前提是数据的公共表示(Common Representation),而公共表示依赖于数据标准化工作。
公共表示为数据提供者和使用者提供公共的语法描述和语义解释,以及有效的取值范围。公共表示通过一个逻辑模型来维护,但它可以有多种物理表现形式(如Informix、Sybase 或Oracle数据库,面向对象数据库,XML文档,UML模型或普通文件等)。
由此可见,为了满足数据共享需求,每个行业、企业和部门都应当建立统一的数据标准。
3.2 数据标准化只能提供部分解决方案
数据标准化固然重要,假如每一个应用系统都采用相同的数据表示,即数据的名称、类型、结构、表示方法和语义解释都完全相同,那么数据互操作问题便不存在了。为了实现公共的数据表示,减少因数据异构性问题而引发的数据互操作问题,各行业都非常重视数据标准化工作,甚至人们曾经希望通过标准化工作一劳永逸地解决数据共享与互操作问题。
但是,人们很快就发现,要建立和维护单一的、完整的、标准的数据模型是相当困难的,有时甚至是不切实际的。为了使每一个应用系统都采用同样的数据表示,我们需要一个统一的、完整的、覆盖所有应用领域的数据模型。然而,由于人类认知的局限性,很难成功地为大型企业(或行业)建立这样一个覆盖所有细节的模型。事实上,每个大型企业(或行业)都有许多不同的数据模型,其中每个数据模型只覆盖一个功能域(如采购、生产、销售、财务等)。在开发应用系统时,应根据不同的功能域选择不同的数据模型或数据定义。当基于不同模型的应用系统之间需要进行数据交换时,将会引发数据互操作问题。
其次,世界在变化,标准也将会随之改变,而系统不可能同步适应这种变化。例如,一个相当稳定的数据库每三年需要修改一个数据模式,如果一个标准模型覆盖100个这样的数据库,那么每两周就要应付一次这种改变。
此外,系统可能需要与采用不同标准的信息系统交换数据,这必然引起数据模型的异构问题。例如在天气模型化过程中,可能要与气象学、海洋学等其它学科有交叉。
再有,特定数据表示方法的选择与标准化相抵触。在某些情况下不同系统采用不同的数据表示方法可能有一定的合理原因。例如采用精密电子传感器和人工观测两种不同方式观测某个对象的时间特定时,即使采用同一种数据模型来表示记录结果,但也由于数据的精确度和可信度的不同,记录的数据有着不同的意义。
由此可见,数据标准化并不是完整的解决问题的方案。更好的方法是放松完整描述元数据的需求,允许系统开发者在自己的数据模式中描述元数据,并且提供自动解决元数据差别的工具。
4 基于EJB的数据仲裁
在很多情况下,用户都不愿意放弃自己的数据模式,以适应其它系统所支持的标准模式。但为了在系统之间进行数据交换,又必须能够按照其它系统所需要的格式提供信息。数据仲裁(Data Mediation)方法在保持用户原有数据模式的前提下,较好地解决了互操作问题。
本节重点介绍我们设计的一种基于Enterprise JavaBeans和CORBA技术的数据仲裁服务器(简称EJB仲裁器),它在公共数据表示(数据标准化)的基础上,解决异构数据模型之间的仲裁、转换、集成与互操作问题。
如图1所示,EJB仲裁器是一个中间件(应用服务器),用来完成两个系统不同数据模式之间的数据转换,它通过APIs接口为应用系统提供数据仲裁服务。
EJB仲裁器按照下列步骤来处理信源(Source)和信宿(Target)之间的数据交换:
(1)接收来自信宿(接收方)的SQL语句;
(2)将接收到的SQL语句转换为适合信源模式的等价的SQL语句;
(3)执行对信源数据库的查询,并且将查询结果转换为信宿的格式;
(4)将转换后的查询结果返回信宿。
EJB仲裁器的作用实际上是系统之间的语义网关,它使得接收方不仅可以查询自身的数据库,还可以查询信源数据库,就象自身的数据库得到扩充一样,根本无需关心数据名称和表示方法的差异。
EJB仲裁器与早期的专用(点对点)转换器的主要区别在于它能够通过信源模式和信宿模式的数据描述自动完成数据转换,而无需人工编写转换代码。
图1 数据仲裁机制示意图
EJB仲裁器运行在Java虚拟机(JVM)上,它主要包含公共数据字典(Common Data Dictionary)和公共数据模式(Common Data Schema)和转换函数库(library)。其中,公共数据字典使所有系统都采用标准术语,并且对标准术语的解释都是唯一的;公共数据模式由覆盖特定功能域的E-R数据模型表示;EJB仲裁器通过转换函数库为客户端" title="客户端">客户端应用提供SQL语句转换和数据转换服务。
信源模式和信宿模式采用数据库视图来表示,在数据库视图中隐含了信源/信宿与公共实体之间的关联,并且包含每个数据元素的语义信息。EJB仲裁器可以根据不同情况选择适当的转换函数。除了模式关联以外,在信源/信宿模式中的每个属性都有相应的元数据,用来描述其含义和特征(如精度、单位等)。数据元素的含义由公共数据字典定义。每当需要在信源模式和信宿模式之间建立数据元素的关联时,EJB仲裁器通过搜索转换函数库来组织过程调用序列。
下面解释客户端应用怎样通过API调用来访问EJB仲裁器。
最简单的情况是客户端应用和EJB仲裁器位于同一JVM上,此时客户端应用可以直接调用EJB仲裁器提供的API接口。但在通常情况下,客户端应用与EJB仲裁器分布在不同的服务器上,这时需要借助CORBA、.NET、RMI等分布式计算技术来提供仲裁服务。
我们采用CORBA技术,即将EJB仲裁器与CORBA服务器绑定,并以CORBA服务的形式提供API接口。
下面具体介绍客户端程序怎样利用CORBA访问不同Java虚拟机上的EJB仲裁服务。
(1)启动EJB仲裁服务器
通过位于
如果利用缺省的配置文件启动EJB仲裁器,可以启动它提供的所有服务,但不能在CORBA注册表中绑定仲裁服务API接口。
(2)配置参数
为了将EJB仲裁服务与CORBA服务绑定,需要编辑位于
在将路径设置为
下面用一个实例程序来说明客户端程序访问EJB仲裁器的过程。
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextHelper;
import com.adventnet.mediation.service.poll.corba.PollAPI_CI;
import
com.adventnet.mediation.service.poll.corba.PollAPI_CIHelper;
public class Sample
{
public Sample()
{
}
public static void main(String[] args)
{
try
{
// 创建并初始化ORB
ORB orb = ORB.init(args, null);
// 获得命名服务
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// 对象引用
NameComponent nc = new NameComponent("PollAPI", "");
NameComponent path[] = {nc};
// 为PollAPI_CI取句柄
PollAPI_CI api = PollAPI_CIHelper.narrow(ncRef.resolve(path));
System.out.println(" 被初始化为 " + api.isInitialized());
}
catch (Exception e)
{
System.out.println(“在通过CORBA访问PollAPI时出现异常” + e);
}
}
}
5 结束语
数据互操作性是当前信息系统面临的重要问题,将来也仍然会有这种问题。数据标准化方法有助于解决这一问题,但它不是完整的解决方案。我们开发了一种基于EJB的数据仲裁服务器,用来弥补数据标准化方法丢失的部分解决方案。
数据标准化方法是数据共享的基础,数据仲裁方法是对数据标准化方法的必要补充。数据标准化与数据仲裁相结合是今后数据互操作技术的发展方向,与之相关的一些数据互操作关键技术:公共表示与元数据、数据仲裁和语义仲裁、中间件、数据仓库、XML门户等也将成为研究热点。
参考文献
[1] Sciore, E., Siegel, M., Rosenthal, A. Using semantic values to facility interoperability among heterogeneous information systems. ACM Transactions on Database Systems, 1994.
[2] Jerry Smith (DISA Interoperability Directorate), “The Data Is Key”, CALS/EC International Symposium, 2001.
[3] John S. Erickson, Information Objects and Rights Management: A Mediation-based Approach to DRM Interoperability, D-Lib Magazine April 2001.
[4] Sun Microsystems White Paper, Interoperability Across the Technical Enterprise, Technical Computing in the Network Economy, 1999.
[5] OMG, The Common Object Request Broker: Architecture and Specification (Version 2.4.2), Febuary 2001.