JavaTM 2 Platform
Standard Ed. 6

javax.sql.rowset.spi
類別 SyncProvider

java.lang.Object
  繼承者 javax.sql.rowset.spi.SyncProvider

public abstract class SyncProvider
extends Object

為非連接 RowSet 物件提供 reader/writer 功能的同步機制。SyncProvider 實作是一個擴展了 SyncProvider 抽象類別的類別。

SyncProvider 實作由一個唯一 ID 標識,該 ID 即其完全限定類別名稱。此名稱必須向 SyncFactory SPI 註冊,這樣才能使該實作可用於所有的 RowSet 實作。參考實作中的處理器機制使用此名稱來實例化該實作,然後該實作可以通過其 reader(javax.sql.RowSetReader 物件)和 writer(javax.sql.RowSetWriter 物件)提供一個 RowSet 物件。

Jdbc RowSet 實作規範提供 SyncProvider 抽象類別的兩個參考實作:RIOptimisticProviderRIXMLProviderRIOptimisticProvider 可以使用 RowSetReader 物件和 RowSetWriter 物件設置任何 RowSet 實作。但是,只有 RIXMLProvider 實作可以設置 XmlReader 物件和 XmlWriter 物件。WebRowSet 物件使用 XmlReader 物件以 XML 格式讀取資料,然後使用該資料填充本身。它使用 XmlWriter 物件以 XML 格式將本身寫入到串流或 java.io.Writer 物件。

1.0 實作的命名約定

作為命名 SyncProvider 實作的指南,應注意以下事項:

例如,如果名為 Fred, Inc. 的供應商提供了 SyncProvider 實作,則可能擁有以下內容:

     Vendor name:  Fred, Inc.     
     Domain name of vendor:  com.fred
     Package name:  com.fred.providers
     SyncProvider implementation class name:  HighAvailabilityProvider

     Fully qualified class name of SyncProvider implementation:
                        com.fred.providers.HighAvailabilityProvider 
 

以下程式碼行使用完全限定名稱向 SyncFactory 靜態實例註冊此實作。

     SyncFactory.registerProvider(
                          "com.fred.providers.HighAvailabilityProvider");
 

通過參考實作提供的預設 SyncProvider 物件使用以下名稱:

     com.sun.rowset.providers.RIOptimisticProvider 
 

供應商可以通過發送電子郵件到 jdbc@sun.com 向 Sun Microsystems 公司註冊 SyncProvider 實作類別名稱。Sun 將維護列出可用 SyncProvider 實作的資料庫,以便與相容 RowSet 實作一起使用。此資料庫將類似於已維護列出可用 JDBC 驅動程序的資料庫。

有關如何實作一個新的 SyncProvider 實作的附加指南,供應商應參考參考實作同步提供者。

2.0 RowSet 物件如何獲取其提供者

非連接 Rowset 物件可以使用以下兩種方法之一獲取對 SyncProvider 物件的存取:

預設情況下,RowSet 同步提供者的參考實作總是可用於 Java 平臺。如果沒有正確地註冊任何其他可插入的同步提供者,則 SyncFactory 將自動產生一個預設 SyncProvider 參考實作的實例。這樣,在前述的程式碼片段中,如果沒有任何名為 com.fred.providers.HighAvailabilitySyncProvider 的實作已向 SyncFactory 實例註冊,則 crs 將被分派一個參考實作中的預設提供者,它是 com.sun.rowset.providers.RIOptimisticProvider

3.0 衝突和同步問題

如果非連接 RowSet 物件和資料源之間的更新與初始查詢或底層資料源約束髮生衝突,則這將導致所有非連接 RowSet 實作及其指派的 SyncProvider 實作的行為不明確。不定義此類別衝突發生時的行為給 SyncProvider 實作提供更大的靈活性,使它能自己決定如何反應。

SyncProvider 實作可以選擇實作特定的處理程序來處理查詢衝突的子集。但是,如果 SyncProvider 實作沒有處理原始查詢衝突或更一般的資料源約束衝突,則所有的 SyncProvider 物件必須拋出 SyncProviderException

4.0 可更新的 SQL VIEW

能夠從 SQL 查詢(最初從 SQL VIEW 形成)填充任何非連接或連接的 RowSet 物件。雖然在許多情況下能夠對底層視圖執行更新,但是此類別更新需要附加的元資料,並且該資料可能不同。SyncProvider 類別提供兩個常數來指示實作是否支持更新 SQL VIEW

如果使用取自 SQL VIEW 的資料填充 RowSet 物件,則預設情況是它不可更新。

5.0 SyncProvider 常數

