天天看点

服务对象数据

转载来自【IT168 技术文档】网址: http://tech.it168.com/j/2006-06-14/200606140100770.shtml

    服务对象数据 

    服务对象数据(Service Data Object,SDO)使用统一的抽象代替了各种各样的数据访问模型来创建、检索、更新和删除供服务实现使用的业务数据。SDO(请参阅参考资料部分中的 Service Data Objects 2.0 和 Next-Generation Data Programming: Service Data Objects)是 IBM 面向服务的体系结构 (SOA) 的基础概念。SDO 将开发人员从如何访问特定的后端数据源的技术细节中解放出来,提高了他们的工作效率,这样他们就可以主要专注于业务逻辑(请参阅参考资料部分中的 Integrating relational data into Web applications、Next-generation data programming in the Java™ environment 以及 Using Service Data Objects with Enterprise Information Integration technology)。SDO 是与 BEA Systems, Inc. 联合制订的规范,并且在 IBM 系列产品中得到了广泛的使用,包括 WebSphere® Application Server 和 Rational® Studio 工具。Java™ 数据库连接(Java™ DataBase Connectivity),通常称为 JDBC,是执行结构化查询语言(Structured Query Langauge,SQL)语句的 Java 接口。目前,用于 JDBC、Web 服务描述语言(Web Services Description Language,WSDL)定义的服务、企业 JavaBean(Enterprise JavaBean,EJB)等等由 Java 编写的服务实现的编程模型都是相似的,但却又有一些让人讨厌的不同。

    SDO 定义了一种单一的、统一的方法来访问和操作来自异构数据源的数据,包括关系型数据库、可扩展标记语言(eXtensible Markup Language,XML)数据源、Web 服务以及企业信息系统 (EIS)。它们是基于数据图(data graph)的概念。数据图就是一组可以从数据源中分离出来的树形结构的对象。SDO 可以在整个应用程序体系结构中使用。

应用程序体系结构的领域 如何使用 SDO
SOA
  • SDO 是服务的输入和输出。
数据访问
  • SDO 访问关系型、XML、EJB、Java 数据对象(Java Data Object,JDO)和 Hibernate 数据源。
  • SDO 是数据传输对象(Data Transfer Object,DTO)——也被称为值对象(Value Object)。
Web 服务
  • SDO 表示网络上的 XML。
消息传递
  • SDO 表示消息。
XML 使用 SDO 的情况:
  • 支持 XML 的应用程序。
  • 访问 XML 文件、文档、资源和消息。
连接器/适配器(EIS,CICS)
  • SDO 表示数据记录。
EJB
  • SDO 是 DTO(也被称作值对象)。
  • Java 2 企业版(Java 2 Enterprise Edition,J2EE)设计模式。
ADO.NET
  • ADO DataSet 是 SDO 数据图的子集。
企业服务总线(Enterprise Service Bus,ESB)
  • SDO 是服务的输入和输出。
跨语言编程模型
  • 完整的应用程序可能横跨层和语言。
  • 用于很多种语言技能集的相同的编程模型。
模型驱动的体系结构(Model-driven architecture,MDA)
  • SDO 模型(类型(Type)和属性(Property))是通过统一建模语言(Unified Modelling Language,UML)类和组件定义的。
  • SDO 应用程序遵循 UML 顺序 (Sequence)、流 (Flow)、状态 (State) 和协作 (Collaboration)。
