ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:105.77KB ,
资源ID:3744805      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3744805.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SDO规范.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

SDO规范.docx

1、SDO规范1 SDO概述 11.1 为什么需要SDO? 11.2 什么是SDO? 11.3 SDO的基本结构 22 SDO环境的搭建 43 SDO的基本概念 53.1数据图 53.2数据对象 103.3变更摘要 113.4属性 123.5类型 143.6序列 174 Apache Tuscany的Java SDO 224.1将XML转换为Data Object 224.2读取Data Object 254.3基于XSD创建DataObject 301 SDO概述1.1 为什么需要SDO?随着SOA理念的流行和 WebService等技术的广泛应用,我们发现在越来越多的系统中,我们需要访问各种不

2、同的底层数据,这些数据包括关系型数据库,EJB组件,XML文件或数据库,Web服务, JSP 页面数据等等。为了能够访问和操作这些数据,开发人员必须了解针对不同数据源操作的规范和API。SDO(Service Data Object)为我们提供了统一的数据应用开发框架,它提供了对多种企业信息系统 (EIS) 的统一的数据访问,包括数据库、遗留应用程序(使用 JCA)、XML 或者是 Web服务数据源。通过使用 SDO 的一种独特而简单的模型,应用程序摆脱了使用多种 API 和框架进行数据访问的复杂工作。从而使开发人员只需了解一种API便可操作上述数据。下面我们就来了解一下什么是SDO。1.2

3、什么是SDO?SDO(Service Data Objects)服务数据对象,是BEA 和 IBM 共同发布的一项规范。SDO是Java平台的一种数据编程架构和API,它统一了不同数据源类型的数据编程,提供了对通用应用程序模式的健壮支持,并使应用程序、工具和框架更容易查询、读取、更新和检查数据。这里需要说明,SDO不是一种针对数据访问和持久化的技术,而是一种数据编程架构和一组API。SDO主要用于简化数据编程,让开发人员能集中解决业务逻辑问题而不是底层技术。SDO 是信息的容器,设计用于提升开放标准和互操作性。SDO 提供了在整个企业应用程序中表示信息的方法,包括表示层、业务逻辑层和持久层之间

4、的通信,如图所示:SDO解决了异构数据的兼容性的问题,提出了一个简单并统一的模式供服务处理其相关的数据。开发人员可以用SDO统一其数据访问和处理模式,即使这些数据来源于异构数据源关系数据库、XML数据、Web服务或者是企业信息系统。SDO通过以下手段简化数据编程: 统一了不同数据源类型的数据编程,屏蔽的数据库底层的差异,对异构数据可以通过相同接口来调用,使应用把精力放在数据的逻辑结构,而不是把物理差异也考虑进去;使数据库迁移及版本升级变得很容易,无需修改数据操作逻辑。 动态数据类型,传统静态数据类型如JavaBean必需知道对操作数据要完全清楚,然后通过get和set方法来操作该数据类型,而对

5、应无法预先知道的数据,SDO则更适合,SDO根据实际数据需求,可以动态的组合数据(可以通过XSD配置,也可以通过代码),添加、修改属性。 提供了对通用应用程序模式的健壮支持 使应用程序、工具和框架更容易查询、读取、绑定、更新和检查数据;变更摘要使数据操作变得更得心应手。 1.3 SDO的基本结构SDO采用离线数据图的设计理念。数据图是一组树型结构或者图型结构的数据对象。离线的访问方式是指客户端从数据源提取并构建数据图,然后在应用中操作数据图,并在变更摘要(Change Summary)中记录相应的数据操作,在动作结束后由数据访问服务(Data Access Service)批量地将相应的改变反

6、映回数据源,其中数据源可以是异构的,并不仅仅限于关系数据库。SDO的数据表现形式基于数据对象(Data Object)和数据图(Data Graph)的概念,其封装形式和Java类和XML有水到渠成的映射关系。同时,SDO提供了丰富的数据操作接口动态接口和静态接口,还可以用XPath来直接访问相应的数据对象属性。如图所示,SDO有下面一些主要部分: SDO的结构 数据图(Data Graph)从概念上来说,数据图是一组提供组件之间或层之间的传输单元的数据。具体来说,数据图是一个多根的数据对象集合。数据图记录所有对数据的更改,包括新的数据对象、被更改的数据对象以及被移除的数据对象。 数据对象(D

7、ata Object)数据对象将数据保存为一组属性。这些属性包括基本值(比如XML属性和XML元素内容)以及指向其他数据对象的引用(例如,PurchaseOrder数据对象可能有一个Customer属性)。对于XML数据来说,数据对象通常表示一个元素、元素的属性、简单类型子元素的值以及指向表示复杂类型子元素的数据对象的引用。对于关系数据,数据对象通常表示一行数据。外键会通过指向另一个数据对象的引用来表示,表示另一个表中的一行。 属性(Property)和类型(Type)业务数据是作为属性保存到数据对象中的,而每一个属性符合SDO类型定义。SDO类型可以是简单数据类型,也可以是一个数据对象类型。