SyncProvider 類別提供三個常數集,用作返回值或 SyncProvider 方法的參數。可以實作 SyncProvider 物件來使用不同的關心程度執行 RowSet 物件與其底層資料源之間的同步。第一組常數指示如何處理同步。例如,GRADE_NONE 指示 SyncProvider 物件將不會注意查看哪些資料有用,只是將 RowSet 資料寫入資料源。GRADE_MODIFIED_AT_COMMIT 指示提供者只檢查修改資料的有效性。其他等級檢查所有資料的有效性,或者在修改或載入資料時設置鎖定。
  1. 指示 SyncProvider 物件的同步等級的常數
  2. 指示在資料源上設置何種鎖定的常數
  3. 指示 SyncProvider 物件是否可以對 SQL VIEW 執行更新的常數
    在前述的章節 (4.0) 中已對這些常數進行了解釋。

另請參見:
SyncFactory, SyncFactoryException

欄位摘要
static int DATASOURCE_DB_LOCK
          指示鎖定整個資料源,該資料源是正在使用此 SyncProvider 物件的 RowSet 物件的資料源。
static int DATASOURCE_NO_LOCK
          指示在原始資料源上不保持任何鎖定。
static int DATASOURCE_ROW_LOCK
          指示鎖定原始 SQL 語句涉及的行,該語句用於填充正在使用此 SyncProvider 物件的 RowSet 物件。
static int DATASOURCE_TABLE_LOCK
          指示鎖定原始 SQL 語句涉及的所有表,該語句用於填充正在使用此 SyncProvider 物件的 RowSet 物件。
static int GRADE_CHECK_ALL_AT_COMMIT
          指示關於原始資料源的高層級別樂觀同步等級。
static int GRADE_CHECK_MODIFIED_AT_COMMIT
          指示關於原始資料源的低層級別樂觀同步等級。
static int GRADE_LOCK_WHEN_LOADED
          指示關於原始資料源的最悲觀同步等級。
static int GRADE_LOCK_WHEN_MODIFIED
          指示關於原始資料源的悲觀同步等級。
static int GRADE_NONE
          指示沒有提供與原始資料源的同步。
static int NONUPDATABLE_VIEW_SYNC
          指示 SyncProvider 實作支持 RowSet 物件和用於填充它的 SQL VIEW 之間的同步。
static int UPDATABLE_VIEW_SYNC
          指示 SyncProvider 實作支持 RowSet 物件和用於填充它的 SQL VIEW 之間的同步。
 
建構子摘要
SyncProvider()
          創建預設的 SyncProvider 物件。
 
方法摘要
abstract  int getDataSourceLock()
          返回在此 SyncProvider 實作中活動的當前資料源鎖定嚴重性級別。
abstract  int getProviderGrade()
          返回一個常數,它指示 RowSet 物件希望從此 SyncProvider 物件獲得的同步等級。
abstract  String getProviderID()
          返回此 SyncProvider 物件的唯一標識符。
abstract  RowSetReader getRowSetReader()
          返回 javax.sql.RowSetReader 物件,它可以用於填充帶有資料的 RowSet 物件。
abstract  RowSetWriter getRowSetWriter()
          返回 javax.sql.RowSetWriter 物件,它可以用於將 RowSet 物件的資料寫回底層資料源。
abstract  String getVendor()
          返回此 SyncProvider 實例的供應商名稱
abstract  String getVersion()
          返回此 SyncProvider 實例的發行版本。
abstract  void setDataSourceLock(int datasource_lock)
          按照 datasource_lock 指示的級別在底層資料源上設置鎖定。
abstract  int supportsUpdatableView()
          返回此 SyncProvider 實作是否可以執行 RowSet 物件和資料源(RowSet 從中獲取其資料)中的 SQL VIEW 之間的同步。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

GRADE_NONE

public static int GRADE_NONE
指示沒有提供與原始資料源的同步。返回此等級的 SyncProvider 實作僅嘗試將 RowSet 物件中的更新寫入底層資料源,而不檢查任何資料的有效性。


GRADE_CHECK_MODIFIED_AT_COMMIT

public static int GRADE_CHECK_MODIFIED_AT_COMMIT
指示關於原始資料源的低層級別樂觀同步等級。 返回此等級的 SyncProvider 實作只檢查已經更改的行。


GRADE_CHECK_ALL_AT_COMMIT

public static int GRADE_CHECK_ALL_AT_COMMIT
指示關於原始資料源的高層級別樂觀同步等級。 返回此等級的 SyncProvider 實作將檢查所有的行,包括沒有更改的行。


GRADE_LOCK_WHEN_MODIFIED

public static int GRADE_LOCK_WHEN_MODIFIED
指示關於原始資料源的悲觀同步等級。 返回此等級的 SyncProvider 實作將鎖定原始資料源中的行。


GRADE_LOCK_WHEN_LOADED

public static int GRADE_LOCK_WHEN_LOADED
指示關於原始資料源的最悲觀同步等級。返回此等級的 SyncProvider 實作將鎖定用於填充 RowSet 物件的原始語句所影響的整個視圖和/或表。


DATASOURCE_NO_LOCK

