JavaTM 2 Platform
Standard Ed. 6

javax.sql.rowset.spi
類別 SyncFactory

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

public class SyncFactory
extends Object

該服務提供者介面 (SPI) 機制可以產生由非連接 RowSet 物件使用的 SyncProvider 實例。SyncProvider 實例依次提供 javax.sql.RowSetReader 物件和 javax.sql.RowSetWriter 物件,RowSet 物件需要前者來使用資料填充本身,需要後者來將對其資料的更改傳播回底層資料源。

因為 SyncFactory 類別中的方法都是靜態的,所以每個 Java VM 在任意一個時刻內僅有一個 SyncFactory 物件。這能確保存在一個 RowSet 實作可以從中獲取其 SyncProvider 實作的單一源。

1.0 概觀

SyncFactory 類別提供可用同步提供者實作(SyncProvider 物件)的內部註冊表。可以查詢此註冊表以確定可用的同步提供者。以下的程式碼行可以獲取當前註冊的提供者所組成的列舉。
     java.util.Enumeration e = SyncFactory.getRegisteredProviders();
 
所有的標準 RowSet 實作必須至少提供兩個提供者: 注意,JDBC RowSet 實作包括滿足此要求的 SyncProvider 實作 RIOptimisticProviderRIXmlProvider

SyncFactory 類別提供了一些存取器方法,用來說明應用程序確定當前向 SyncFactory 註冊的同步提供者。

其他方法讓 RowSet 持久提供者向處理器機制註冊或註銷。這允許其他同步提供者實作在運行時可用於 RowSet 物件。

應用程序可以應用一定程度的過濾,以確定 SyncProvider 實作提供的同步級別。以下標準確定提供者是否可用於 RowSet 物件:

  1. 如果 RowSet 物件指定了特定的提供者,並且 SyncFactory 不包含對此提供者的參考,則拋出 SyncFactoryException,宣告不能找到同步提供者。

  2. 如果使用指定的提供者實例化 RowSet 實作,並且適當地註冊了指定的提供者,則提供請求的提供者。否則,將拋出 SyncFactoryException

  3. 如果 RowSet 物件未指定 SyncProvider 實作,並且沒有其他可用的 SyncProvider 實作,則提供參考實作提供者。

2.0 註冊 SyncProvider 實作

供應商和開發人員都可以使用以下機制之一註冊 SyncProvider 實作。

接下來,應用程序將向 SyncFactory 實例註冊 JNDI 上下文。這允許 SyncFactory 在 JNDI 上下文中進行瀏覽,以尋找 SyncProvider 實作。
    Hashtable appEnv = new Hashtable();
    appEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming");
    appEnv.put(Context.PROVIDER_URL, "iiop://hostname/providers");
    Context ctx = new InitialContext(appEnv);

    SyncFactory.registerJNDIContext(ctx);
 
如果 RowSet 物件試圖獲得 MyProvider 物件,則 SyncFactory 將嘗試尋找它。首先,在系統屬性中進行搜尋,然後在資源檔案中尋找,最後檢查已設置的 JNDI 上下文。SyncFactory 實例驗證請求的提供者是否為 SyncProvider 抽象類別的有效擴展,然後將它提供給 RowSet 物件。在以下程式碼片段中,使用 env 創建並初始化一個新的 CachedRowSet 物件,該物件包含對 MyProvider 的綁定。
    Hashtable env = new Hashtable();
    env.put(SyncFactory.ROWSET_SYNC_PROVIDER, "com.fred.providers.MyProvider");
    CachedRowSet crs = new com.sun.rowset.CachedRowSetImpl(env); 
 
javax.sql.rowset.spi 套件規範中提供了關於這些機制的更多詳細資訊。

另請參見:
SyncProvider, SyncFactoryException

欄位摘要
static String ROWSET_SYNC_PROVIDER
          用於同步提供者實作名稱的標準屬性 id。
static String ROWSET_SYNC_PROVIDER_VERSION
          用於同步提供者實作版本標記的標準屬性 id。
static String ROWSET_SYNC_VENDOR
          用於同步提供者實作供應商名稱的標準屬性 id。
 
方法摘要
static SyncProvider getInstance(String providerID)
          返回 providerID 標識的 SyncProvider 實例。
static Logger getLogger()
          返回應用程序的日誌物件,以獲取 SyncProvider 實作發送的同步事件。
static Enumeration<SyncProvider> getRegisteredProviders()
          返回當前已註冊的同步提供者所組成的列舉。
static SyncFactory getSyncFactory()
          返回一個 SyncFactory
static void registerProvider(String providerID)
          將給定的同步提供者添加到處理器註冊器。
static void setJNDIContext(Context ctx)
          設置初始 JNDI 上下文,通過該上下文可以從 JNDI 名稱空間獲取 SyncProvider 實作
static void setLogger(Logger logger)
          設置 SyncFactory 提供的 SyncProvider 實作所使用的日誌物件。
static void setLogger(Logger logger, Level level)
          設置 SyncFactory SPI 提供的 SyncProvider 實作所使用的日誌物件。
static void unregisterProvider(String providerID)
          從處理器 SPI 註冊器移除指派的當前已註冊同步提供者。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

ROWSET_SYNC_PROVIDER

public static String ROWSET_SYNC_PROVIDER
用於同步提供者實作名稱的標準屬性 id。


ROWSET_SYNC_VENDOR

public static String ROWSET_SYNC_VENDOR
用於同步提供者實作供應商名稱的標準屬性 id。


ROWSET_SYNC_PROVIDER_VERSION

public static String ROWSET_SYNC_PROVIDER_VERSION
用於同步提供者實作版本標記的標準屬性 id。

方法詳細資訊

registerProvider

public static void registerProvider(String providerID)
                             throws SyncFactoryException
將給定的同步提供者添加到處理器註冊器。在 SyncProvider 規範中為 SyncProvider 實作所需的命名約定提供了指導方針。

通過將 SyncProvider 實例綁定到 JNDI 名稱空間可以註冊綁定到 JNDI 上下文的同步提供者。

另外,應通過 SyncFactory 使用 setJNDIContext 方法設置初始 JNDI 上下文。SyncFactory 利用此上下文搜尋綁定到 JNDI 上下文及其子節點的可用 SyncProvider 物件。

參數:
providerID - 一個 String 物件,具有註冊的同步提供者的唯一 ID
拋出:
SyncFactoryException - 如果進行嘗試提供空的或 null 提供者名稱
另請參見:
setJNDIContext(javax.naming.Context)

getSyncFactory

public static SyncFactory getSyncFactory()
返回一個 SyncFactory

返回:
SyncFactory 實例

unregisterProvider

public static void unregisterProvider(String providerID)
                               throws SyncFactoryException
從處理器 SPI 註冊器移除指派的當前已註冊同步提供者。

參數:
providerID - 同步提供者的唯一 id
拋出:
SyncFactoryException - 如果嘗試註銷未註冊的 SyncProvider 實作。

getInstance

public static SyncProvider getInstance(String providerID)
                                throws SyncFactoryException
返回 providerID 標識的 SyncProvider 實例。

參數:
providerID - 提供者的唯一標識符
返回:
SyncProvider 實作
拋出:
SyncFactoryException - 如果無法找到 SyncProvider,或者嘗試調用此提供者時遇到某種錯誤。

getRegisteredProviders

public static Enumeration<SyncProvider> getRegisteredProviders()
                                                        throws SyncFactoryException
返回當前已註冊的同步提供者所組成的列舉。RowSet 實作可以將列舉中的任何提供者用作其 SyncProvider 物件。

至少應該可以使用允許用 JDBC 驅動程序存儲 RowSet 內容資料的那個同步提供者。

返回:
Enumeration 向此處理器註冊的可用同步提供者所組成的列舉
拋出:
SyncFactoryException

setLogger

public static void setLogger(Logger logger)
設置 SyncFactory 提供的 SyncProvider 實作所使用的日誌物件。所有 SyncProvider 實作可以將其事件記錄到此物件,應用程序可以使用 getLogger 方法獲取此物件的句柄。

參數:
logger - Logger 物件實例

setLogger

public static void setLogger(Logger logger,
                             Level level)
設置 SyncFactory SPI 提供的 SyncProvider 實作所使用的日誌物件。所有 SyncProvider 實作可以將其事件記錄到此物件,應用程序可以使用 getLogger 方法獲取此物件的句柄。

參數:
logger - Logger 物件實例
level - 指示所需日誌等級的 Level 物件實例

getLogger

public static Logger getLogger()
                        throws SyncFactoryException
返回應用程序的日誌物件,以獲取 SyncProvider 實作發送的同步事件。

拋出:
SyncFactoryException - 如果未設置任何日誌物件。

setJNDIContext

public static void setJNDIContext(Context ctx)
                           throws SyncFactoryException
設置初始 JNDI 上下文,通過該上下文可以從 JNDI 名稱空間獲取 SyncProvider 實作

參數:
ctx - 有效的 JNDI 上下文
拋出:
SyncFactoryException - 如果提供的 NDI 上下文為 null

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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