技术开发 频道

用于实现Web服务的SOA编程模型(2)

    示例 2:使用 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); }

    一旦 SDO 类型定义好,就可以通过将类型定义传递给 SDO 数据工厂 (data factory) 来将其实例化(为数据对象分配存储空间)。这个工厂仅仅是运行时的一个组件,它的功能就是根据 SDO 类型定义实例化 SDO 数据对象。

    示例 3 和示例 4 分别展示了如何通过传递 XML Schema 名称空间和复杂的类型名称(在示例 1 中定义的)或者 Java 接口类(在示例 2 中定义的)作为参数来创建 SDO。

    示例 3: 使用 XML Schema 名称空间和复杂的类型名称参数创建 SDO

DataObject customer = DataFactory.INSTANCE.create("http://www.myvalue.com", "Customer");

    示例 4:使用具有 Java 接口类参数的 SDO DataFactory 创建 SDO

Customer customer = (Customer) DataFactory.INSTANCE.create(Customer.class);

    在 SDO 实例化之后,实现就可以访问它了。示例 5 和示例 6 中的代码示例分别展示了对 Customer SDO 的动态和静态访问。

    示例 5:动态访问 SDO

DataObject customer = ... ; customer.setString("customerID", customerID); ... customer.setInt("stockQuantity", 100); String customerID = customer.getString("customerID"); ... int stockQuantity = customer.getInt("stockQuantity");

    示例 6:静态访问 SDO

Customer customer = ... ; customer.setCustomerID(customerID); ... customer.setStockQuantity(100); String customerID = customer.getCustomerID(); ... int stockQuantity = customer.getStockQuantity();

    我们使用访问 XML 文件服务和关系数据库的例子来进一步说明由 SDO 推动的编程模型的简单性。请注意,尽管技术之间存在差异,但是这些应用程序是如此的相似。应用程序开发人员能够专注于业务逻辑,而让服务去处理更新持久数据存储的实现细节。

    示例 7: XML 文件服务

    这个简单的例子将数据从 XML 文件加载到 SDO 数据图,打印并更新数据,然后将它写回文件。(业务目标是将“quot;Adam”改为“Kevin”。)

根据根 XML 元素和一个多值的 customer 属性定义将要作为根 customers 数据对象读入的 XML 文件。在 XML 文件中 Customers 为每个 customer 元素包含一个数据对象。每个 customer 具有两个属性:SNfirstName
            
<customers xmlns="http://customers.com"> <customer SN="1" firstName="Adam" /> <customer SN="2" firstName="Baker" /> </customers>
读取文件数据。
            
DataObject root = xmlService.load(InputStream);

遍历 customer 数据对象列表并打印出每个名 (first name)。
            
Iterator i = root.getList("customer").iterator(); while (i.hasNext()) { DataObject cust = (DataObject) i.next(); String name = cust.getString("firstName"); System.out.println(name); }

将第一个客户数据对象的 firstName 属性设为 Kevin。中间件更新变更摘要(这里并没有显示出来)来指示改变了的数据。
            
DataObject customer1 = root.getDataObject("customer[1]"); customer1.setString("firstName", "Kevin"); // or root.setString("customer[1]/firstName", "Kevin");
将数据对象写入文件。
            
xmlService.save(OutputStream, root);
结果是更新的 XML 文档。
            
<customers xmlns="http://customers.com"> <customer SN="1" firstName="Kevin" /> <customer SN="2" firstName="Baker" /> </customers>

 

0
相关文章