Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|产品中心下载UML生成C++
您现在的位置: 天极网 > 开发频道 > 服务数据对象SDO简介
全文
群乐:SOA

服务数据对象SDO简介

2007-11-20 09:09 作者: John Beatty 出处: 论坛整理 责任编辑:方舟

  服务数据对象(Service Data Objects,SDO) 是BEA 和 IBM 最近共同发布的一项规范,而且它正由JSR-235专家组进行标准化以通过JCP(Java 标准化组织)的审核。SDO是Java平台的一种数据编程架构和API,它统一了不同数据源类型的数据编程,提供了对通用应用程序模式的健壮支持,并使应用程序、工具和框架更容易查询、读取、更新和检查数据。关于SDO架构的高级概述,请参考白皮书Next-Generation Data Programming: Service Data Objects (pdf)。

  这篇文章讨论了SDO API背后的设计和动机。注意,在这篇文章中讨论的SDO API是由 BEA和IBM在2003年11月共同发布的版本。由JSR-235专家组推出的版本可能会不同于这个API。

  概述

  SDO API包括一个动态数据API,一个数据类型自检API,和一个数据变化跟踪API。如果您一点也不知道上述概念,不要绝望:我将从最简单的概念开始并逐步进行下去。

  DataObject:当不采用Java Beans时

  SDO基于“数据对象”的概念,“数据对象”简单地说就是包含某个数据的一个对象实例。通常,人们使用传统的Java对象(POJO,或Java beans)或是传统的Java接口(POJI)来以一种持久性-机制-中立的风格表示数据(不久将更多地用于关系型和XML数据上)。举例来说,人们为了使用 POJO 普遍会构造“数据传输对象”。

  我们称Java bean类型的API为“静态的”,因为预先定义好的具有一系列属性(或getter/setter方法)的数据类型已经存在了。然而,静态数据API并不总能执行,因为有时Java类甚至还并不存在。举例来说,在许多动态查询中,返回数据的形式并不是已知的预先类型,这样我们就不能将数据填写到已经存在的Java类中。另一个例子是,数据结构是可扩展的;例如,对于XML数据,在您剖析它之前,您通常不知道它的精确类型(假定它的XML 模式结构是可扩展的)。

  这就是 SDO 数据对象接口的便利之处:它提供了“动态的”数据API。当您需要产生一个能支持包括动态查询、未知数据类型和可括展模式等情况的通用框架时,有一个动态的数据API会更加有用。

  DataObject 上的基本操作是set([property name]、[property value])和get([property name]。在 DataObject 上有更多的方法,但是我们稍后将了解它们。让我们先来看一些代码。假定我有一个person接口,如下:

        public interface Person {
               String getName();
               void setName(String name);
        }

  模拟的客户代码如下(假定实现person接口的一个PersonImpl Java bean存在):

        Person p = new PersonImpl();
        p.setName("John");
        System.out.println(p.getName());

  这是Java程序师在许多程序设计任务中使用的。但是,如果在运行时当我要处理person数据的时候,person接口却不存在,那会怎么样呢?这时我们就能使用DataObject。假定有一个DataObject的实现DataObjectImpl,它有一个默认的构造函数(注意,SDO规范的内核只定义接口),我可以写出下列代码,它同上面的代码可以完成同样的事情:

        DataObject o = new DataObjectImpl();
        o.set("name", "John");
        System.out.println(o.get("name")); 

  留心的读者将会注意到,上面的代码中遗漏了一个重要的数据:DataObject的实例并不知道这个数据是person。这样,客户也不能做任何运行时的类型检查。SDO处理了这个问题,下面我们就来讨论它。

  退一步讲,指出Java对 DataObject API的需求有所增加是有意义的。因为Java是一种静态类型的语言,它不能在运行时将额外的字段和方法添加到对象的实例中去。也不是所有的语言都像这样。特别地,如Python,它是一种动态类型的语言,它允许属性 (等同于Java中的字段) 在运行时被添加到一个对象实例中。举个例子,下面的Python代码就粗略地等同于上面使用DataObject的Java代码。

  o = dataobject()
  setattr(o, "name", "John")
  print o.name

  上面的代码假定已经定义了名为“dataobject”的Python类。这个类可以简单地定义成:

class dataobject:
pass

  我这里给出Python代码并不是要在Python和Java之间做何评价;只不过,它更明确地说明了当需要一个动态数据API时,为什么Java需要像 DataObject 这样的类。

共2页。 1 2 :
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml