|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjavax.sql.rowset.spi.SyncFactory
public class SyncFactory
該服務提供者介面 (SPI) 機制可以產生由非連接 RowSet 物件使用的 SyncProvider 實例。SyncProvider 實例依次提供 javax.sql.RowSetReader 物件和 javax.sql.RowSetWriter 物件,RowSet 物件需要前者來使用資料填充本身,需要後者來將對其資料的更改傳播回底層資料源。
因為 SyncFactory 類別中的方法都是靜態的,所以每個 Java VM 在任意一個時刻內僅有一個 SyncFactory 物件。這能確保存在一個 RowSet 實作可以從中獲取其 SyncProvider 實作的單一源。
SyncFactory 類別提供可用同步提供者實作(SyncProvider 物件)的內部註冊表。可以查詢此註冊表以確定可用的同步提供者。以下的程式碼行可以獲取當前註冊的提供者所組成的列舉。
java.util.Enumeration e = SyncFactory.getRegisteredProviders();
所有的標準 RowSet 實作必須至少提供兩個提供者:
CachedRowSet 實作或從該實作派生的實作一起使用。
WebRowSet 物件一起使用時)。
SyncProvider 實作 RIOptimisticProvider 和 RIXmlProvider。
SyncFactory 類別提供了一些存取器方法,用來說明應用程序確定當前向 SyncFactory 註冊的同步提供者。
其他方法讓 RowSet 持久提供者向處理器機制註冊或註銷。這允許其他同步提供者實作在運行時可用於 RowSet 物件。
應用程序可以應用一定程度的過濾,以確定 SyncProvider 實作提供的同步級別。以下標準確定提供者是否可用於 RowSet 物件:
RowSet 物件指定了特定的提供者,並且 SyncFactory 不包含對此提供者的參考,則拋出 SyncFactoryException,宣告不能找到同步提供者。
RowSet 實作,並且適當地註冊了指定的提供者,則提供請求的提供者。否則,將拋出 SyncFactoryException。
RowSet 物件未指定 SyncProvider 實作,並且沒有其他可用的 SyncProvider 實作,則提供參考實作提供者。
SyncProvider 實作
供應商和開發人員都可以使用以下機制之一註冊 SyncProvider 實作。
-Drowset.provider.classname=com.fred.providers.HighAvailabilityProvider
#Default JDBC RowSet sync providers listing # # Optimistic synchronization provider rowset.provider.classname.0=com.sun.rowset.providers.RIOptimisticProvider rowset.provider.vendor.0=Sun Microsystems Inc rowset.provider.version.0=1.0 # XML Provider using standard XML schema rowset.provider.classname.1=com.sun.rowset.providers.RIXMLProvider rowset.provider.vendor.1=Sun Microsystems Inc. rowset.provider.version.1=1.0
SyncFactory 檢查此檔案,並註冊它包含的 SyncProvider 實作。開發人員或供應商可以將其他實作添加到此檔案。例如,可能添加以下內容:
rowset.provider.classname.2=com.fred.providers.HighAvailabilityProvider
rowset.provider.vendor.2=Fred, Inc.
rowset.provider.version.2=1.0
SyncFactory 將嘗試從該 JNDI 上下文載入 SyncProvider 實作。例如,以下程式碼片段將在 JNDI 上下文中註冊提供者實作。這是部署者通常都要執行的命令。在此範例中,MyProvider 在 CosNaming 名稱空間(它是 J2EE 資源使用的名稱空間)上註冊。
import javax.naming.*;
Hashtable svrEnv = new Hashtable();
srvEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming");
Context ctx = new InitialContext(svrEnv);
com.fred.providers.MyProvider = new MyProvider();
ctx.rebind("providers/MyProvider", 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 |
| 欄位詳細資訊 |
|---|
public static String ROWSET_SYNC_PROVIDER
public static String ROWSET_SYNC_VENDOR
public static String ROWSET_SYNC_PROVIDER_VERSION
| 方法詳細資訊 |
|---|
public static void registerProvider(String providerID)
throws SyncFactoryException
SyncProvider 規範中為 SyncProvider 實作所需的命名約定提供了指導方針。
通過將 SyncProvider 實例綁定到 JNDI 名稱空間可以註冊綁定到 JNDI 上下文的同步提供者。
SyncProvider p = new MySyncProvider();
InitialContext ic = new InitialContext();
ic.bind ("jdbc/rowset/MySyncProvider", p);
另外,應通過 SyncFactory 使用 setJNDIContext 方法設置初始 JNDI 上下文。SyncFactory 利用此上下文搜尋綁定到 JNDI 上下文及其子節點的可用 SyncProvider 物件。
providerID - 一個 String 物件,具有註冊的同步提供者的唯一 ID
SyncFactoryException - 如果進行嘗試提供空的或 null 提供者名稱setJNDIContext(javax.naming.Context)public static SyncFactory getSyncFactory()
SyncFactory。
SyncFactory 實例
public static void unregisterProvider(String providerID)
throws SyncFactoryException
providerID - 同步提供者的唯一 id
SyncFactoryException - 如果嘗試註銷未註冊的 SyncProvider 實作。
public static SyncProvider getInstance(String providerID)
throws SyncFactoryException
SyncProvider 實例。
providerID - 提供者的唯一標識符
SyncProvider 實作
SyncFactoryException - 如果無法找到 SyncProvider,或者嘗試調用此提供者時遇到某種錯誤。
public static Enumeration<SyncProvider> getRegisteredProviders()
throws SyncFactoryException
RowSet 實作可以將列舉中的任何提供者用作其 SyncProvider 物件。
至少應該可以使用允許用 JDBC 驅動程序存儲 RowSet 內容資料的那個同步提供者。
SyncFactoryExceptionpublic static void setLogger(Logger logger)
SyncFactory 提供的 SyncProvider 實作所使用的日誌物件。所有 SyncProvider 實作可以將其事件記錄到此物件,應用程序可以使用 getLogger 方法獲取此物件的句柄。
logger - Logger 物件實例
public static void setLogger(Logger logger,
Level level)
SyncFactory SPI 提供的 SyncProvider 實作所使用的日誌物件。所有 SyncProvider 實作可以將其事件記錄到此物件,應用程序可以使用 getLogger 方法獲取此物件的句柄。
logger - Logger 物件實例level - 指示所需日誌等級的 Level 物件實例
public static Logger getLogger()
throws SyncFactoryException
SyncFactoryException - 如果未設置任何日誌物件。
public static void setJNDIContext(Context ctx)
throws SyncFactoryException
ctx - 有效的 JNDI 上下文
SyncFactoryException - 如果提供的 NDI 上下文為 null
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。