`

对JDO的架构作一个简单的介绍

阅读更多
下面我开始对JDO的架构作一个简单的介绍。

  下图显示了JDO架构主要的几部分:

  

  

  JDOHelper :javax.jdo.JDOHelper类拥有一些静态的助手(helper)方法。这个方法可以获得一个持久对象的生命周期还可以用来创建一个与具体实现厂商无关的PersistenceManagerFactory的实例,这里使用了工厂(factory)模式。

  PersistenceManagerFactory:javax.jdo.PersistenceManagerFactory类可以通过JDOHelper类的助手方法获得,这是一个标准的工厂类,他可以创建PersistenceManager类。

  PersistenceManager:javax.jdo.PersistenceManager接口是应用程序经常要使用的一个主要的JDO接口。每一个PersistenceManager负责控制一组持久化对象而且他还可以创建新的持久化对象或删除现有的持久化对象。Transaction和PersistenceManager之间存在这一对一的关系,同时PersistenceManager又是Extent和Query的工厂类,也就是说这两个对象可以通过PersistenceManager创建。

  PersistenceCapable:用户定义的持久化类都必须扩展实现PersistenceCapable接口。大多数JDO实现的供应商都提供一种“增强器”(enhancer)的功能,它可以向你要实现的持久化类中增加PersistenceCapable接口的实现。也就是说,其实你根本不会自己去实现这个接口。

  Transaction:每一个PersistemceManager和javax.jdo.Transaction都是一一对应的。Transactions用来处理事务,它使得持久化数据可以成批的一次性添加到数据表中,如果出现异常就将数据回滚。

  Extent:java.jdo.Extent是映射数据库中具体表的类的一个逻辑视图。Extent可以拥有自己的子类,它通过PersistenceManager获得。

  Query:java.jdo.Query接口用具体的厂商JDO来实现,它负责处理JDO查询语言(JDOQL),这些JDOQL最终被解释为实际的数据库SQL语言。同样这个接口也是通过PersistenceManager获得的。

  下面的例子显示的JDO接口如何操作并执行一个查询并更新持久化对象。

  例子:JDO接口的交互

  //通过助手类获得PersistenceManagerFactory

  PersistenceManagerFactory factory=

  JDOHelper.getPersistenceManagerFactory(System.getProperties());

  //通过PersistenceManagerFactory获得PersistenceManager对象

  PersistenceManager pm=factory.getPersistenceManager();

  //创建并开始一个事务

  Transaction tx=pm.currentTransaction();

  tx.begin();

  //查询employee表中每周工作时间大于40小时的研究人员

  Extent ex=pm.getExtent(Employee.class,false);

  //获得一个Query

  Query query=pm.newQuery();

  //设置这个query作用的范围,即查询的是那个表或记录集

  query.setCandidates(ex);

  query.setFilter("division.name == \"Research\" "+ "&& avgHours > 40");

  Collection result=(Collection)query.execute();

  Employee emp;

  for(Iterator itr=result.iterator();itr.hasNext();){

  emp=(Employee)itr.next();

  emp.setSalary(emp.getSalary()*2);

  }

  //提交记录释放资源

  tx.commit();

  pm.close();

  factory.close();

  上面的代码片断包括了JDO几个主要的接口,在此你可以对JDO各个接口的使用方法有一个粗略的印象,以后实际的应用中JDO接口也都是这样使用的。

  JDO的异常

  JDO不会抛出通常的运行时异常,比如NullPointerExceptions、 IllegalArgumentException等它只抛出JDOException异常。JDOExcetion的结构如下图所示,这是一个继承的层次结构,从他们的字面含义就可以看出它们的用途,在这里就不详细说了,要想了解JDO异常的层次结构可以参考它们的JavaDoc。

  
  • 大小: 17.3 KB
分享到:
评论
3 楼 mht19840918 2008-02-27  
JDO没有一个好的开源免费实现,好的产品都是商业产品,并且在国内没有销售和技术支持。这就造成了JDO只有学习之用,不能把它用在实际项目中,否则的话,你把软件卖给客户的时候,还要告诉他,你还要另外去买一个国外的软件产品,并且在国内没有技术支持,出了持久层的问题,我们也解决不了,请你自己打国际长途去解决问题,你认为客户能答应吗?
我在此提出它,扩大认识面,就像XMLHttpRequest一样,当年微软设计它的本意也不是针对ajax的,也是一个偶然被人从古董堆翻出来的,说不定那天我们能用到它的思想,呵呵。

希望和诸位多交流~
2 楼 mht19840918 2008-02-27  
JDO的标准很不完善,存在重大缺陷。最主要的问题体现在PO不能脱离PM(相当于 Hibernate的Session)而存在,这是个非常严重的问题,会造成编程的时候进行大量VO的拷贝操作,烦琐极了;另外一个重大缺陷是静态的 POJO的Enhancer,不能运行期动态Enhance,无法进行增量编译和调试,编程和调试起来非常烦琐,每次都要手共运行一个工具对POJO进行 Enhance;此外还有一些缺陷,例如JDOQL不完善,映射关系的表达不够强大等等。Hibernate的源代码非常少,而且写的非常简洁,我总觉得挺奇怪的,这么少的源代码能够实现这么多的功能,是个奇迹。 Hibernate的源代码树分的很清楚简单,源代码很易读,我一旦碰到文档中没有讲到的问题,或者文档中提到但是我搞不清楚的地方,我就去源代码中找,所有的问题都豁然开朗,而且让我对Hibernate的运行原理和细节搞的特别清楚,好像Hibernate就像自己写的代码一样,很清楚的知道,怎么写程序可以让Hibernate运行效率最高,最省内存,程序出了错误,很清楚的知道是什么地方的问题,怎么解决。
1 楼 qichunren 2008-02-27  
你用过它没有啊?感觉和Hibernate比起来如何啊?

相关推荐

    全面了解JDO数据库编程.rar

    2. **JDO架构** JDO包含数据存储管理器(PersistenceManager)、查询语言(JDOQL)和持久化类等核心组件。数据存储管理器负责对象的生命周期管理,包括实例化、持久化、查询和删除。JDOQL是一种类似Java的查询语言...

    全面了解JDO第六部分

    在深入探讨Java Data Objects(JDO)之前,让我们先明确一个概念——JDO是Java编程语言中用于实现对象持久化的标准框架。它旨在为开发人员提供一种以Java为中心、面向对象的方式来访问和管理持久化数据和数据存储。 ...

    全面了解JDO数据库编程

    一个简单的JDO应用通常包括创建持久化类,定义持久化字段,配置数据存储,然后在代码中使用`PersistenceManager`进行CRUD操作。 总结来说,JDO为Java开发人员提供了一种强大且灵活的方式来处理数据库操作,通过...

    六大类系统架构图及其简介.doc

    structs1 是一个轻量级的架构图,它提供了一个简单的框架来构建应用程序。structs1 的主要特点是轻量级、灵活、可扩展和高性能。 ... (后续内容) 这六大类系统架构图都是业界公认的架构模式,广泛应用于软件...

    各技术框架架构图.doc

    iBATIS 提供的持久层框架包括 SQL Maps 和 DataAccess Objects(DAO),同时还提供了一个利用这个框架开发的 JPetStore 实例。 iBATIS 的最大优点是可以有效地控制 SQL 发送的数目,提高数据层的执行效率!它需要...

    Struts JDO plug-in-开源

    Struts JDO 插件是开源社区为Struts框架提供的一种扩展,它的主要目标是简化在Struts...总的来说,Struts JDO插件是Java Web开发中的一个重要工具,尤其对于那些希望在Struts应用中采用JDO作为持久化机制的开发者来说。

    java持久层框架对比

    - **简介**:JDO是一个用于Java应用程序的API,用于简化与对象数据库或关系型数据库的交互。 - **优点**: - 提供了一个简单的API,用于存储和检索对象。 - **缺点**: - 功能较弱,不支持复杂的数据库操作。 - ...

    论J2EE中Hibernate+Spring架构及其在OA系统开发中的应用

    Hibernate是一个基于Java的开放源代码的持久化中间件,它对JDBC进行了轻量级封装,不仅提供了ORM(对象-关系映射)服务,而且还提供了数据查询和数据缓存等功能。通过Hibernate API,Java开发人员能够更加便捷地操作...

    java面试宝典

    56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、java 和javasciprt 的区别。 15 61、什么时候用assert? 16 62、error和exception有什么...

    spring 详细介绍 api

    Spring的数据访问层还包括对JPA(Java Persistence API)和JDO(Java Data Objects)的集成,以及声明式事务管理,使得事务处理变得简单且一致。 除此之外,Spring还提供了大量其他功能,如Spring Security用于安全...

    Struts 数据库项目开发宝典 11

    Struts是一个开源的Java Web框架,它主要用于构建和维护可重用、模块化的Web应用程序。在"Struts 数据库项目开发宝典 11"中,我们聚焦的是使用Struts框架与JDO(Java Data Objects)进行日志管理系统的开发。这个...

    Web开发+java+ssh框架

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    jpa开发手册[文].pdf

    Entity Bean是JPA中的核心概念,是一个Java类,用于描述一个实体的结构和行为。 Entity Bean由以下几个组成部分组成: * 属性变量:是Entity Bean中的一个变量,用于描述实体的结构。 * 主键和实体标识:是Entity ...

    详细介绍 jpa 开发文档

    - **主键和实体标识**:每个实体 Bean 都需要有一个唯一的标识符,即主键,用来区分不同的实例。 2. **EntityManager**:这是一个中心接口,提供了与实体 Bean 交互的方法。 - **配置和获取 EntityManager**:...

    spring详细介绍PPT

    **Spring DAO**模块提供了对JDBC的抽象层,创建了一个异常层次结构,使得处理数据库错误和不同数据库供应商的错误变得更加简单。此外,Spring还支持与其他ORM(对象关系映射)框架的集成,如JDO、Hibernate和iBatis...

    j2EE基础概念(总结)

    - JDO是一个Java持久化规范,提供了一种简单的方法来存储Java对象到数据库或其他持久化存储介质中。 #### XML 1. **XML相关技术** - **CSS(层叠样式表)**:用于描述HTML或XML文档的外观和格式。 - **XSL(可...

Global site tag (gtag.js) - Google Analytics