扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
Service Data Objects (SDO) 2.1 是一种数据编程体系结构和 API,可提供对异类数据源的统一数据访问。Apache Tuscany 开源项目(请参见参考资料)正在开发 2.1 规范的实现,该实现也打包在 IBM WebSphere Application Server Version 6.1 Feature Pack for SOA 的 Beta1 版中(请参见参考资料)。此规范对 WebSphere Application Server 6.1 的功能进行了扩展。IBM 提供了可供免费下载的 WebSphere Application Server 6.1 试用版。
服务数据对象通常用于将数据从一个应用程序传输到另一个应用程序。此用法模型可以方便地集成在 Web 服务环境中;在此环境中,客户机通常调用其他方提供的服务,需要将数据从 Web 服务提供者传输到使用者。SDO 2.1 规范描述了使用静态或动态数据 API 创建 SDO 的两种方法。在两种情况下,表示 SDO 的对象都必须实现 commonj.sdo.DataObject 接口,通过该接口可与规范定义的其他 SDO API 进行交互。
本文将描述 SDO 的静态与动态数据 API 间的差异,列出构建使用动态数据 API 的 Web 服务应用程序所需的步骤,并提供了可安装在 IBM WebSphere Application Server Version 6.1 Feature Pack for SOA 的 Beta1 版本上的可部署应用程序,用以说明如何在 Web 服务环境中使用 SDO 的动态数据 API。
图 1 说明了静态和动态数据 API 的生成位置以及如何使用其实例化服务数据对象,以供稍后用于操作底层的业务数据。
图 1. 静态和动态数据 API 的用法
SDO 的静态数据 API
静态数据 API 是基于输入数据模型生成的。不同的数据模型将得到不同的静态数据 API。也就是说,静态数据 API 只是数据模型的另一个表示形式。Apache Tuscany 项目包括了一个数据 API 生成工具,该工具接受数据模型(通常用 XML 模式文档(XLM Schema Document,XSD)或 Web 服务描述语言(Web Service Descripiton Language,WSDL))作为输入。该工具将随后以 Java™ 类的形式输出静态数据 API。所生成的 Java 类通常包括用于创建和操作数据模型的实例的工厂、接口和实现代码。
为了说明如何使用静态数据 API,让我们以使用 XSD 中定义的复杂类型表示的数据模型为例,如清单 1 中所示。
清单 1. 表示类型 Person 的 XSD 代码片段
<complexType name="Person"> <sequence> <element name=”firstName” type="string"/> <element name=”lastName” type="string"/> <element name=”greeting” type=”string”/> <element name=”id” type=”int”/> </sequence> </complexType> |
如果将此类型传入数据 API 生成工具,输出将为 Person 的类型接口(一个工厂接口,可利用其创建类型 Person 的实例)和实现 Person 的 commonj.sdo.DataObject 的实现类(用于获取和设置属性,如 getFirstName() 和 setFirstName())。在这里,由于 Person 类实现 commonj.sdo.DataObject,此生成类可以在规范定义的接受 commonj.sdo.DataObject 作为参数的所有 SDO API 中使用。
清单 2 中所示的代码可帮助说明如何使用静态数据 API。
清单 2. 演示静态数据 API 的代码片段
// Register and initialize the SDO types defined in the generated // PersonFactory class SDOUtil.registerStaticTypes(PersonFactory.class); // Create an instance of Person using the Factory class Person person = PersonFactory.INSTANCE.createPerson(); // Set properties of the newly created Person object person.setFirstName("John"); person.setLastName("Doe"); // Example of how to pass a Person object to XMLHelper.save() method for // void XMLHelper.save(DataObject dataObject, String rootElementURI, // String rootElementName, OutputStream outputStream) XMLHelper.INSTANCE.save((DataObject)person, "http://www.example.com/person", "person", System.out); |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者