天天看點

服務對象資料

轉載來自【IT168 技術文檔】網址: http://tech.it168.com/j/2006-06-14/200606140100770.shtml

    服務對象資料 

    服務對象資料(Service Data Object,SDO)使用統一的抽象代替了各種各樣的資料通路模型來建立、檢索、更新和删除供服務實作使用的業務資料。SDO(請參閱參考資料部分中的 Service Data Objects 2.0 和 Next-Generation Data Programming: Service Data Objects)是 IBM 面向服務的體系結構 (SOA) 的基礎概念。SDO 将開發人員從如何通路特定的後端資料源的技術細節中解放出來,提高了他們的工作效率,這樣他們就可以主要專注于業務邏輯(請參閱參考資料部分中的 Integrating relational data into Web applications、Next-generation data programming in the Java™ environment 以及 Using Service Data Objects with Enterprise Information Integration technology)。SDO 是與 BEA Systems, Inc. 聯合制訂的規範,并且在 IBM 系列産品中得到了廣泛的使用,包括 WebSphere® Application Server 和 Rational® Studio 工具。Java™ 資料庫連接配接(Java™ DataBase Connectivity),通常稱為 JDBC,是執行結構化查詢語言(Structured Query Langauge,SQL)語句的 Java 接口。目前,用于 JDBC、Web 服務描述語言(Web Services Description Language,WSDL)定義的服務、企業 JavaBean(Enterprise JavaBean,EJB)等等由 Java 編寫的服務實作的程式設計模型都是相似的,但卻又有一些讓人讨厭的不同。

    SDO 定義了一種單一的、統一的方法來通路和操作來自異構資料源的資料,包括關系型資料庫、可擴充标記語言(eXtensible Markup Language,XML)資料源、Web 服務以及企業資訊系統 (EIS)。它們是基于資料圖(data graph)的概念。資料圖就是一組可以從資料源中分離出來的樹形結構的對象。SDO 可以在整個應用程式體系結構中使用。

應用程式體系結構的領域 如何使用 SDO
SOA
  • SDO 是服務的輸入和輸出。
資料通路
  • SDO 通路關系型、XML、EJB、Java 資料對象(Java Data Object,JDO)和 Hibernate 資料源。
  • SDO 是資料傳輸對象(Data Transfer Object,DTO)——也被稱為值對象(Value Object)。
Web 服務
  • SDO 表示網絡上的 XML。
消息傳遞
  • SDO 表示消息。
XML 使用 SDO 的情況:
  • 支援 XML 的應用程式。
  • 通路 XML 檔案、文檔、資源和消息。
連接配接器/擴充卡(EIS,CICS)
  • SDO 表示資料記錄。
EJB
  • SDO 是 DTO(也被稱作值對象)。
  • Java 2 企業版(Java 2 Enterprise Edition,J2EE)設計模式。
ADO.NET
  • ADO DataSet 是 SDO 資料圖的子集。
企業服務總線(Enterprise Service Bus,ESB)
  • SDO 是服務的輸入和輸出。
跨語言程式設計模型
  • 完整的應用程式可能橫跨層和語言。
  • 用于很多種語言技能集的相同的程式設計模型。
模型驅動的體系結構(Model-driven architecture,MDA)
  • SDO 模型(類型(Type)和屬性(Property))是通過統一模組化語言(Unified Modelling Language,UML)類群組件定義的。
  • SDO 應用程式遵循 UML 順序 (Sequence)、流 (Flow)、狀态 (State) 和協作 (Collaboration)。
