SDO for Java规范(一)——架构

作者 高科技文盲[@more@]

SDO for Java规范(一)——架构

数据对象是SDO框架的核心。数据对象是一个业务对象的一般表达,并且没有和特殊的持久化存储机制绑定。

数据图是一个相关数据对象的集合。在SDO1.0里,一个数据图总是被一个DataGraph信封对象所包装,而在SDO2.0里,数据对象图可以存在于DataGraph之外。(数据图)Data graph作为两个单词分开使用时,指任何一个数据对象集合;(数据图)DataGraph作为一个单一单词使用时,特指一个DataGraph信封对象。

所有数据图都有一个单一的根数据对象,它直接或间接的包含图里的所有其它数据对象。当的数据图里的所有数据对象仅仅引用自身的数据对象时,我们称该数据图是封闭的。封闭是一个数据图的标准状态。

一个数据图由以下组成:

  • 一个单一的根数据对象。
  • 通过对根数据对象属性的递归检索到的所有可达的数据对象。

一个封闭的数据图形成了一个数据对象的树形结构。数据图能够记录跟踪描述数据对象的模式。数据图同样也可以维护一个更改概要(ChangeSummary),ChangeSummary表达了施加于该图数据对象之上的更改。

resserver.php?blogId=255&resource=%E6%95%B0%E6%8D%AE%E5%9B%BE%E5%8C%85%E5%90%AB%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1.gif

1,数据图包含数据对象

对于终端用户而言,访问数据图的标准方式是通过数据访问服务(DAS)。DAS提供了从库中加载数据图和将数据图保存回库中的方法。例如,一个XML文件DAS将加载和保存一个数据图为XML文件,一个JDBC DAS将使用一个关系数据库加载和保存一个数据图。针对其它特殊的DAS的规范超出了本规范的范围。

经典的DAS使用了一个非连接的数据架构,客户端除了在读写数据图时,均和DAS保持一个非连接的状态。因而,一个使用数据图的典型场景涉及以下步骤:

  • 终端用户发送一个加载数据图的请求给DAS
  • DAS启动一个持久库上的事务去接收数据,创建一个表达该数据的数据图,并且结束这个事务。
  • DAS返回一个数据图给一个终端用户应用。
  • 终端用户应用处理数据图。
  • 终端用户应用使用修改后的数据图调用DAS
  • DAS基于终端用户对数据的修改,启动一个新的事务更新持久库中的数据。

resserver.php?blogId=255&resource=SDO%E7%9A%84%E9%9D%9E%E8%BF%9E%E6%8E%A5%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.gif

2 SDO的非连接数据结构

注意有两个特别的角色能够能够用来区分数据对象用户:客户和DAS writer

客户需要能够纵览整个数据图去访问每一个数据对象并且能够获取和设置每一个数据对象域的能力。客户也需要序列化和反序列化一个数据图。如使用XML DAS时,数据图能够被序列化一个XML

DAS writer必须能够为数据图定义一个模型,创建一个新的数据图,产生更改历史信息,并且能够访问更改历史信息。

一个数据图包含一个(更改概要)ChangeSummary,通过ChangeSummary,能够访问数据图中任何一个数据对象的更改历史。当DAS返回一个数据图时,ChangeSummary应该是空的。如果DAS的客户修改了数据对象的状态,例如创建或者删除,这些更改的概要将被记录在ChangeSummary中。

如果一个客户端将一个修改后的数据图发送给DASDAS将会进行数据图的错误性检查,这些错误主要包括数据图是否缺少封闭,属性值是否越界,由树形子图生成的属性或数据对象的选择,不同的约束或者任何针对DAS的特殊限制(如XML模式的特殊校验)。这里,封闭(Closure)指任何一个该数据图的数据对象的引用均指向自身内部的一个对象。通常,DAS使用异常报告更新的问题。

一个数据图可能没有封闭,此时,终端用户可以临时通过数据对象接口修改该数据图所包含的数据对象。然而在所有的用户操作完成后,数据图将重建一个封闭。DAS只能操作带有封闭的数据图。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8042616/viewspace-907241/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8042616/viewspace-907241/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDO(Service Data Object)是一种数据访问和操作的模型,它可以在不同的应用程序之间共享数据。SDO定义了一组API,用于访问和操作数据对象。在Java中,SDO的实现称为SDO for Java。 在SDO for Java中,DataObject是SDO的核心概念之一。DataObject是一个Java对象,它可以表示任意类型的数据。SDO for Java提供了一组API,用于创建、访问和操作DataObject。 DataObject具有以下特点: 1. 动态属性:DataObject可以动态添加和删除属性,而不需要在定义时指定属性。 2. 支持继承:DataObject可以继承自其他DataObject,继承可以实现数据的重用。 3. 支持多重值:DataObject的属性可以是多重值,可以包含多个值。 4. 支持关联:DataObject可以与其他DataObject建立关联,形成一个对象图。 SDO for Java提供了一组API,用于访问和操作DataObject。例如,可以使用以下代码创建一个DataObject: ``` DataObject dataObject = dataFactory.create("uri", "typeName"); ``` 其中,dataFactory是SDO的工厂类,"uri"和"typeName"分别表示DataObject的命名空间和类型名。 创建DataObject后,可以使用以下代码设置和获取属性值: ``` dataObject.set("propertyName", propertyValue); Object value = dataObject.get("propertyName"); ``` 其中,"propertyName"表示属性名,propertyValue表示属性值。 除了设置和获取属性值外,还可以使用以下代码访问DataObject的关联: ``` DataObject relatedObject = dataObject.getDataObject("associationName"); List<DataObject> relatedObjects = dataObject.getList("associationName"); ``` 其中,"associationName"表示关联名。getDataObject方法返回与DataObject建立关联的单个DataObject,getList方法返回与DataObject建立关联的多个DataObject。 总之,DataObject是SDO for Java的核心概念之一,它提供了一种灵活、动态、可扩展的数据访问和操作模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值