J2EE 探险者:持久数据管理,第 2 部分
上月的“探险者”专栏介绍了用于数据持久性的 J2EE 技术:实体 bean、JDBC 和 Java 数据对象(Java Data Object,JDO)。本月,企业 Java 专家 Kyle Gabhart 不再专门讨论比较成熟的 JDBC 技术和 EJB 技术,而是主要介绍 JDO。尽管这种技术与其它技术相比还不成熟,但您会发现 JDO 有一些独一无二的优点。应用程序组件应实现针对企业服务的请求。要实现这些请求,应用程序组件常常必须更改底层数据存储的状态。这些更改绝对不能破坏持久数据存储的完整性。(在有关数据持久性的第一篇文章中,我们将持久数据存储定义为独立的数据资源库,即使在服务器崩溃或网络失败时,这个数据资源库也能保护其中的数据。)为了确保持久性,应用程序组件必须能处理并发性、连接管理、数据完整性以及同步。J2EE 的三种数据管理技术都能为开发人员处理这些功能,只不过每种技术都有自己的处理方法。
上月我们探讨了实体 bean 和 JDBC 的优缺点。本月,我们将查看 Java 数据对象如何与无状态会话 bean 组合,以及该解决方案如何与标准实体 bean 应用程序进行比较。由于 JDO 仍是一种相当新的技术(最新的 J2EE 持久性解决方案),所以我们将首先概述其工作原理。
JDO 概述
长久以来,Java 应用程序和持久数据管理之间的关系一直是不容易处理的。许多持久性机制以关系的方法而不是面向对象方法存储数据。即,数据存储在由包含字段的记录组成的表中,而不是存储为自包含对象(这些对象拥有内部数据和对其它对象的引用,而其它对象也拥有内部数据和引用)。将面向对象的表示转换成关系表示一直就很麻烦、易出错且会降低应用程序性能。直到最近,少数几个本质上是非关系型的持久性机制(例如 SQL BLOB 和 Java 序列化)使用起来也很麻烦。大多数持久性机制让开发人员负责处理持久性,或使用非 Java 语言(例如 SQL)与后端数据存储进行相互作用。
JDO 的优点在于它很简单。开发人员使用 Java 语言持久存储对象实例并从存储器检索实例。处理逻辑、同步和故障转移等均被透明地处理。开发人员无需使用 SQL 或 Java 语言提供的不便的序列化机制,只使用 POJO(无格式普通 Java 对象)即可,利用 JDO 接口将对象引用传递到存储器中并从存储器检索对象引用。
J2EE 持久性技术
实体 bean 提供健壮的数据持久性。bean 容器处理数据完整性、资源管理和并发性功能的绝大部分工作,从而让开发人员专注于业务逻辑和数据处理,而不必考虑这些低级别的细节。使用 Bean 管理的持久性(Bean Managed Persistence,BMP)实体 bean,开发人员编写持久性代码,但由容器确定何时执行该代码。使用容器管理的持久性(Container Managed Persistence,CMP)实体 bean,容器生成持久性代码,并管理持久性逻辑。
补充:Jsp教程,J2EE/EJB/服务器