Java
  • SDO 是帶有 POJO 接口的智能的“傳統 Java 對象(plain old Java object,POJO)”。

    在 SOA 中,應用程式并不直接地連接配接資料源。它通路一個叫做資料通路服務(data access service,DAS)的中介并接收響應中的資料圖。DAS 是為特定資料源種類處理技術細節的服務。它為客戶機将資料轉換成 SDO 圖。客戶機應用程式與資料圖進行互動來獲得資料和改變資料。為了将更新應用于原始的資料源,應用程式将更新過的圖發送回 DAS,而 DAS 又與資料源互動。通常,運作時提供 DAS 的實作,而應用程式開發工具提供對資料圖的支援。

    SDO 通過封裝資料通路的細節将業務應用程式與技術改變相隔離,進而避開了技術改變産生的影響——重新編寫應用程式以便跟上改變的技術.例如,考慮一個設計用來從資料庫中讀取産品描述并将其作為網頁顯示的 Java Web 應用程式。為了通路資料庫中的産品描述,應用程式很可能使用 JDBC。假設不久後應用程式拓撲發生了改變,在應用程式和資料庫之間放置了 Web 服務。現在,應用程式不能再使用 JDBC 通路資料,而是需要重做大量的工作來替換 Web 服務應用程式設計接口 (API),例如文檔對象模型(Document Object Model,DOM)或者基于 XML 的遠端過程調用的 Java API(Java APIs for XML-Based Remote Procedure Call,JAX-RPC)。SDO 避免了這個問題;使用 SDO 編寫的應用程式不必改變。 

    另外,SDO 提供了支援中繼資料 API 的應用程式、工具和架構來以統一的方式自省資料模型,而不管它的來源。DAS 将後端中繼資料轉換成标準的 SDO 格式。 

    SDO 類型可以由 Java 接口、XML Schema、關系型表和列、EJB、COBOL 記錄、消息或者 UML 來定義(請參閱參考資料部分中的 Catalog of OMG Modeling and Metadata Specifications);實作人員可以選擇自己喜歡的系統類型。簡單 Java 和 XML 資料類型是有效的 SDO 資料類型,這為 Java 實作人員簡化了一步。SDO 支援動态的和靜态的資料通路模型,兩者也可以一起使用。我們将更詳細地考慮這些内容: 

    動态模型(預設值)允許程式設計人員通過名稱(字元串)獲得和設定資料圖中的資料元素。當 SDO 的類型在編譯階段未知時,或者當程式部署完以後可能要添加新的屬性時,這特别有用。客戶機應用程式或服務查詢 SDO 來了解它的結構,然後按名稱讀取和更新任何元素。例如,可以編寫一個泛型 SDO 通路函數并用特定于元素的中繼資料填充它來通路單獨的 SDO。SDO 同樣也使用 XML 路徑語言( XML Path Language,XPath)表達式的子集來支援快速周遊許多 DataObject,例如 customer[1]/address/zip,以便快速通路 customer DataObejct 的 zip 代碼。

靜态模型使用命名和類型化 Java 接口。每個資料元素有自己的“getter”和“setter”方法。工具從 SDO 類型和屬性生成靜态接口。 

    SDO 對于資料表示非常重要,即使沒有典型的資料源也如此。這種用法的例子包括使用 Web 服務交換的 XML 消息、Java 消息服務 (JMS) 消息、XML 檔案等等。 

     示例 

    下面的例子——定義了包含客戶資料的資料對象——說明了使用 Java 或 XML 來定義和使用 SDO 是多麼的容易。示例 1(使用 XML)是 SDO 類型的基礎。 

    示例 1:使用 XML 的 SDO 類型定義

服務對象資料
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
服務對象資料
< schema xmlns = " http://www.w3.org/2001/XMLSchema "
服務對象資料
xmlns:tns = " http://www.myvalue.com "
服務對象資料
targetNamespace = " http://www.myvalue.com " >
服務對象資料
< element name = " customer " type = " Customer " />
服務對象資料
< complexType name = " Customer " >
服務對象資料
< sequence >
服務對象資料
< element name = " customerID " type = " string " />
服務對象資料
< element name = " firstName " type = " string " />
服務對象資料
< element name = " lastName " type = " string " />
服務對象資料
< element name = " stockSymbol " type = " string " />
服務對象資料
< element name = " stockQuantity " type = " int " />
服務對象資料
</ sequence >
服務對象資料
</ complexType >
服務對象資料
</ schema >
服務對象資料

    在示例 2 中,由前面的 XML 所生成的 Java 接口說明了如何使用靜态接口。 使用 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);
服務對象資料
}
服務對象資料