Java
  • SDO 是带有 POJO 接口的智能的“传统 Java 对象(plain old Java object,POJO)”。

    在 SOA 中,应用程序并不直接地连接数据源。它访问一个叫做数据访问服务(data access service,DAS)的中介并接收响应中的数据图。DAS 是为特定数据源种类处理技术细节的服务。它为客户机将数据转换成 SDO 图。客户机应用程序与数据图进行交互来获得数据和改变数据。为了将更新应用于原始的数据源,应用程序将更新过的图发送回 DAS,而 DAS 又与数据源交互。通常,运行时提供 DAS 的实现,而应用程序开发工具提供对数据图的支持。

    SDO 通过封装数据访问的细节将业务应用程序与技术改变相隔离,从而避开了技术改变产生的影响——重新编写应用程序以便跟上改变的技术.例如,考虑一个设计用来从数据库中读取产品描述并将其作为网页显示的 Java Web 应用程序。为了访问数据库中的产品描述,应用程序很可能使用 JDBC。假设不久后应用程序拓扑发生了改变,在应用程序和数据库之间放置了 Web 服务。现在,应用程序不能再使用 JDBC 访问数据,而是需要重做大量的工作来替换 Web 服务应用编程接口 (API),例如文档对象模型(Document Object Model,DOM)或者基于 XML 的远程过程调用的 Java API(Java APIs for XML-Based Remote Procedure Call,JAX-RPC)。SDO 避免了这个问题;使用 SDO 编写的应用程序不必改变。 

    另外,SDO 提供了支持元数据 API 的应用程序、工具和框架来以统一的方式自省数据模型,而不管它的来源。DAS 将后端元数据转换成标准的 SDO 格式。 

    SDO 类型可以由 Java 接口、XML Schema、关系型表和列、EJB、COBOL 记录、消息或者 UML 来定义(请参阅参考资料部分中的 Catalog of OMG Modeling and Metadata Specifications);实现人员可以选择自己喜欢的系统类型。简单 Java 和 XML 数据类型是有效的 SDO 数据类型,这为 Java 实现人员简化了一步。SDO 支持动态的和静态的数据访问模型,两者也可以一起使用。我们将更详细地考虑这些内容: 

    动态模型(缺省值)允许编程人员通过名称(字符串)获得和设置数据图中的数据元素。当 SDO 的类型在编译阶段未知时,或者当程序部署完以后可能要添加新的属性时,这特别有用。客户机应用程序或服务查询 SDO 来了解它的结构,然后按名称读取和更新任何元素。例如,可以编写一个泛型 SDO 访问函数并用特定于元素的元数据填充它来访问单独的 SDO。SDO 同样也使用 XML 路径语言( XML Path Language,XPath)表达式的子集来支持快速遍历许多 DataObject,例如 customer[1]/address/zip,以便快速访问 customer DataObejct 的 zip 代码。

静态模型使用命名和类型化 Java 接口。每个数据元素有自己的“getter”和“setter”方法。工具从 SDO 类型和属性生成静态接口。 

    SDO 对于数据表示非常重要,即使没有典型的数据源也如此。这种用法的例子包括使用 Web 服务交换的 XML 消息、Java 消息服务 (JMS) 消息、XML 文件等等。 

     示例 

    下面的例子——定义了包含客户数据的数据对象——说明了使用 Java 或 XML 来定义和使用 SDO 是多么的容易。示例 1(使用 XML)是 SDO 类型的基础。 

    示例 1:使用 XML 的 SDO 类型定义

服务对象数据
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
服务对象数据
< schema xmlns = " http://www.w3.org/2001/XMLSchema "
服务对象数据
xmlns:tns = " http://www.myvalue.com "
服务对象数据
targetNamespace = " http://www.myvalue.com " >
服务对象数据
< element name = " customer " type = " Customer " />
服务对象数据
< complexType name = " Customer " >
服务对象数据
< sequence >
服务对象数据
< element name = " customerID " type = " string " />
服务对象数据
< element name = " firstName " type = " string " />
服务对象数据
< element name = " lastName " type = " string " />
服务对象数据
< element name = " stockSymbol " type = " string " />
服务对象数据
< element name = " stockQuantity " type = " int " />
服务对象数据
</ sequence >
服务对象数据
</ complexType >
服务对象数据
</ schema >
服务对象数据

    在示例 2 中,由前面的 XML 所生成的 Java 接口说明了如何使用静态接口。 使用 Java 的 SDO 类型定义

服务对象数据
服务对象数据
public interface Customer ... {
服务对象数据
String getCustomerID();
服务对象数据
void setCustomerID(String customerID);
服务对象数据
String getFirstName();
服务对象数据
void setFirstName(String firstName);
服务对象数据
String getLastName();
服务对象数据
void setLastName(String lastName);
服务对象数据
String getStockSymbol();
服务对象数据
void setStockSymbol(String stockSymbol);
服务对象数据
int getStockQuantity();
服务对象数据
void setStockQuantity(int stockQuantity);
服务对象数据
}
服务对象数据