摘 要:介紹了SOA架構的數據模型—服務數據對象和它的開源實現Apache Tuscany。使用Java開發語言設計了SOA企業級架構的核心平臺持久化層,實現了增、刪、改、查、持久化、定位、XML序列化、異構數據轉換等功能。
關鍵詞:服務數據對象 Tuscany SOA 持久化層
中圖分類號:TP311文獻標識碼:A文章編號:1674-098X(2011)01(b)-0024-01
SOA(Service Oriented Architecture)是面向服務的架構和軟件系統建構體系[1]。SOA核心平臺能夠為Web服務的企業級應用提供良好的環境和基礎設施,開發人員可以利用此平臺設計出具體的原型系統,進而形成產品。持久化層位于核心平臺最底層,它專注于解決核心平臺與數據源之間的數據交互問題,提供了高效、安全的數據訪問和操作模式。
1 核心平臺持久化層數據模型
核心平臺持久化層采用SDO作為數據模型。SDO(Service Data Objects)[2]是SOA的基礎規范之一,它的最大特點是能夠對異構數據進行集成[3],其本身對異構數據源進行了一系列封裝,為業務邏輯層提供了簡單統一的數據訪問方法。這樣,業務邏輯層就可以透明地處理底層數據,而不必考慮數據模型的異構性、數據抽取、數據合成等問題[4]。除此之外,SDO采用離線數據圖架構,在這種模式下,SDO的數據訪問服務DAS(Data Access Service)[2]只有在數據抽取和數據加載時才與數據源進行連接,從而有效地降低了數據服務端的負荷,避免了系統與數據源頻繁交互數據而產生的效率低下問題。
2 核心平臺持久化層基礎設施
核心平臺持久化層采用開源的Apache Tuscany SDO、DAS作為軟件開發基礎設施。Tuscany是Apache基金會的頂級項目,是SOA的一個開源實現,主要包括SCA、SDO、DAS三個子項目。Tuscany SDO依照最新的SDO v2.1標準編寫,功能非常強大,使用非常靈活;Tuscany DAS提供了支持關系數據庫的數據訪問服務組件,有很強的實用性。
3 核心平臺持久化層設計
3.1 配置文件設計
核心平臺持久化層采用XML格式設計配置文件。配置文件head元素的命名空間為:http:///org.apache.tuscany.das.rdb/config.xsd,這個XML Schema是Tuscany DAS已經定義并注冊的元數據模型,任何依照這個模型編寫的XML文件,Tuscany DAS都能夠提供無縫的支持。此外,配置文件還應包含ConnectionInfo、Command、Table三個主要元素。
ConnectionInfo記錄數據庫連接信息,主要包含ConnectionProperties元素,記載了driverClass、databaseURL、userName、password等屬性。
Command記錄命令信息,包含name、SQL、kind屬性,其中name值作為Command的唯一標識。此外,Command還應包含以ResultDescriptor子元素描述的所有查詢屬性列。
Table記錄數據庫表及其所屬列的信息,包含tableName、typeName等屬性及Column子元素,其Column子元素記載了columnName、propertyName、primaryKey等屬性。
3.2 功能設計
核心平臺持久化層主要實現增、刪、改、查、持久化、定位、XML序列化、異構數據轉換等功能,是對Tuscany SDO、DAS基礎包的二次開發。
持久化層提供的主要方法如下:
(1)DataObject getRootObject(String commandName)。
按照配置文件中Command元素的SQL屬性,與數據庫指定表建立連接并生成數據圖,結果以根數據對象形式返回。
(2)boolean commitDataObject(DataObject rootObject)。
將根數據對象下的所有變更操作批量持久化到數據庫。
(3)DataObject getQueryObject(String queryExpression)。
將輸入的子查詢字符串與配置文件中 Command 元素的SQL屬性相連,重新查詢生成數據圖并以根數據對象形式返回。
(4)boolean objectToObject(DataObject fromObject,int[] fromIndex,DataObject toObject,int[] toIndex)。
按照異構數據對象屬性列索引數組進行數據轉換。注意:進行轉換的數據對象屬性列的數據類型必須互相匹配。
(5)String getObject2Xml(DataObject dataObject,String ElementURI,String ElementName)。
按照XML格式序列化數據對象,結果以字符串的形式返回。
(6)boolean addDataObject(DataObject rootObject,String tableName,String[] propertyName,Object[] propertyValue)。
添加新數據對象到數據對象集合中。
(7)boolean batchChangingObjects(DataObject rootObject,String tableName,String[]propertyName,Object[] propertyValue)。
按照屬性列鍵/值對批量修改數據對象集合指定表路徑下的所有子數據對象。
(8)DataObject moveTo(DataObject rootObject,String tableName,int index)。
按照輸入的數據表路徑及數據記錄行索引,對數據對象集合進行子對象定位。
(9)boolean batchDeleting Objects(DataObject rootObject,String tableName)。
批量刪除數據對象集合指定表路徑下的所有子數據對象。
4 結語
本文以企業級應用為背景,采用先進的服務數據對象技術,結合開源的Tuscany基礎設施包,設計實現了SOA核心平臺的持久化層。在實際應用中,該設計能夠有效地增加程序的可重用性,縮短產品的開發周期,降低模塊之間的耦合度,提高系統的可維護性,有較高的實用價值。
參考文獻
[1]王紫瑤,南俊杰,段紫輝,等.SOA核心技術及應用[M].北京:電子工業出版社,2008.
[2]John Beatty,Stephen Brodsky,Martin Nally,etc.Service Data Objects White Paper [EB/OL].http://www.osoa.org/display/Main/SDO+Resources,2007.
[3]倪志剛,洪玫,劉佳.基于服務數據對象的異構系統數據集成方案研究[J].計算機應用,2007,27:21-23.
[4]邵彬.用于關系數據庫的SDO數據訪問組件[D].天津:天津大學,2007.