8、 序列(Sequence)序列是一个特殊的属性组,每一个序列中的属性都有索引,即使对同一属性的不同操作。序列可以用于表现半结构化的XML数据,如文字和数字混排的情况。 变更摘要(Change Summary) 变更摘要是实现离线数据访问的一个重要组件,隶属于数据图或者数据对象。变更摘要初始是空的,随着数据图和数据对象的变化而填充数据,从而保证了数据可以被增量地更新到后台数据源。 数据访问服务(Data Access Service, DAS) 数据访问服务是SDO离线访问模式的一个不可或缺的部分,尽管现在还不是SDO规范中的一部分。数据访问服务可以从后端数据源建立数据图和数据对象,并且将其存回

9、相应的数据源。DAS支持基于变更摘要的增量更新。2 SDO环境的搭建 构造SDO环境,首先需要安装TUSCANY,可以参考SCA的文档。2.1:在http:/tuscany.apache.org/sdo-java-download.html网站上下载WindowsBinary版本的sdo:tuscany-sdo-1.0-incubating-beta1-bin.zip;2.2:将上述zip文件解压,例如解压到E盘,则目录结构为:2.3::配置Tuscany。2.3.1 从菜单栏中选择Window Preference 2.3.2 在preference对话框中选择Java Build Path

10、 User Libraries. 2.3.3 单击New 按钮新建一个user library.2.3.4 输入SDO作为user library的名字。如图所示:2.3.5 单击Add JARs,将E:tuscany-sdo-1.0-incubating-beta1lib中所有JARs加到该user library:2.4:这样SDO环境就配置好了,在应用中,你需要将这个user library添加到你工程中的build path中去。3 SDO的基本概念3.1数据图数据图是一个描述数据的分层结构,它包括一个数据对象树和另一个称作变更摘要 (Change Summary) 的结构(如图所示)

11、。变更摘要记录了数据图中所有数据对象的历史更改信息。此外,由于数据图是由数据对象组成的,因此它是可序列化的。数据图由 DAS 生成,供 SDO 客户使用。修改后,数据图被回传给 DAS 更新数据源。SDO 客户可以遍历数据图,读取和修改数据图中的数据对象。当在应用程序组件(比如服务调用期间的 Web 服务请求者和提供者)之间进行传输、组件到 DAS 的传输(或者保存到磁盘)的时候,数据图被序列化为 XML。SDO 规范提供了序列化的 XML Schema。 根据SDO的思路,SDO将通过SDO从各种数据源,或者后端关系数据库,或者从XML文件等得到一个Data Graph传到前端。因为Data

12、 Graph里面有一个根数据对象,由于可以从根数据对象得到所有其他的数据对象,这样从一个Data Graph对象就可以得到所有的数据对象了。3.1.1从XML文件得到Data Graph实例 本小节将通过实例介绍如何从XML文件得到Data Graph。 从数据源通过XML创建SDO时,首先需要有XML的xsd,就好象从数据库取数据时首先需要有数据库的关系表一样。下面是本例的XSD:user.xsd 下面是装载到Data Graph的XML文件user_datagraph.xml: 0 ZhangSan 0 100.000 1 LiSi 1 200.000 现在我们写主程序来装载上面的XML文

13、件:package sample;import java.io.IOException;import org.apache.tuscany.sdo.util.SDOUtil;import commonj.sdo.DataGraph;import commonj.sdo.DataObject;import commonj.sdo.helper.XMLHelper;import commonj.sdo.helper.XSDHelper;public class Xml2DataGraph public static DataGraph getDataGraphFromXmlFile()throws

14、 IOException XSDHelper.INSTANCE.define(ClassLoader.getSystemResourceAsStream(user.xsd), null);DataGraph datagraph= SDOUtil.loadDataGraph(ClassLoader.getSystemResourceAsStream(user_datagraph.xml), null); return datagraph; public static void main(String args) throws Exception DataGraph dataGraph = get

