内容简介 Java Data Objects(JDO)提供了以Java为核心的使对象持久化的机制,以及将应用程序连接到底层持久数据仓库的标准API,从而简化了开发过程。对于每个有经验的Java开发人员来说,本书提供了关于JDO持久化的权威而全面的指导。通过实际的代码示例,本书介绍了持久对象的创建、读取、更新和删除,对象的生命周期和状态转换,JDO类和API,查询,体系结构,安全性等内容。此外还讨论了如何将JDO和EJBTM、JTA、JCA以及其他J2EETM技术集成,并且介绍了在单独程序和J2EETM组件中使用JDO的最优方法。如果您希望将更多的时间用于解决业务问题,而不是在持久性问题上浪费过多时间,那么就需要使用JDO技术,并且需要一本书来深入了解JDO,本书就是您最佳的选择。
前 言 对于持久性的需求是任何企业应用程序的先决条件,在使用Java语言编写应用程序时也是一样的。许多Java应用程序都是由将应用程序数据保存在某种存储设备并从中取出而使用的代码组成的,以便以后能够检索或使用它们。 Java是一种面向对象语言,开发人员本能地使用对象工作,对象在任何时候都由其成员字段表示状态。从程序员的观点来看,持久性关注获得应用程序特有的信息,这些信息事实上是对象的状态,然后使这些信息在超出虚拟机生命周期之后仍然可用。简而言之,即使Java虚拟机关闭以后,数据也应该可用。 开发人员可以通过多种方法来实现这一想法:获得这种状态并将其存储在文件中,或者使用JDBC存储在数据库中;使用Java串行化并存储整个对象的二进制表示;较通用的企业方案是通过EJB来使用应用程序服务器的工具。不考虑技术上的因素以及涉及到的复杂程度,这些方法都有一个共同的概念特征:当需要存储状态时,由开发人员从对象中获得状态信息,当应用程序需要时再重新建立这种状态。 现在有一种新的选择:Java数据对象(JDO),它改变了开发人员对应用程序中持久性的传统看法。JDO是有许多业界人士参与的,由JCP支持的开发标准。JDO规范是为了满足Java对透明持久性的需求而做出的努力,这将同时满足两种目标。一个目标是提供应用程序代码和底层持久性仓库(如数据库以及类似于JDBC的文件系统)之间的标准接口。另一个目标是通过提供可以操作并跨越持久对象的Java中心机制来简化安全的、可伸缩的应用程序开发。JDO在这两个方面都做得很好。通过JDO,开发人员可以集中精力围绕主要的目标来设计应用程序(解决业务问题),而不是围绕底层的持久性机制来设计应用程序。 由于在Java应用程序中以更好的方式实现了持久性,所以JDO迅速获得了开发团体的认可。开发人员对这种简洁及强大的功能感到满意,工程师对于开发时间的减少也感到满意。在本书中,我们不仅引导读者理解JDO本身,而且还帮助读者学习如何将这种技术应用到现实工作中。 本书读者对象 JDO是一项新技术,但它却提供了许多功能。如果您是一个涉及到Java持久性的架构师、开发人员,甚至是一个管理人员,并且愿意深入了解这一机制,这本书就很适合您。 作者的目的是将他们有价值的经验融合到易于获得的、统一的资源中,并且给公众一个确定的、权威的JDO技术源供参考。本书致力于提供前沿的实例来说明如何将JDO应用于现有的应用程序和创新的体系结构中,从而使读者对这个新技术有一个清晰的认识。我们希望在任何情况下,对Java的专业应用,从简单的程序到复杂的企业应用程序都可以发现本书的价值。当需要额外的细节时,本书提供了提高的方法并指出了额外的信息资源。 为了保持Java本身的视点,本书尝试在供应商与平台之间中立。偶尔也会讨论执行策略,但是作者团体的目标并不是讨论复杂的细节、评论或者推荐任何供应商特有的产品。 本书内容 本书内容包括: ● 有关JDO的一切内容,以及对于这一技术的深入解释。 ● 在应用程序中使用JDO,从单独的程序到J2EE组件。 ● 在使用JDO设计开发应用程序时的最佳实践。 第Ⅰ部分——引论 第1章:JDO概述 Java数据对象是Java应用程序中持久性的一个新标准。JDO改变了架构师和开发人员对应用程序中持久性的传统看法。这一章使您对JDO所关注的概念有深入的理解。 第2章:对象持久性的基础 第2章关注对象持久性背后的技术。解释并比较了实现持久性架构的不同方法。对于以JDBC为基础的对象关系映射解决方案给予了广阔的视野,并且概述了从头开始实现这种架构的尝试。 第Ⅱ部分——分论 第3章:JDO入门 在这一章解释了使用JDO工作的基础,并解释了如何使用JDO来创建、读取、更新和删除持久对象。还介绍了JDO背后的一些高级概念,目标是让读者充分理解JDO,从而使Java程序员能够使用JDO来开发应用程序。 第4章:对象生命周期 这一章讨论了对象的生命周期,以及为什么状态的改变对于应用程序开发人员是有意义的。深入探讨了实例的强制状态和可选状态,收集关于状态信息的方法以及改变状态的方法。 第5章:使用JDO进行开发 这一章关注JDO的基本概念,以及由JDO规范所定义的所有类和API。解释了接口的方法,如PersistenceManager、JDOHelper以及I18NHeler类,概述了JOD异常类以及服务提供者接口程序包中的类和接口。 第6章:查找数据 这一章讨论了JDO规范提供的查询工具。讨论了使用API以及JDOQL(JDO查询语言)重新获取并查询底层数据仓库的技术,并提供了示例。 第7章:体系结构 这一章介绍了可以使用JDO的不同应用程序体系结构。介绍了何时应使用JDO而不使用JDBC,可以用于JDO的不同类型的数据仓库,在多层的应用程序中使用JDO以及在多线程应用程序中使用JDO。 第Ⅲ部分——J2EE 第8章:JDO和JCA 这一章解释了如何通过J2EE连接器体系结构(J2EE Connector Architecture,JCA)来连接JDO与J2EE。在简要地介绍了JCA后,该章关注如何将JCA与JDO组合在一起,以及如何一起使用它们来建立J2EE应用程序。 第9章:JDO与EJB 这一章介绍了Enterprise JavaBeans(EJB)组件模型及其与JDO的关系。说明了不同的实现主题,并提供了广泛的源代码示例。该章的目的不是简单地展示如何使用EJB与JDO来编写代码,而是帮助您确定这两个API的组合是否对您有意义。 第10章:安全性 这一章定义了不同的安全性、它们的需求和目的。主要介绍了引用增强器,并给出了由JDO定义的以保护应用程序的规则和尺度。最后,该章查看了应用程序级别的安全性,以及如何使用J2EE和JDO来确保安全。 第11章:事务 这一章讨论了围绕Java事务的基本概念,JDO中包含的事务能力,以及如何将其用于单独的应用程序,并且在受管环境中与Java事务API连接。该章也概述了以事务方式使用JDO时的设计想法和实践。 第Ⅳ部分——结论 第12章:JDO和JDBC 这一章回顾了JDBC的API,给出了关系数据库的简要回顾,关注了JDBC的历史,并且给出了新的JDBC 3.0的介绍。这一章的第二部分比较了JDBC与JDO,讨论了它们的特性及不同点,并强调了一些普遍存在的误解。 第13章:最佳实践 这一章给出了一些建议,使用指南以及在典型的现实企业业务应用程序中使用JDO的最佳实践。 第14章:当前的状态和未来的发展方向 这一章提供给读者可能的规划,以及JDO在将来的发展方向。这一章描述的特性不一定会出现在JDO 2.0中,也不会限制可能出现的新特性。这一章的目标是给出JDO规范可能出现特性的一些深入的见解。 第15章:案例分析 这一章讨论了Core JDO Library中的全部示例,以便给出本书中介绍的内容的前后关系,并使读者深入理解如何使用JDO来开发应用程序。Core JDO Library应用程序是一组用例的实现,用于解释基本的和高级的JDO特性。并且用来解释前几章提到的两层或多层应用程序的概念。这一章被分为好几个小片断,可以像看菜谱书那样来学习本章。 附录A: JDO状态 附录B:JDO元数据 XML DTD 附录C:JDOQL BNF 附录D:PersistenceManagerFactory快速参考 附录E:JDO供应商 本书未涉及的内容 本书没有涉及: ● 学习Java:本书关注Java,假定读者熟悉Java程序设计语言。没有讲授Java语言或者Java的数据结构,也没有指导如何在Java中应用不同的编程算法。 ● 对象数据库:本书是关于JDO的,尽管这个规范可能从对象数据管理组吸取了很多有价值的经验与知识,但它不是关于对象数据管理组(Object Data Management Group,ODMG)规范的,也不是关于对象数据库使用的。 ● 开发过程及方法学:尽管在合适的地方使用了UML表示法,但本书并没有推荐任何在Java项目中应该遵循的、特定的编程技巧和方法。 相关的信息 本书约定 本书有4个风格各不相同的作者。为了保持整本书的风格一致,作者使用了如下约定的术语: 可持久类:这个术语是用来表示在JDO API中实现PersistenceCapable接口规范的类。 持久对象:这个术语用来表示可持久类的持久实例。 Java对象:这个术语用来表示Java对象实例的普遍概念。对象可能遵循也可能不遵循标准JavaBeans约定。 临时实例:这个术语用来表任意类的实例。 字段:这个术语用来说明类的实例变量。通常不称它们为成员、成员变量或者属性,而是称为字段。 数据仓库:这个术语指JOD实现使用的持久性机制。术语“数据仓库”和“底层数据仓库”可以互换。术语“数据库”仅在特别提到关系数据库或者对象数据库的时候使用。 JDO实现:不同于JDO运行库或者JDO供应商,术语“JDO实现”指JDO规范的实施。 目 录