public static int DATASOURCE_NO_LOCK
指示在原始資料源上不保持任何鎖定。如果 RowSet 物件沒有其他指示,則這是所有 SyncProvider 實作的預設鎖定設置。


DATASOURCE_ROW_LOCK

public static int DATASOURCE_ROW_LOCK
指示鎖定原始 SQL 語句涉及的行,該語句用於填充正在使用此 SyncProvider 物件的 RowSet 物件。


DATASOURCE_TABLE_LOCK

public static int DATASOURCE_TABLE_LOCK
指示鎖定原始 SQL 語句涉及的所有表,該語句用於填充正在使用此 SyncProvider 物件的 RowSet 物件。


DATASOURCE_DB_LOCK

public static int DATASOURCE_DB_LOCK
指示鎖定整個資料源,該資料源是正在使用此 SyncProvider 物件的 RowSet 物件的資料源。


UPDATABLE_VIEW_SYNC

public static int UPDATABLE_VIEW_SYNC
指示 SyncProvider 實作支持 RowSet 物件和用於填充它的 SQL VIEW 之間的同步。


NONUPDATABLE_VIEW_SYNC

public static int NONUPDATABLE_VIEW_SYNC
指示 SyncProvider 實作支持 RowSet 物件和用於填充它的 SQL VIEW 之間的同步。

建構子詳細資訊

SyncProvider

public SyncProvider()
創建預設的 SyncProvider 物件。

方法詳細資訊

getProviderID

public abstract String getProviderID()
返回此 SyncProvider 物件的唯一標識符。

返回:
具有此 SyncProvider 物件的完全限定類別名的 String 物件

getRowSetReader

public abstract RowSetReader getRowSetReader()
返回 javax.sql.RowSetReader 物件,它可以用於填充帶有資料的 RowSet 物件。

返回:
javax.sql.RowSetReader 物件

getRowSetWriter

public abstract RowSetWriter getRowSetWriter()
返回 javax.sql.RowSetWriter 物件,它可以用於將 RowSet 物件的資料寫回底層資料源。

返回:
javax.sql.RowSetWriter 物件

getProviderGrade

public abstract int getProviderGrade()
返回一個常數,它指示 RowSet 物件希望從此 SyncProvider 物件獲得的同步等級。

返回:
一個 int,它是以下常數之一:SyncProvider.GRADE_NONE、SyncProvider.GRADE_CHECK_MODIFIED_AT_COMMIT、SyncProvider.GRADE_CHECK_ALL_AT_COMMIT、SyncProvider.GRADE_LOCK_WHEN_MODIFIED、SyncProvider.GRADE_LOCK_WHEN_LOADED

setDataSourceLock

public abstract void setDataSourceLock(int datasource_lock)
                                throws SyncProviderException
按照 datasource_lock 指示的級別在底層資料源上設置鎖定。這應導致 SyncProvider 為能成功同步而調整其行為,即增加或減少其提供的樂觀級別。

參數:
datasource_lock - 以下常數之一,它指示所需資料源鎖定的嚴重性級別:
           SyncProvider.DATASOURCE_NO_LOCK,
           SyncProvider.DATASOURCE_ROW_LOCK,
           SyncProvider.DATASOURCE_TABLE_LOCK,
           SyncProvider.DATASOURCE_DB_LOCK,          
 
拋出:
SyncProviderException - 如果設置不支持的資料源鎖定級別。
另請參見:
getDataSourceLock()

getDataSourceLock

public abstract int getDataSourceLock()
                               throws SyncProviderException
返回在此 SyncProvider 實作中活動的當前資料源鎖定嚴重性級別。

返回:
一個常數,它指示在此 SyncProvider 物件中活動的資料源鎖定的當前級別;是以下常數之一:
           SyncProvider.DATASOURCE_NO_LOCK,
           SyncProvider.DATASOURCE_ROW_LOCK,
           SyncProvider.DATASOURCE_TABLE_LOCK,
           SyncProvider.DATASOURCE_DB_LOCK     
 
拋出:
SyncProviderExceptiom - 如果在確定資料源鎖定級別時發生錯誤。
SyncProviderException
另請參見:
setDataSourceLock(int)

supportsUpdatableView

public abstract int supportsUpdatableView()
返回此 SyncProvider 實作是否可以執行 RowSet 物件和資料源(RowSet 從中獲取其資料)中的 SQL VIEW 之間的同步。

返回:
一個 int,表示此 SyncProvider 物件是否支持更新 SQL VIEW;它是以下常數之一:SyncProvider.UPDATABLE_VIEW_SYNC、SyncProvider.NONUPDATABLE_VIEW_SYNC

getVersion

public abstract String getVersion()
返回此 SyncProvider 實例的發行版本。

返回:
一個 String,它詳述了 SyncProvider 實作的發行版本

getVendor

public abstract String getVendor()
返回此 SyncProvider 實例的供應商名稱

返回:
一個 String,它詳述了此 SyncProvider 實作的供應商名稱

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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