public class SyncFactory extends Object
SyncProvider实例,由断开的RowSet对象使用。
SyncProvider实例又提供javax.sql.RowSetReader对象RowSet对象需要填充数据和javax.sql.RowSetWriter对象,它需要将其数据的更改传播回底层数据源。
因为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实现提供的SyncProvider级别。 以下标准确定提供程序是否可用于RowSet对象:
RowSet对象指定,并且SyncFactory不包含对该提供程序的SyncFactoryException ,则会抛出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=Oracle Corporation
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=Oracle Corporation
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对象。
在以下代码片段中,创建一个新的CachedRowSet对象,并使用env进行MyProvider ,其中包含绑定到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
| Modifier and Type | Field and Description |
|---|---|
static String |
ROWSET_SYNC_PROVIDER
同步提供程序实现名称的标准属性ID。
|
static String |
ROWSET_SYNC_PROVIDER_VERSION
同步提供程序实现版本标记的标准属性ID。
|
static String |
ROWSET_SYNC_VENDOR
同步提供程序实现供应商名称的标准属性ID。
|
| Modifier and Type | Method and Description |
|---|---|
static SyncProvider |
getInstance(String providerID)
返回
SyncProvider通过
providerID鉴定实例。
|
static Logger |
getLogger()
返回应用程序的记录对象,以检索SyncProvider实现发布的同步事件。
|
static Enumeration<SyncProvider> |
getRegisteredProviders()
返回当前注册的同步提供程序的枚举。
|
static SyncFactory |
getSyncFactory()
返回
SyncFactory单身人士。
|
static void |
registerProvider(String providerID)
将给定的同步提供程序添加到工厂注册表。
|
static void |
setJNDIContext(Context ctx)
设置可以从JNDI命名空间中检索SyncProvider实现的初始JNDI上下文
|
static void |
setLogger(Logger logger)
设置由所使用的日志对象
SyncProvider通过所提供的实施
SyncFactory 。
|
static void |
setLogger(Logger logger, Level level)
设置由
SyncFactory SPI提供的
SyncProvider实现使用的日志记录对象。
|
static void |
unregisterProvider(String providerID)
从工厂SPI寄存器中删除指定的当前注册的同步提供程序。
|
public static final String ROWSET_SYNC_PROVIDER
public static final String ROWSET_SYNC_VENDOR
public static final 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);
此外,初始JNDI上下文应与被设定SyncFactory使用setJNDIContext方法。
SyncFactory利用此上下文来搜索绑定到JNDI上下文及其子节点的可用SyncProvider对象。
providerID - 一个
String对象,其中注册了同步提供程序的唯一ID
SyncFactoryException - 如果尝试提供一个空的或空的提供者名称
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鉴定实例。
providerID - 提供商的唯一标识符
SyncProvider实现
SyncFactoryException - 如果找不到
null ,providerID为
null ,或尝试调用此提供程序时遇到某些错误。
public static Enumeration<SyncProvider> getRegisteredProviders() throws SyncFactoryException
RowSet实现可以使用枚举中的任何提供者作为其SyncProvider对象。
至少应允许使用JDBC驱动程序存储RowSet内容数据的引用同步提供程序。
SyncFactoryException - 如果获得注册的提供者发生错误
public static void setLogger(Logger logger)
SyncProvider通过所提供的实施SyncFactory 。
所有SyncProvider实现都可以将其事件记录到此对象,并且应用程序可以使用getLogger方法检索此对象的getLogger 。
此方法检查是否有一个SQLPermission对象在允许该方法成功之前授予权限setSyncFactory 。 如果一个SecurityManager存在,它的checkPermission方法拒绝调用setLogger ,这种方法抛出一个java.lang.SecurityException 。
logger - 记录器对象实例
SecurityException - 如果存在安全管理员,并且其
checkPermission方法拒绝呼叫
setLogger
NullPointerException - 如果记录器为空
SecurityManager.checkPermission(java.security.Permission)
public static void setLogger(Logger logger, Level level)
SyncFactory SPI提供的SyncProvider实现使用的日志记录对象。
所有SyncProvider实现都可以将其事件记录到此对象,并且应用程序可以使用getLogger方法检索此对象的getLogger 。
此方法检查是否有一个SQLPermission对象授予权限setSyncFactory然后允许该方法成功。 如果一个SecurityManager存在,并且它的checkPermission方法拒绝调用setLogger ,此方法抛出一个java.lang.SecurityException 。
logger - 一个记录器对象实例
level - 一个Level对象实例,指示需要记录的程度
SecurityException - 如果存在安全管理员,并且其
checkPermission方法拒绝调用
setLogger
NullPointerException - 如果记录器为空
SecurityManager.checkPermission(java.security.Permission) , LoggingPermission
public static Logger getLogger() throws SyncFactoryException
Logger已被指定使用
SyncProvider实现
SyncFactoryException - 如果没有设置日志对象。
public static void setJNDIContext(Context ctx) throws SyncFactoryException
此方法检查是否有一个SQLPermission对象在允许该方法成功之前授予权限setSyncFactory 。 如果一个SecurityManager存在,并且它的checkPermission方法拒绝调用setJNDIContext ,这个方法会抛出一个java.lang.SecurityException 。
ctx - 有效的JNDI上下文
SyncFactoryException - 如果提供的JNDI上下文为空
SecurityException - 如果存在安全管理员,并且其
checkPermission方法拒绝调用
setJNDIContext
SecurityManager.checkPermission(java.security.Permission)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.