【IT168 专稿】摘要:本文从介绍DdlUtils着手,讲述了DdlUtils在Mobile Client方面的应用。并结合作者的应用经验对DdlUtils的核心Package和一些重要的类进行了讲解,使开发人员对DdlUtils的使用有更清晰的认识。
1 什么是DdlUtils
DdlUtils其实是ASF(Apache Software Foundation)的数据库项目(http://db.apache.org/)下的一个子项目。久负盛名的100%纯Java开发的关系型数据库Derby也是ASF数据库项目下的一个子项目。
DdlUtils被称为是一个非常小巧,并同数据库定义语言(Database Definition Language)文件一起的易用组件。而这个所谓的数据库定义文件实际上就是一个XML文件,包含了数据库schema的定义,例如:表(Table),列(Column),索引(Index)等。
开发人员可以参考DdlUtils项目的主页:http://db.apache.org/DdlUtils/获取最新的信息。
2 DdlUtils在Mobile Client方面的应用
结合笔者的实际开发经验,DdlUtils在Mobile Client应用方面存在相当的优势,主要体现在以下两个方面:
2.1 分布式数据处理
在企业的实际应用中,例如很多的跨国企业,数据处理场所可能不在Office,而是在客户所在地,由于与数据中心连接条件的制约,客户的很多信息资料不可能时刻保持与数据中心保持同步,而是利用笔记本电脑,PDA等便携式设备通过客户端软件对客户的数据进行本地处理;等到客户端可以上线时,再将本地客户数据更新到数据中心。
在另外一些应用中,例如:连锁公司的各个营业所,每天大部分时间也是本地业务处理,而是在某个约定时间将营业信息上传到总公司数据中心。客户端没有必要也不可能都随时与总公司数据中心保持连接,因为如果所有客户端同时在线会加重数据中心服务器的负担,特别是同时与数据中心进行数据同步时。这里需要的是各个客户端能够独立地对本地数据进行处理,并且分布地与数据中心进行同步。
图1是客户端使用DdlUtils实现数据的分布式处理示意图。DdlUtils通过获取数据中心数据源来获取数据库模型定义文件,利用数据库模型定义文件(Model.XML)就可以轻松将本地数据(Dump.XML)“透明地”更新到数据中心。

图1:使用DdlUtils实现分布式数据处理
该方面的应用特征是:
(1)适用于移动化(不受工作场所限制),移动化可以使企业得到了更多利润和更快的执行时间。
(2)在分布式、客户端为中心的设备上存储,处理数据。客户端运行便携式客户端软件来输入或取出数据。
(3)提供基于XML的一种整合分布式的offline数据,以服务器为中心的,例如:MySQL或Oracle这样的关系型数据库的解决方案。
(4)以关系型数据库服务器为中心,存在许多分布式,间歇性连接的客户端。间歇性连接意思是:大部分的时候,客户端是离线的,这时客户端可视为一个中心数据库实例,管理所有的offline数据。在某些时候,客户端是在线的,这时就可以通过DdlUtils实现offline数据的更新。
2.2 数据库转移
这里的数据库转移包含2种应用,一种是同类型数据库之间的数据转移,例如:本地数据更新,数据备份等。另外一种是不同类型数据库之间的数据总和,可能分布式数据库采用的是不相同的关系型数据库,
例如:分布式数据库体系中,有些小的应用单位使用MySQL数据库体系,而有的大型单位采用的是Oracle数据库。DdlUtils使用与JDBC相同的标准类型,使得开发人员可以不考虑数据库之间的差异,不用花费精力在数据库定义的schema上面。
下图2是使用DdlUtils实现数据库转移的示意图。

图2:利用DdlUtils实现数据库转移
这种应用的特征是:
(1)很简单地允许你在类似MySQL,Oracle和SQL Server这样的关系型数据库之间,或和他们的任意组合之间实现数据同步。
(2)不花时间在设计数据库schema,数据转移的过程对开发人员而言是透明的。
3 核心Package和一些重要类
虽然DdlUtils也提供了丰富的Package和许多的class,但是开发人员没有精力也没有必要把全部的Package和class都熟悉和应用。下面笔者结合开发经验整理了一些重要的Package和class,供开发人员参考:

需要补充的是,其中提到的动态Bean,也是ASF公共项目(Commons)下的一个子项目(BeanUtils)组件中的一个接口,类似于Properties,用于存放对象属性名称,类型和值。
具体内容请参见:http://commons.apache.org/beanutils/。
4 使用前提
DdlUtils不是单独就能够执行的,需要其他的支持模块,以下DdlUtils以及其依赖模块的获取信息和说明:
(1) DdlUtils可以到http://db.apache.org/DdlUtils/下载最近的库文件和参考文档,当前最新版本为1.0,下载文件为DdlUtils-1.0-bin.zip。
(2) 由于DdlUtils需要通过数据源来获取数据模型定义文件,通过试用比较,作者特别向开发人员推荐ASF的另外一个公共项目:DBCP(Database Connection Pooling),其提供一个BasicDataSource的数据源类,能够方便的提供支持各种JDBC驱动,基于连接池(Connection Pool)的数据源。开发人员可以到http://commons.apache.org/dbcp/获取最新的信息。当前最新版本为1.2.2,下载文件为commons-dbcp-1.2.2.zip。
需要注意的是,上述2个压缩文件都不是直接使用的jar文件,都需要进行解压。
其中DdlUtils的jar文件在DdlUtils-1.0-bin.zip解压目录下dist子目录中:DdlUtils-1.0.jar;其参考文档在doc子目录中,其他的附带jar文件在lib目录中。
而DBCP的jar文件在commons-dbcp-1.2.2.zip解压根目录下:commons-dpcp-1.2.3.jar,参考文档在docs子目录中,没有其他的附带jar文件。
这里需要将DdlUtils的jar文件以及DdlUtils所有的附带jar文件和DBCP的jar文件都要添加到CLASSPATH变量中。不过这样做实在是太麻烦了,笔者是将所有的这些文件都copy到JDK的安装目录下jre/lib/ext目录中。现在,你就可以正常使用DdlUtils组件了。
5 总结
(1) 通过DdlUtils的应用说明和组件介绍,可以了解到DdlUtils在实现客户端的分布式数据处理和数据库移动等功能,增强了客户端的移动性和实效性。
(2) DdlUtils提供基于XML的一种整合分布式的offline数据,以服务器为中心的,在分布式、客户端为中心的设备上存储,处理数据。只有当客户端与服务器连接时才需要保持数据同步,大多数时候客户端都是通过便携式客户端软件进行客户端数据处理。