JavaTM 2 Platform
Standard Ed. 6

軟體套件 javax.sql.rowset.spi

第三方供應商在其同步提供者的實作中必須使用的標準類別和介面。

請參見:
          描述

介面摘要
SyncResolver 定義一個框架,當發生同步衝突時,它允許應用程序使用手工決策階層樹來確定應該執行的操作。
TransactionalWriter 一個專用介面,用來方便地擴展標準 SyncProvider 抽象類別以便擁有細粒度的事務控制。
XmlReader 一個專用介面,用來方便地擴展 SyncProvider 抽象類別以用於導向 XML 的同步提供者。
XmlWriter 一個專用介面,用來方便地擴展 SyncProvider 抽象類別以用於導向 XML 的同步提供者。
 

類別摘要
SyncFactory 該服務提供者介面 (SPI) 機制可以產生由非連接 RowSet 物件使用的 SyncProvider 實例。
SyncProvider 為非連接 RowSet 物件提供 reader/writer 功能的同步機制。
 

異常摘要
SyncFactoryException 指示 SyncFactory 機制發生的錯誤。
SyncProviderException 指示 SyncProvider 機制發生的錯誤。
 

軟體套件 javax.sql.rowset.spi 的描述

第三方供應商在其同步提供者的實作中必須使用的標準類別和介面。這些類別和介面被稱為服務提供者介面 (SPI)。供應商通過向 jdbc@sun.com 發送電子郵件,可以使其實作被 JDBC 網頁所包含,該網頁列出了可用的 SyncProvider 實作。這樣做有助於開發人員瞭解該實作。為了使 RowSet 物件能夠使用實作,供應商必須向 SyncFactory 單件註冊。(有關註冊過程和所使用命名約定的完整解釋,請參閱 SyncProvider 的類別註釋。)

目錄

1.0 套件規範

以下類別和介面組成了 javax.sql.rowset.spi 套件:

javax.sql 套件中的以下介面也是 SPI 的一部分:

SyncProvider 實作通過以下機制提供非連接 RowSet 物件:將資料讀入該物件和將在該物件中修改的資料寫回底層資料源。當調用 CachedRowSet 方法 executepopulate 時,readerRowSetReaderXMLReader 物件可以將資料讀入 RowSet 物件。當調用 CachedRowSet 方法 acceptChanges 時,writerRowSetWriterXMLWriter 物件可以將更改寫回底層資料源。

RowSet 物件中的更改寫入其資料源的過程稱為同步RowSet 正在使用的 SyncProvider 實作可以確定 RowSet 物件的 writer 所使用的同步級別。同步的各種級別被稱為等級

同步的較低等級稱為樂觀 共時級別,因為它們樂觀地假設不存在任何衝突或僅有極少的衝突。當在 RowSet 物件中修改的同一資料也在資料源中修改時,會發生衝突。使用樂觀共時模型意味著如果存在衝突,則會丟失對資料源或 RowSet 物件的修改。

同步的較高等級被稱為悲觀,因為它們假設資料源會被存取並修改。這些等級可以設置各種級別的鎖定以增加不發生衝突的幾率。

最低層級別的同步只將對 RowSet 物件進行的任何更改寫入到其底層資料源。writer 不執行任何檢查衝突的操作。如果存在衝突,並且資料源值被覆寫,則其他方對資料源進行的更改會丟失。

RIXMLProvider 實作使用最低層級別的同步,並僅將 RowSet 更改寫入資料源。確實是這樣,因為 XML 資料源通常不會啟用事務處理技術來維護資料完整性。但是,特定的標準化組織已經在考慮提供基於 XML 的同步。有關詳細資訊,請參閱

     http://www.syncml.org

對於下一個級別,writer 會查看是否存在衝突,如果存在,則它不將任何內容寫入到資料源。此共時級別的問題是如果另一方在 RowSet 物件獲得其資料後修改了資料源中相應資料,則對 RowSet 物件進行的修改會丟失。RIOptimisticProvider 實作使用此級別的同步。

