日志文章

2007年04月25日 10:50:03

何谓持久性框架

何谓持久性框架  
    持久性框架是一组软件服务,将应用程序与其使用和操纵的数据源分离。持久性框架位于机构的数据源之上,隐藏访问这些数据源的数据访问API(如JDBC,JDO或实体EJB)。提供的服务应完全抽象和从这个数据源使用和操纵数据的物理细节。下图演示持久性框架在系统体系结构中的地位。  
注:持久性框架就是DAO及其隐藏的对数据源的访问机制。  
 
下图为体系结构各层功能性图示:  
   
 
持久性框架中提供下列服务,让开发人员在持久性框架之上建立应用程序:  
 
l 提供分开数据持久逻辑与表示和业务逻辑的整洁机制  
在上面的体系结构框图中,只有业务层可以访问公司数据库。业务层用Data   Access   Object模式与公司数据库交互,而不用JDBC之类的数据访问API访问数据源。  
 
l 不让框架上建立的应用程序了解数据所在的数据库平台  
将所有数据连接逻辑包装到数据访问对象中后,业务应用程序的开发人员不需要知道连接的数据库平台类型,连接数据库时所需的任何安全信息(用户ID与口令)或数据库网址。  
 
l 抽象数据库中存储数据的物理细节和数据库中数据实体之间存在的关系  
建立在上述体系结构布局之上的应用程序不必直接对数据库发出SQL查询,不必知道数据的物理结构,而用数值对象访问数据库。  
 
l 简化开发过程,隐藏打开数据库连接、发出数据读取与操纵命令和事物管理的细节  
Data   Access   Object与Value   Object模式完全分离业务应用程序的开发人员与其在应用程序中使用的数据源,不需要知道数据访问API,而用简单接口读取与操纵数据。  
 
DAO模式很强大,因为:  
l 它抽象数据源读取数据的方法。DAO模式可以用任何Java数据访问API进行处理,包括:  
1. JDBC   API   —   JDBC是第一个标准数据库访问API,位于J2EE中,是J2SE的扩展。  
2. SQLJ   —   SQLJ是较新的API,是几个一流的数据库和Java应用程序服务器厂家提出的。SQLJ使开发人员可以把SQL代码直接嵌入Java代码中,然后用代码预处理器将其转换成Java代码。  
3. 实体EJB   —   实体EJB规范是数据持久性规范,开发人员可以抽象组件体系结构中的数据库代码。  
4. Java   Data   Object(JDO)   —   JDO规范是最新的数据库访问API,可以用标准Java对象取得和保存数据库中的数据。JDO对象比实体EJB简单,同时仍然提供与实体EJB相似的功能。  
l 整洁分离业务与数据逻辑,减少应用程序开发人员混合业务与数据逻辑的情形。把所有数据访问代码集中到一个逻辑结构之中,开发人员可以用逻辑接口读取与操纵数据。  
l 提供一组标准编程接口,可以解决常见数据库开发问题,包括:  
1. 主键生成  
2. 并发性管理与锁  
3. 事务管理  
4. 性能问题  
 