15、DataGraphFromXmlFile(); DataObject userListDO = dataGraph.getRootObject(); System.out.println(XMLHelper.INSTANCE.save(userListDO, http:/sample/soa, userList); 上面程序通过XSDHelper.INSTANCE.define 来装载user.xsd 文件,通过SDOUtil.loadDataGraph来得到Data Graph。然后通过Data Graph的getRootObject()得到根数据对象,最后通过XMLHelper.INSTA

16、NCE的save方法将整个数据对象显示出来。运行上面的程序,结果如下: 0 ZhangSan 0 100.000 1 LiSi 1 200.000 3.1.2通过SDO的API创建Data Graph实例 上面已经介绍了如何通过XML得到Data Graph,下面将介绍如何通过SDO的API创建Data Graph,进一步创建相应的数据对象,XSD文件同上,采用”user.xsd”package sample;import org.apache.tuscany.sdo.util.SDOUtil;import commonj.sdo.DataGraph;import commonj.sdo.Da

17、taObject;import commonj.sdo.helper.XSDHelper;public class DataGraphCreator public static void main(String args) throws Exception XSDHelper.INSTANCE.define(ClassLoader.getSystemResourceAsStream(user.xsd), null); DataGraph dataGraph = SDOUtil.createDataGraph(); DataObject userListDO = dataGraph.create

18、RootObject(http:/sample/soa, userListType); DataObject user0 = userListDO.createDataObject(user, http:/sample/soa,userType); DataObject userInfor0 = user0.createDataObject(userInfor, http:/sample/soa, userInforType); userInfor0.setInt(userId, 0); userInfor0.setString(userName,Zhang San); DataObject

19、userAccount0=user0.createDataObject(userAccount, http:/sample/soa, userAccountType); userAccount0.setInt(userId, 0); userAccount0.setDouble(money, 100.000); SDOUtil.saveDataGraph(dataGraph, System.out, null); 这个程序通过SDOUtil.createDataGraph()先创建一个空的Data Graph,再通过dataGraph.createRootObject创建根数据对象,再在根数据

20、对象下面加入子数据对象。最后通过SDOUtil.saveDataGraph(dataGraph, System.out, null)将整个DataGraph输出。运行该程序,结果如下: 0 Zhang San 0 100.0 3.1.3 Data Graph的API介绍数据图有完成下列功能的方法: getRootObject(),返回根数据对象 createRootObject(),创建一个根数据对象 getChangeSummary(),返回变更摘要 getType(),通过uri和名字查询一个类型,类似TypeHelper数据图接口如下:public interface DataGraph

21、 extends SerializableDataObject getRootObject();DataObject createRootObject(String namespaceURI, String typeName);DataObject createRootObject(Type type);ChangeSummary getChangeSummary();Type getType(String uri, String typeName); /uri 为命名空间 3.2数据对象数据对象是 SDO 的基本组件。简单地说,它是由属性的键/值对组成的,每个值都可以是原始的数据类型,或者是

22、另一个数据对象。数据对象提供了易于使用的创建(createDataObject()和删除方法(delete(),获得自身类型(实例类、名称、属性和名称空间)的反射方法。数据对象都链接在一起,包含在数据图中。数据对象是可序列化的。通常,人们使用传统的Java对象(POJO,或Java beans)或是传统的Java接口(POJI)来以一种持久性-机制-中立的风格表示数据(不久将更多地用于关系型和XML数据上)。举例来说,人们为了使用 POJO 普遍会构造“数据传输对象”。我们称Java bean类型的API为“静态的”,因为预先定义好的具有一系列属性(或getter/setter方法)的数据类型

23、已经存在了。然而,静态数据API并不总能执行,因为有时Java类甚至还并不存在。在许多动态查询中,返回数据的形式并不是已知的预先类型,这样我们就不能将数据填写到已经存在的Java类中。另外,数据结构是可扩展的;例如,对于XML数据,在您剖析它之前,您通常不知道它的精确类型(假定它的XML 模式结构是可扩展的)。这就是 SDO 数据对象接口的便利之处:它提供了“动态的”数据API。当您需要产生一个能支持包括动态查询、未知数据类型和可括展模式等情况的通用框架时,有一个动态的数据API会更加有用。3.2.1得到Data Object下面两个方法可以得到一个Data Object 首先得到Data G

24、raph,再通过Data Graph得到根数据对象,根数据对象再以路径(Path)或者属性(Property)的index或者属性(Property)为参数,调用getDataObject的API,来得到相应的Data Object,如下面的实例先得到根数据对象,再根据路径得到相应的数据对象,路径为”user1/userInfor”,user1是因为userList含有多个user,取第一个user。DataObject userListDO = dataGraph.getRootObject();DataObject userInforDO = (DataObject) userListDO. getDataObject(user1/userInfor); 如果从现有的Data Object,创建它的子Data Object的话

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2