對於稱為悲觀共時的較高層級別的同步,writer 會採取一些步驟(如設置鎖定)來避免衝突。設置鎖定可以是在一個行上設置,也可以是在一個表或整個資料源上設置。因此,同步級別是一個以下兩者間的權衡:使用者共時存取資料源的能力和 writer 保持 RowSet 物件及其同步資料源中資料的能力。

它要求所有非連接 RowSet 物件(CachedRowSetFilteredRowSetJoinRowSetWebRowSet 物件)從 SyncFactory 機制獲取它們的 SyncProvider 物件。

參考實作 (RI) 提供兩個同步提供者。

這些 SyncProvider 實作與參考實作捆綁在一起,使它們總是可用於 RowSet 實作。SyncProvider 實作通過向單一 SyncFactory 註冊使它們本身可用。當 RowSet 物件通過在建構子中指定某個提供者,或者指定它作為 CachedRowSet 方法 setSyncProvider 的參數來請求該提供者時,該單一 SyncFactory 會查看請求的提供者是否已向它註冊。如果已註冊,則 SyncFactory 創建一個它的實例,並將它傳遞到發出請求的 RowSet 物件。如果指定的 SyncProvider 實作沒有註冊,則單一 SyncFactory 導致拋出 SyncFactoryException 物件。如果不指定任何提供者,則單一 SyncFactory 將創建一個預設的提供者實作 RIOptimisticProvider 的實例,並將它傳遞到發出請求的 RowSet 物件。

如果 WebRowSet 物件在其建構子中未指定提供者,則 SyncFactory 將為它提供一個 RIOptimisticProvider 實例。但是,可以實作 WebRowSet 的建構子來將提供者設置為 RIXMLProvider,它以 XML 格式讀取和寫入 RowSet 物件。

有關更多詳細資訊,請參閱 SyncProvider 類別規範。

供應商可以使用任何一個可能級別的同步開發 SyncProvider 實作,從而給 RowSet 物件一個選擇同步機制的機會。供應商通過向 jdbc@sun.com 的 Sun Microsystems 註冊完全限定類別名稱使其實作可用。下面將更加詳細地討論此過程。

2.0 服務提供者介面架構

  • 3.0 SyncProvider 實作者指南

    4.0 解決同步衝突

    介面 SyncResolver 提供了一種應用程序手動確定發生衝突時應執行的操作的方式。當 CachedRowSet 方法 acceptChanges 完成並檢測到一個或多個衝突時,它將拋出一個 SyncProviderException 物件。應用程序可以捕獲該異常,並通過調用方法 SyncProviderException.getSyncResolver() 使它檢索 SyncResolver 物件。

    SyncResolver 物件是實作了 SyncResolver 介面的一種特殊 CachedRowSet 物件或 JdbcRowSet 物件,它逐行檢查衝突。它與同步的 RowSet 物件完全相同,區別在於它僅包含資料源中導致衝突的資料。將所有其他列值都設置為 null。為了從一個衝突值導航到另一個衝突值,SyncResolver 物件提供了方法 nextConflictpreviousConflict

    SyncResolver 介面也提供了一些方法,用於執行以下操作:

    在調用 CachedRowSet 方法 acceptChanges 時,它會委託給 RowSet 物件的 SyncProvider 物件。實作的 SyncProvider 物件提供 writer 的方式決定對衝突執行檢查的級別(等級)。完成所有的衝突檢查並且找到一個或多個衝突之後,方法 acceptChanges 會拋出一個 SyncProviderException 物件。應用程序可以捕獲該異常,並使用該異常獲取 SyncResolver 物件。

    然後,應用程序可以使用 SyncResolver 方法獲取關於每個衝突的資訊,並決定要執行的操作。如果應用程序邏輯或使用者決定 RowSet 物件中的值應該保留,那麼應用程序或使用者可以使用它覆寫資料源值。

    SyncResolver 介面的註釋有更多詳細資訊。

    5.0 相關的規範

    6.0 相關的文檔


    JavaTM 2 Platform
    Standard Ed. 6

    提交錯誤或意見

    版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only