O/R   Mapping技术  
对于Java有许多持久化对象的方式。我们也非常关注Java应用程序的持久层。我将介绍一些著名的持久框架。本文将关注开源的O/R   Mapping工具hibernate。  
l JDBC  
许多开发者用JDBC进行数据库程序的开发。此中方式很多情况下都使用DAO模式,采用SQL进行查询。虽然用此方式可以使应用程序代码与具体的数据库厂商和数据库位置无关,不过JDBC是低级别的数据库访问方式,JDBC并不支持面向对象的数据库表示。JDBC数据库表示完全围绕关系数据库模型。在大型应用程序中的DAO中书写这样的代码,维护量是非常大的。  
l EJB  
EJB通常是程序员的第二个选择,目的是更加规范的用持久对象对数据库访问。Entity   EJB听起来就象银弹一样,因此它拥有了巨大的市场。然而,你必须去了解一个EJB容器,甚至花大价钱去购买。而且想要非常清楚的了解EJB规范也是非常费时的。在用EJB编码前,先要让专家理解API,然后需要了解每一个容器部署时所要关注的技术。此外,许多情况下商用容器的性能和支持也不是很好。  
l JDO  
4月JDO规范1.0提出可以使你将精力集中在设计Java对象模型,然后在企业应用软件架构的不同层面中存储传统的Java对象(Plain   Old   Java   Objects,简称POJOs),采用JDOQL语言进行SQL操作。一些公司(包括sun)企图根据JDO规范进行设计并实现JDO产品,然而他们都不能很好的进行实现。并且性能优化上比较差。  
l ibatis  
很多人对此可能非常不熟悉。ibatis是一个轻量级的持久层开发框架。目的也是提高持久层的设计与实现。它有二个核心组件SQL   Maps和DAO,减少了JDBC代码并且抽象持久性实现细节。SQL   Maps还将JavaBean映射到xml和sql中。对于关联表和执行复杂的查询不需要复杂的scheme。  
下图为ibatis架构的描述:  
 
   
l 其他持久性框架  
下列框架不再介绍。其中TopLink是商用框架。Castor,OJB是值得关注的架构,尤其是后者。Cocobase,expresso相对比较大,但也值得关注。  
Infobjects   ObjectDRIVER-   http://www.infobjects.com  
LiDO   -   http://www.libelis.com  
InterSystems   Cache   -   http://www.intersystems.com  
SimpleOrm   -   http://www.SimpleOrm.org  
VBSF   -   http://www.objectmatter.com  
The   ProductivityEnvironmentForJava   (PE:J)   -   http://www.hywy.com/  
JDX   -   http://www.softwaretree.com  
Cayenne   -   http://objectstyle.org/cayenne/  
TopLink   -   http://otn.oracle.com/products/ias/toplink/content.html  
EnterpriseObjectsFramework   -   http://www.apple.com/webobjects/  
Jakarta   ObjectRelationalBridge   -   http://jakarta.apache.org/ojb  
Castor   -   http://castor.exolab.org  
Jaxor   -   http://jaxor.sourceforge.net  
Cocobase   -   http://www.thoughtinc.com  
Expresso   -   http://www.jcorporate.com  
DataBind   -   http://databind.sourceforge.net  
JdoGenie   -   http://www.hemtech.co.za/jdo  
Abra   -   http://abra.sourceforge.net  
KodoJdo   -   http://www.solarmetric.com/Software/Kodo_JDO/  
Persistence   EdgeXtend   -   http://www.persistence.com/products/edgextend/  
FrontierSuite   for   J2EE   &   J2SE   -   http://www.objectfrontier.com  
FrontierSuite   for   JDO   -   http://www.objectfrontier.com  
BasicWebLib   -   http://basicportal.sourceforge.net/  
 
hibernate  
Hibernate使你可以用Java机制开发持久对象   —   包括关联,继承,组合和Java集合框架。   HQL是一个简化的对SQL的在OO机制上的扩展,在对象和关系数据库间提供一个桥的作用。Hibernate现在是Java世界中比较流行的ORM解决方案。  
提供HQL语言;透明持久性;复杂的ORM;简单但强大的API;自动PK生成;O/R   Mapping定义;双层cache架构;高性能;J2EE集成,对JMX,JCA等技术的支持;详细文档;开源软件的支持。。。等等特性。

类别: 点点滴滴 |  评论(2) |  浏览(4634) |  收藏
一共有 2 条评论
2楼 [楼主]羁鸟入林(张基会) 2007年04月25日 10:55:10 Says:
持久化就是保存,大多数的情况就是保存到数据库,也有其他的情况如保存到平文件、XML或者其他形式。所谓的ORM之所以成为一个“问题”是因为OO的设计方式和关系型数据库天生不合适,不过现在OO是开发的主流,而关系型数据库则是久经考验,都不能不用。由于对象和关系数据的映射是很困难的,让开发人员用JDBC直接访问数据库常常会带来很多问题(即使是水平很高的人也不一定可以很好的解决),所以人们想尝试在业务层和数据库中增加一个持久层,用来处理将Java对象的状态映射到关系型数据库中的数据上,这样业务层的开发人员可以专注于业务逻辑的实现。
1楼 [楼主]羁鸟入林(张基会) 2007年04月25日 10:51:22 Says:
对象化存储就是将数据库中的数据在对象中实例化,当修改这个对象的属性时,数据库中的相应字段也会随之改变,通常叫做持久层,在JAVA中叫做实体 BEAN(EJB中的一个分类),通常情况是由容器隐含的执行对应的SQL语句(CMP),有时也可以自己编写SQL执行逻辑(BMP)
发表评论