技术开发 频道

服务数据对象简介

  【IT168 技术文章】

        为什么要使用 SDO?

  对于服务数据对象(SDO),大多数开发人员要问的第一个问题就是为什么要使用 SDO。难道 J2EE 本身还不够庞大、不够复杂(而且难以掌握)吗?Java 环境中不是已经有其他支持 XML 的框架了吗?所幸的是,该问题的答案能够让我们多数人感到满意:SDO 是作为简化 J2EE 数据编程模型的方法出现的,它能够让 J2EE 开发人员把更多的时间用于应用程序的业务逻辑。

  服务数据对象框架为数据应用程序开发提供了统一的框架。通过 SDO,您不需要熟悉特定于技术的 API,就能访问和利用数据。您只需要知道一种 API,即 SDO API,它允许您处理来自多种数据源的数据,其中包括关系数据库、实体 EJB 组件、XML 页面、Web 服务、Java Connector Architecture、JavaServer Pages 页面等。

  注意,我们使用了 框架这一词。这是比照 Eclipse 框架的说法。由于设计的基础坚固而且可以扩展,所以 Eclipse 能够集成各种工具。与此类似,对于采用 SDO 的应用程序,SDO 也是一种框架,这类应用程序在 SDO 模型上是一致的。

  与其他某些数据集成模型不同的是,SDO 没有停留在数据抽象上。SDO 框架还结合了很多 J2EE 模式和非常好的实践,从而使应用程序很容易结合经过验证的体系结构和设计。比方说,今天的多数 Web 应用程序百分之百的时间没有(或不能)连接到后端系统,因此 SDO 支持不连接的编程模型。同样的,今天的应用程序往往非常复杂,包含很多层次。如何存储数据、如何发送数据、如何在 GUI 框架中将它们提供给终端用户?SDO 编程模型提供的应用模式能够清晰地划分不同的问题。

  XML 在分布式应用程序中日渐普及。比如,XML Schema (XSD) 被用来定义应用程序数据格式中的业务规则。XML 本身也可以用于改进交互性:Web 服务使用基于 XML 的 SOAP 作为消息格式。XML 是推动 SDO 的一个重要原因,SDO 框架支持并集成了 XML。

  各种技术的比较

  前面已经提到,SDO 并不是提出解决分布式应用程序中数据集成问题的惟一技术。下面将分别讨论 SDO 和类似的编程框架 JDO、JAXB 和 EMF 的优劣。

  SDO 和 WDO

  Web 数据对象(或 WDO)是随着 IBM WebSphere® Application Server 5.1 和 IBM WebSphere Studio Application Developer 5.1.2 发布的 SDO 早期版本的名称。如果使用过 WebSphere Studio 5.1.2,那么您对 SDO 可能已经有所了解,虽然您可能习惯看到将它标记为 WDO,比如在数据库的名字中。忘掉 WDO 吧,它现在的名字是 SDO!

  SDO 和 JDO

  JDO 代表 Java Data Object(Java 数据对象)。JDO 已经通过 Java 社区进程(JCP)标准化了 1.0 版,2003 年 5 月推出了维护版 1.0.1,现在已经为 2.0 版成立了 JCP 专家组。JDO 针对 Java 环境中的数据编程提供了一种通用 API,用于访问存储在不同数据源中的数据,如数据库、文件系统或者事务处理系统。JDO 保持了 Java 对象(图)之间的关系,同时允许对数据的并发访问。

  JDO 希望简化和统一 Java 数据编程,以便开发人员能够专注于业务逻辑,而不是底层的技术,从这一点上说,其目标和 SDO 是相同的。但主要的区别在于,JDO 仅考虑持久性问题(J2EE 数据层或者企业信息系统(EIS)层),而 SDO 更具一般性,关注的是不同 J2EE 层次间数据流的表示,比如表示层和业务层。

  有趣的是,SDO 可以结合 JDO 一起使用,JDO 作为数据源,SDO 来访问它,这就是 Data Transfer Object(数据传输对象,DTO)设计模式的具体运用。同样,SDO 也可以结合实体 EJB 组件和 Java Connector Architecture(Java 连接器体系结构,JCA)使用,目的是提供统一的数据访问。

  SDO 和 EMF

  EMF 代表 Eclipse Modeling Framework(Eclipse 建模框架)。EMF 根据使用 Java 接口、XML Schema 或者 UML 类图定义的数据模型生成统一的元模型(称为 Ecore),可以将元模型与框架结合在一起使用,创建高质量的模型实现。EMF 提供了持久性、一个有效的反射类属对象操纵 API 和一个变更通知框架。EMF 还包括用来构建 EMF 模型编辑器的一般的重用类。

  EMF 和 SDO 都可以处理数据表示。事实上,IBM 的 SDO 参考实现就是一种 SDO 的 EMF 实现,后面我们还要用到该实现。还可以根据 UML 模型定义或者 SDO 本身,用 EMF 代码生成来创建 SDO 实现的某些部分。SDO 实现基本上是 EMF 中的一小层(方面),它是作为 EMF 项目的一部分打包和提供的。

  SDO 和 JAXB

  JAXB 代表 Java API for XML Data Binding(XML 数据绑定 Java API)。JAXB 1.0 在 2003 年 1 月由 JCP 发布。JCP 专家组已经制定了 2.0 版的初步草案。JAXB 是关于 XML 数据绑定的,也就是说,将 XML 数据表示成内存中的 Java 对象。作为 Java 语言的 XML 绑定框架,JAXB 可以节约解析和创建 XML 文档的时间。(事实上,通过它,您完全不需要和 XML 打交道。)JAXB 为您执行编组/序列化(Java 到 XML)和解组/并行化(XML 到 Java)。

  SDO 定义了自己的 Java 绑定框架,但是走得还要远一些。JAXB 仅关注 Java 到 XML 的绑定,而绑定到 SDO 的不仅仅是 XML 数据。如前所述,SDO 提供了对不同类型数据的统一访问,XML 仅是其中的一种数据类型。SDO 还提供了静态和动态 API *,而 JAXB 仅提供了静态绑定。

  * 注意,本文中示例应用程序仅使用了动态 SDO,虽然 EMF 代码生成器也为数据对象的静态代码生成提供了完整的支持。

  SDO 和 ADO .NET

  ADO 代表 ActiveX Data Objects(ActiveX 数据对象),但是在 .NET 上下文中,其含义已经发生了变化。ADO .NET 提供了 .NET 框架下不同层次间的统一数据访问机制。

  ADO .NET 和 SDO 具有相同的动机,都是用来支持 XML 和分布在多个层上的应用程序。除了技术性的差异外,这两项技术主要的不同在于:ADO .NET 用于 Microsoft .NET 平台,是一种私有的技术;而 SDO 用于 Java (J2EE) 平台,通过 Java 社区进程实现标准化。

  SDO 的组成部分

  这一节将介绍 SDO 的体系结构。我们将介绍组成框架的不同组成部分和它们之间的协作。首先要讨论的三个组成部分之一是 SDO 的“概念性”特征,API 中没有对应的接口。

  SDO 客户机

  SDO 客户机使用 SDO 框架处理数据。SDO 客户机使用的不是特定于技术的 API 和框架,而是 SDO 编程模型和 API。SDO 客户机处理 SDO 数据图(参见 图 1),不需要了解所处理的数据是如何持久保存或者序列化的。

  Data 中介服务

  数据中介服务(DMS)负责从数据源创建数据图、依据数据图的变化更新数据源。数据中介框架不属于 SDO 1.0 规范,换句话说,SDO 1.0 没有涉及具体的 DMS。常见的 DMS 有 JDBC DMS、实体 EJB DMS 和 XML DMS 等。

  数据源

  数据源不限于后端数据源(如持久存储数据库)。数据源以自己的格式保存数据。只有 DMS 访问数据源,SDO 应用程序不访问数据源。SDO 应用程序可能只使用数据图中的数据对象。

  下面介绍的每个组件对应于 SDO 编程模型的一个 Java 接口。SDO 参考实现提供了这些接口基于 EMF 的实现。

  数据对象

  数据对象是 SDO 的基本组件。事实上,它们是规范名称中的 服务数据对象。数据对象是结构化数据的 SDO 表示。数据对象是通用的,它们提供了 DMS 创建的结构化数据的公共视图。比方说,虽然 JDBC DMS 需要知道持久性技术(比如关系数据库),以及如何配置和访问数据,SDO 客户机不需要了解这些细节。数据对象在属性中保存它们的“数据”(稍后还要讨论属性)。数据对象提供了易于使用的创建和删除方法(带有不同签名的 createDataObject() 和 delete() ),获得自身类型(实例类、名称、属性和名称空间)的反射方法。数据对象都链接在一起,包含在数据图中。

  数据图

  数据图提供了数据对象树的容器。数据图由 DMS 生成,供 SDO 客户机使用。修改后,数据图被回传给 DMS 更新数据源。SDO 客户机可以遍历数据图,读取和修改数据图中的数据对象。SDO 是一种 无连接的体系机构,因为 SDO 客户机与 DMS 和数据源没有连接,所以 SDO 客户机看到的只有数据图。此外,数据图可以包含表示不同数据源中数据的对象。数据图包含一个根数据对象、与根关联的所有数据对象和变更摘要(change summary,参见本文后面的叙述)。当在应用程序组件(比如服务调用期间的 Web 服务请求者和提供者)之间进行传输、组件到 DMS 的传输(或者保存到磁盘)的时候,数据图被序列化为 XML。SDO 规范提供了序列化的 XML Schema。图 1 显示了一个 SDO 数据图。

  图 1. SDO 数据图

  变更摘要

  变更摘要包含在数据图中,表示对 DMS 返回的数据图的修改。变更摘要最初是空的(数据图刚返回客户机的时候),随着数据图的变化逐渐填充。在后台更新时,DMS 使用变更摘要将修改应用于数据源。变更摘要提供了数据图中被修改的属性(包括原来的值)、新增和删除的数据对象的列表,从而使 DMS 以递增方式高效地更新数据源。只有当变更摘要日志功能被激活时,才会将信息添加到数据图的变更摘要中。变更摘要提供了让 DMS 打开和关闭日志功能的方法,后面的例子中还将详细对其进行介绍。

  属性、类型和序列

  数据对象用一系列属性保存其内容。每个属性都有一个类型,该类型既可以是基本类型(如 int )这样的属性类型,也可以是通用数据类型(如 Date ),如果引用的话,还可以是其他数据对象类型。每个数据对象都为属性提供了访问和设置方法(getter 和 setter)。这些访问器方法有不同的重载版本,可以通过传递属性名( String )、编号( int )或者属性元对象本身来访问属性。String 访问器还允许使用类 XPath 的语法访问属性。比如,可以对公司数据对象调用 get("department[number=123]") 来访问编号为 123的第一个部门。序列更加高级,可以保持不同种类的属性-值对列表的顺序。

0
相关文章