### Tuscany-SDO-学习笔记 #### 1. SDO基础知识 ##### 1.1 创建DataObject **1.1.1 动态定义类型,然后创建DataObject** 在这一节中,我们将探讨如何通过动态定义类型来创建DataObject。这种方式允许我们在运行时灵活地定义对象结构,这对于处理那些其结构未知或者可能变化的数据集非常有用。 1. **初始化HelperContext:** - 我们需要创建一个`HelperContext`实例,这可以通过调用`SDOUtil.createHelperContext()`方法实现。这个上下文包含了处理SDO对象所需的所有辅助类和服务。 ```java HelperContext scope = SDOUtil.createHelperContext(); ``` 2. **定义类型:** - 接下来,我们使用`TypeHelper`来定义新的类型。这通常涉及构造一个XML模式定义(XSD),并将其转换为SDO可以理解的形式。 ```java Type customerType = getCustomerType(); // 假设此方法返回一个Type对象。 scope.getTypeHelper().define(customerType); ``` 3. **创建DataObject实例:** - 一旦类型被定义,我们就可以使用`DataFactory`来创建基于该类型的DataObject实例。 ```java DataObject customer = scope.getDataFactory().create("http://example.com/customer", "Customer"); ``` 4. **设置属性值:** - 我们可以像操作普通的Java对象一样为DataObject设置属性值。 ```java customer.setInt("custNum", 123); customer.setString("firstName", "三"); customer.setString("lastName", "张"); ``` 5. **输出DataObject:** - 使用`XMLHelper`将DataObject转换为XML格式进行输出或保存。 ```java try { scope.getXMLHelper().save(customer, "http://example.com/customer", "customer", System.out); } catch (Exception e) { e.printStackTrace(); } ``` **1.1.2 根据XMLSchema中定义的类型创建DataObject** 另一种创建DataObject的方法是直接使用一个已有的XMLSchema定义。这种方式非常适合处理那些其结构已经明确的数据集。 1. **加载XMLSchema:** - 可以通过`XSDHelper`来加载一个XMLSchema文件。 ```java XSDHelper xsdHelper = scope.getXSDHelper(); xsdHelper.load("path/to/schema.xsd"); ``` 2. **获取类型:** - 加载完成后,可以从`TypeHelper`中获取到对应的类型。 ```java Type customerType = scope.getTypeHelper().getType("http://example.com/customer", "Customer"); ``` 3. **创建DataObject实例:** - 接下来,使用`DataFactory`根据所获取的类型创建DataObject。 ```java DataObject customer = scope.getDataFactory().create(customerType); ``` 4. **设置属性值:** - 与动态定义类型相同,可以为DataObject设置属性值。 ```java customer.setInt("custNum", 123); customer.setString("firstName", "三"); customer.setString("lastName", "张"); ``` **1.1.3 根据XMLSchema生成静态API,然后创建DataObject** 这种方式涉及到在编译时根据XMLSchema生成对应的Java类,这些类可以直接用于创建DataObject实例,而无需在运行时解析XMLSchema。 1. **生成静态API:** - 使用工具如`xsd2code`等自动生成Java类。 2. **创建DataObject实例:** - 使用生成的类创建DataObject实例。 ```java Customer customer = new Customer(); customer.setCustNum(123); customer.setFirstName("三"); customer.setLastName("张"); ``` 3. **转换为DataObject:** - 将生成的Java类实例转换为DataObject。 ```java DataObject customerDO = SDOUtil.convertToDataObject(customer); ``` **1.1.4 根据XML字符串创建DataObject** 当需要将XML字符串直接转换为DataObject时,可以使用以下步骤: 1. **解析XML字符串:** - 使用`XMLHelper`从XML字符串中加载DataObject。 ```java DataObject customer = scope.getXMLHelper().load(xmlString, null); ``` 2. **操作DataObject:** - 获得DataObject后,可以对其进行进一步的操作。 **1.1.5 使用DataGraph创建DataObject** 当处理复杂的数据结构时,DataGraph提供了一种组织多个DataObject的方式。 1. **创建DataGraph:** - 创建一个`DataGraph`实例。 ```java DataGraph dataGraph = scope.getDataFactory().createDataGraph(); ``` 2. **添加DataObject:** - 向DataGraph中添加DataObject。 ```java DataObject customer = scope.getDataFactory().create("http://example.com/customer", "Customer"); dataGraph.getRootObject().set("customer", customer); ``` 3. **操作DataGraph:** - 对DataGraph进行操作,例如添加、删除DataObject。 4. **输出DataGraph:** - 将DataGraph转换为XML格式。 ```java scope.getXMLHelper().save(dataGraph, "http://example.com/customer", "dataGraph", System.out); ``` #### 1.2 访问DataObject **1.2.1 提供数据类型** 当我们知道DataObject的类型时,可以更方便地访问其属性。 1. **获取类型:** - 通过`TypeHelper`获取类型。 ```java Type type = scope.getTypeHelper().getType("http://example.com/customer", "Customer"); ``` 2. **获取属性:** - 使用`Type`中的方法获取属性。 ```java String firstName = (String)customer.getProperty(type.getProperty("firstName")); ``` **1.2.2 不提供数据类型** 如果不提供数据类型,则需要通过其他方式来访问属性。 1. **获取属性:** - 直接通过属性名称获取属性值。 ```java String lastName = (String)customer.get("lastName"); ``` #### 2. SDO中级知识 **2.1 使用ChangeSummary** ChangeSummary提供了跟踪DataObject更改的功能,这对于事务处理和版本控制非常有用。 1. **创建ChangeSummary:** - 创建一个`ChangeSummary`实例,并与DataObject关联。 ```java ChangeSummary changeSummary = customer.getChangeSummary(); ``` 2. **记录更改:** - 当DataObject发生更改时,会自动记录到ChangeSummary中。 ```java customer.setInt("custNum", 456); // 更改将被记录 ``` 3. **获取更改:** - 可以获取所有更改的列表。 ```java List<DataProperty> changedProperties = changeSummary.getChangedProperties(); ``` 4. **重置更改:** - 在完成事务处理后,可以重置ChangeSummary。 ```java changeSummary.reset(); ``` **2.2 序列化/反序列化** 序列化和反序列化是将DataObject转换为其他格式(如XML或JSON)的过程。 1. **序列化为XML:** - 将DataObject转换为XML字符串。 ```java String xmlString = scope.getXMLHelper().toString(customer); ``` 2. **反序列化为DataObject:** - 从XML字符串重新加载DataObject。 ```java DataObject customerFromXml = scope.getXMLHelper().load(xmlString, null); ``` **2.3 打印DataObject** 简单地将DataObject的内容输出到控制台或其他输出流。 1. **打印DataObject:** - 使用`XMLHelper`将DataObject转换为XML格式并打印。 ```java scope.getXMLHelper().save(customer, "http://example.com/customer", "customer", System.out); ``` #### 附录 以上介绍了Tuscany-SDO的基本概念和常用操作,包括如何创建、访问DataObject以及如何利用ChangeSummary和序列化等功能。通过这些知识点的学习,开发者可以更加熟练地使用Tuscany-SDO来处理复杂的业务数据。
剩余45页未读,继续阅读
- tacywang2012-11-12不错的例子。。初学者必看..
- 褚金辉2012-09-29不错的例子。。初学者必看..
- lb65432102012-09-28已经实现了,感觉跟hibernate差不多
- 粉丝: 7
- 资源: 18
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 可直接运行 MATLAB数学建模学习资料 模拟算法MATLAB代码实现.rar
- 基于 Java+SQLServer 实现的医药售卖系统课程设计
- HCNP(HCDP)华为认证资深网络工程师-路由交换方向培训 -IESN中文理论书-内文.pdf
- 新版FPGA课程大纲,芯片硬件开发用的大纲
- ROS2下OpenCV识别物体区域和视频捕捉的样例
- STM32-EMBPI.PDF
- Font Awesome图标字体库提供可缩放矢量图标,它可以被定制大小、颜色、阴影以及任何可以用CSS的样式
- Bluefield 2固件镜像版本,fw-MBF2M345A-VENOT-ES-Ax-24.40.1000.bin
- 雪颜奇迹幻白双重莹白焕采霜50ML-1016-FA.rar
- Qt的QDOCK高级用法源码,包含linux和windows版本,从开源库下载