一种基于j2ee的数据持久化方法及系统的制作方法

文档序号:6336953阅读:173来源:国知局
专利名称:一种基于j2ee的数据持久化方法及系统的制作方法
技术领域
本发明涉及一种在J2EE平台下异构数据库环境中通用的数据持久化方法及系 统,目标是提高小型信息系统持久层的开发效率、降低在异构数据库之间的迁移成本。
背景技术
作为信息持久化的主要手段,数据库已经成为绝大多数信息系统中不可或缺的一 部分。为了满足各种各样的数据库应用需求,大量的异构数据库应运而生。目前在信息系 统中使用较为广泛的异构数据库有 关系型数据库建立在关系数据模型上,将数据分解成为二维数据表进行存储。 关系数据库具有数据结构化强、数据独立性大、数据冗余较多等特点,其对于数据读、写的 表现比较均衡。 对象数据库将面向对象的方法和数据库技术结合起来,使数据库的分析、设计 最大程度地与人们对客观世界的认识相一致,其读写的表现比较均衡,但整体性能要比关 系数据库稍逊一筹。
XML数据库建立在XML格式文档的基础上,能够对半结构化和具有一定层次结 构的数据进行有效的存取管理,特别适用于管理和查询网络数据,其读写的表现比较均衡, 整体性能要比对象数据库更差,但是由于XML格式信息更适于在网络中传输并且其数据结 构便于人类理解,XML数据库仍然在数据库的使用中占有一席之地。 目录数据库一种基于目录服务的数据库,对于读取操作做了特别的优化,因而 更适用于读数据比写数据次数大的多的信息系统。此外,随着Internet的广泛普及,Web信息系统的数量突飞猛增。Web服务器作为 连接客户端和数据库服务器的一个中间层,既要对用户的访问请求进行分析和处理,又要 和数据库进行数据交互。为了实现Web服务器的模块化和层次化,系统设计开发时都会把 Web服务器划分为负责分析和处理用户访问请求的业务逻辑层以及负责与数据库服务器进 行交互的数据持久层。于是,如何使信息系统的数据持久层方便、快捷、高效的与各种异构 数据库之间进行交互成为了 一个重要的研究课题。为了方便用户在J2EE平台上实现对数据库的访问,J2EE推出了一系列访问数 据库的标准接口,如 Java Database Connectivity (Oracle Corporation. JDBC[EB/0L]. http://java. sun. com/products/jdbc/overview. html)、Java Naming and Directory Interface(OracleCorporation. JNDI[EB/0L]. http://java. sun. com/products/jndi/ overview, html)等。使用这些接口有很多的好处首先,利用标准接口开发的信息系统不 但可以跨平台运行,更可以在同构数据库之间不受数据库供应商的限制;其次,标准接口通 常都使用该种数据库的主流语言,并保留了其查询语言的全部能力,允许用户调用存储过 程、执行特殊自定义查询甚至使用与数据库相关的特性操作;最后,直接使用标准接口会获 得很好的操作性能。然而直接使用标准接口也会有很多不便一、开发人员必须确保数据库 资源得到了妥善的处理。其中最显著的问题是能否有效的管理数据库连接。在打开并使用完数据库连接之后(或者遇到异常时)必须确保将其正确的关闭,否则就有可能耗尽数据 库连接从而导致系统崩溃。二、直接使用标准接口编程意味着开发人员需要在代码中构造 与数据库相关的查询语句,一旦数据模型发生了变化,那么必须手工修改四处散布的查询 语句以及代码。三、大多数标准接口所提供的API方法都可能抛出已检测的DBExc印tion, 开发人员不仅要保证捕获这些异常,而且还要保证一旦异常抛出会执行相应的清除工作。 此外,DBException的异常处理逻辑往往非常相似,导致持久层中会出现大量重复代码, 降低了系统的可维护性。四、直接使用标准接口往往会导致应用程序与数据源之间的高 度耦合,而高耦合、高重复是使得程序难以测试的两个主要原因(J. B. Rainberger,Scott Stirling. JUnit Recipes :Practical Methods for Programmer Testing[M]. Manning Publications Co. ,2005.)。鉴于直接使用标准数据库接口的诸多弊端,一些持久化中间件试图在标准接口之 上提供一层轻量级的封装来解决这些问题(汪萌,曲俊华.基于Hibernate技术的持久层 解决方案及实现[J].计算机系统应用,2010,(03).)。这些中间件为用户隐藏了使用标准 接口的大部分细节,带来了透明的数据持久化体验。相对于直接使用标准接口,使用持久化 中间件可以帮助开发人员节省大量的时间。但持久化中间件也存在一个重要的缺陷,即只 提供了对于某一个标准接口的封装,使用这些中间件进行数据持久化仍然会引起信息系统 与底层的数据库较高的耦合度,如果信息系统由于某种原因要将现有数据库更换为另一种 异构数据库(如从关系数据库变成目录数据库),则需要付出较为沉重的代价。更重量级的J2EE持久层框架弥补了持久层中间件在异构数据库集成方面 的不足,它们符合目前J2EE平台的持久化规范,并且可以集成各种异构数据库的标 准访问接口。然而这些功能强大的持久层框架往往非常复杂而且体积庞大。例如 DataNucleus(DaanucleusCommunity. Daanucleus[EB/0L]. http://www.datanucleus. org/. ) 2. 1. ORelease的核心JAR包的大小就接近2MB。不仅如此,要想使用DataNucleus 的全部功能还需要许多额外的JAR包,如asm、ehcache, poi等,共计19. 5MB。如此重量级 的持久化框架对于一些小型Web信息系统来说实在过于庞大,程序员要熟练掌握类似的持 久化框架并发挥它的优势也绝非易事。综上,J2EE平台下的已有数据持久化方法的缺点如下第一,标准接口功能强大却难以使用;第二,简单的持久化中间件虽然在一定程度上简化了标准接口的使用,但仍然因 为与数据库类型高度耦合而受到了限制;第三,功能强大的持久化框架可以让我们彻底摆脱对于底层数据库的考虑、专心 于业务逻辑的处理,却结构复杂且难于掌握。针对需要快速开发的小型信息系统,需要一种简单易用、能够低成本的在各种异 构数据库之间进行迁移的J2EE数据持久化方法。该方法接口明确、易于开发、所有操作 完全符合面向对象的思想、能够集成可通过J2EE标准接口访问的多种异构数据库、只有很 少或者没有第三方依赖、能够通过对Java实体对象进行CRUD (ffikipedia. CRUD[EB/0L]. http://en. wikipedia. org/wiki/Create,_read,_update_and_delete)操作。使用该方法 进行开发的Web信息系统,能够达到简单便捷的构建系统持久化层、通过简单配置即可实 现异构数据库之间的持久化迁移。

发明内容
本发明的目的在于克服现有持久化技术中存在的一系列问题,提供J2EE环境下 的通用数据持久化方法及系统。本发明的技术方案为一种基于J2EE的数据持久化方法,包括以下步骤1)用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;2)构建待持久化Java类对象,对对象的属性值进行赋值;3)构建Java实体对象查询树。4)以创建的待持久化Java类对象和Java实体对象查询树为参数,调用持久化接 口进行持久化操作。所述的映射元数据包括类元数据和属性元数据,类元数据指定Java实体对象类 中的主键属性并描述Java实体对象类与底层数据库结构之间的映射关系;属性元数据描 述Java实体对象属性与底层数据库数据项之间的关系。所述持久化接口包括 isObjectExist 接口、saveOb ject 接口、loadOb ject 接口、 getObjects 接口、updateObject 接口、updateObject 接口禾口 deleteObject 接口,其中,isObjectExist接口判断待持久化Java类对象是否已经存在;saveObject接口保存待持久化Java类对象到底层数据库中;loadOb ject接口从数据库中读取一个满足约束条件的对象;getObjects接口从数据库中读取所有满足约束条件的对象;updateObject接口将数据库中满足约束条件的对象进行更新;deleteObject接口从数据库中删除符合约束条件的对象。所述持久化操作的方法为 A、从待持久化Java类提供的数据读取接口,读取Java实体对象数据域的值,将所 述值转换为底层数据库数据要求的类型和格式;B、将Java实体对象查询树解析为与底层数据库相对应的数据查询约束语句;C、按照底层数据库操作语言要求生成数据库操作语句;D、以C步骤生成的数据库操作语句为参数,调用底层数据库的标准接口,进行数 据操作。将所述值转换类型和格式的方法为第一步将所述值按照底层数据库的类型与格式进行重新组装;第二步调用数据汇的赋值函数完成组装后数据的持久。所述查询树包括逻辑节点和表达式节点。所述逻辑节点包含一个或多个逻辑或表达式节点作为子节点;表达式节点表达属 性名、属性值及属性名和属性值之间的关系。所述的数据库操作语句以持久化接口类型区分操作类型,以数据查询约束语句表 示查询约束条件,采用对象类的映射元数据指定操作位置。本发明的另一个目的是提供基于J2EE的数据持久化系统,包括数据类型适配器、 查询语言解析器和操作语言解析器数据类型适配器,将Java实体对象数据域的值转换成为符合底层数据库要求的
6格式和类型。查询语言解析器,将Java实体对象查询树解析为相应的数据查询约束语句;操作语言解析器,根据调用的持久化接口类型、标记待持久化Java类对象的映射 元数据和数据查询约束语句生成数据库操作语句。与现有数据持久化方法相比,本发明的方法解决了如下问题第一,通过向用户提供一组纯Java的异构数据库通用访问接口,屏蔽了异构数据 库对信息系统所提供接口的差异,使信息系统与底层数据库类型完全解耦,把接口使用者 从大量的数据库配置细节和操作编码当中解放出来。第二,借助关于持久化类的一些映射信息和数据类型适配器,程序员不必考虑 Java实体对象与底层数据库的“阻抗不匹配”(田珂,谢世波,方马.J2EE数据持久层的解 决方案[J].计算机工程,2003,(22).),降低了信息系统持久化层的开发难度。第三,使用 Java Annotation (Oracle Corporation. JDBC[EB/0L]. http:// download, oracle, com/javase/1. 5. 0/docs/guide/language/annotations, html) $ X^t Java类对象的标记,实现了配置文件与实体数据的完整统一,避免了在配置文件与实体数 据分离模式下对其一进行修改所造成的不同步性。第四,进行数据持久化时不依赖于任何脚本语言,整个过程完全是Java接口调 用,与数据库相关的操作语言由框架根据Java类及其注释统一生成,减轻了开发者的负 担,避免了由于开发者对数据库语言使用不规范造成的数据损毁。


图1是数据持久化方法的流程框图;图2是转换数据类型和格式的方法流程示意图;图3是Java实体对象查询树示意图。图4是本发明系统中各模块协作示意图。图5是实施例中的基于异构数据库的轻量级持久层框架的结构示意图。。
具体实施例方式以下结合具体实施例和附图对本发明方法进行详细说明。本发明方法旨在为小型Web信息系统开发者提供一个快速搭建数据持久层的途 径,为了满足绝大多数小型信息系统的数据持久化需求而又不至于过于臃肿,本方法将数 据持久操作抽象为六种持久化操作接口。各接口的参数及返回值如表1所示。使用这些接 口,用户可以直接面向被映射元数据标记过的Java实体对象实现数据的持久化。表1LAPFA数据库统一访问接口
权利要求
一种基于J2EE的数据持久化方法,包括下列步骤1)用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;2)构建待持久化Java类对象,对对象的属性值进行赋值;3)构建Java实体对象查询树。4)以创建的待持久化Java类对象和Java实体对象查询树为参数,调用持久化接口进行持久化操作。
2.根据权利要求1所述的基于J2EE的数据持久化方法,其特征在于所述持久化 ^ □ isObjectExist ^ saveObject ^ loadObject ^ getObjects ^ updateObject 接口、updateObject 接口禾口 deleteObject 接口,其中,isObjectExist接口判断待持久化Java类对象是否已经存在; saveObject接口保存待持久化Java类对象到数据库中; loadObject接口从数据库中读取一个满足约束条件的对象; getObjects接口从数据库中读取所有满足约束条件的对象; updateObject接口将数据库中满足约束条件的对象进行更新; deleteObject接口从数据库中删除符合约束条件的对象。
3.根据权利要求2所述的基于J2EE的数据持久化方法,其特征在于所述的映射元数据 包括类元数据和属性元数据,类元数据指定Java实体对象类中的主键属性并描述Java实 体对象类与底层数据库结构之间的映射关系;属性元数据描述Java实体对象属性与底层 数据库数据项之间的关系。
4.根据权利要求2所述的基于J2EE的数据持久化方法,其特征在于所述持久化操作的 方法为A、从待持久化Java类提供的数据读取接口,读取Java实体对象数据域的值,将所述值 转换为底层数据库数据要求的类型和格式;B、将Java实体对象查询树解析为与底层数据库相对应的数据查询约束语句;C、按照底层数据库操作语言要求生成数据库操作语句;D、以C步骤生成的数据库操作语句为参数,调用底层数据库的标准接口,进行数据操作。
5.根据权利要求4所述的基于J2EE的数据持久化方法,其特征在于将所述值转换类型 和格式的方法为第一步将所述值按照底层数据库的类型与格式进行重新组装; 第二步调用数据汇的赋值函数完成组装后数据的持久。
6.根据权利要求2所述的基于J2EE的数据持久化方法,其特征在于所述查询树包括逻 辑节点和表达式节点。
7.根据权利要求6所述的基于J2EE的数据持久化方法,其特征在于所述逻辑节点包含 一个或多个逻辑或表达式节点作为子节点;表达式节点表达属性名、属性值及属性名和属 性值之间的关系。
8.根据权利要求4所述的基于J2EE的数据持久化方法,其特征在于所述的数据库操作 语句以持久化接口类型区分操作类型,以数据查询约束语句表示查询约束条件,采用对象 类的映射元数据指定操作位置。
9. 一种基于J2EE的数据持久化系统,包括映射元数据读取器、数据类型适配器、查询 语言解析器和操作语言解析器,数据类型适配器,将Java实体对象数据域的值转换成为符合底层数据库要求的格式 和类型;查询语言解析器,将Java实体对象查询树解析为相应的数据查询约束语句; 操作语言解析器,根据调用的持久化接口类型、标记待持久化Java类对象的映射元数 据和数据查询约束语句生成数据库操作语句。
全文摘要
本发明公开了一种基于J2EE的数据持久化方法和系统,其方法包括1)用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;2)构建待持久化Java类对象,对对象的属性值进行赋值;3)构建Java实体对象查询树;4)以创建的待持久化Java类对象和Java实体对象查询树为参数,调用持久化接口进行持久化操作。系统包括数据类型适配器、查询语言解析器和操作语言解析器。本发明的方法和系统解决了Java实体对象与底层数据库的“阻抗不匹配”,屏蔽了异构数据库对信息系统所提供接口的差异,不依赖于任何脚本语言,整个过程完全是Java接口调用,降低了持久化层的开发难度。
文档编号G06F9/44GK101980213SQ20101056253
公开日2011年2月23日 申请日期2010年11月23日 优先权日2010年11月23日
发明者屈夏, 杨燕, 王帅, 钟华 申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1