java.applet

java.awt

java.awt.color

java.awt.datatransfer

java.awt.dnd

java.awt.event

java.awt.font

java.awt.geom

java.awt.im

java.awt.im.spi

java.awt.image

java.awt.image.renderable

java.awt.print

java.beans

java.beans.beancontext

java.io

java.lang

java.lang.annotation

java.lang.instrument

java.lang.management

java.lang.ref

java.lang.reflect

java.math

java.net

java.nio

java.nio.channels

java.nio.channels.spi

java.nio.charset

java.nio.charset.spi

java.rmi

java.rmi.activation

java.rmi.dgc

java.rmi.registry

java.rmi.server

java.security

java.security.acl

java.security.cert

java.security.interfaces

java.security.spec

java.sql

java.text

java.util

java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

javax.accessibility

javax.activity

javax.crypto

javax.crypto.interfaces

javax.crypto.spec

javax.imageio

javax.imageio.event

javax.imageio.metadata

javax.imageio.plugins.bmp

javax.imageio.plugins.jpeg

javax.imageio.spi

javax.imageio.stream

javax.management

javax.management.loading

javax.management.modelmbean

javax.management.monitor

javax.management.openmbean

javax.management.relation

javax.management.remote

javax.management.remote.rmi

javax.management.timer

javax.naming

javax.naming.directory

javax.naming.event

javax.naming.ldap

javax.naming.spi

javax.net

javax.net.ssl

javax.print

javax.print.attribute

javax.print.attribute.standard

javax.print.event

javax.rmi

javax.rmi.CORBA

javax.rmi.ssl

javax.security.auth

javax.security.auth.callback

javax.security.auth.kerberos

javax.security.auth.login

javax.security.auth.spi

javax.security.auth.x500

javax.security.cert

javax.security.sasl

javax.sound.midi

javax.sound.midi.spi

javax.sound.sampled

javax.sound.sampled.spi

javax.sql

javax.sql.rowset

javax.sql.rowset.serial

javax.sql.rowset.spi

javax.swing

javax.swing.border

javax.swing.colorchooser

javax.swing.event

javax.swing.filechooser

javax.swing.plaf

javax.swing.plaf.basic

javax.swing.plaf.metal

javax.swing.plaf.multi

javax.swing.plaf.synth

javax.swing.table

javax.swing.text

javax.swing.text

javax.swing.text.parser

javax.swing.text.rtf

javax.swing.tree

javax.swing.undo

javax.transaction

javax.transaction.xa

javax.xml

javax.xml.datatype

javax.xml.namespace

javax.xml.parsers

javax.xml.transform

javax.xml.transform.dom

javax.xml.transform.sax

javax.xml.transform.stream

javax.xml.validation

javax.xml.xpath

org.ietf.jgss

org.omg.CORBA

org.omg.CORBA_2_3

org.omg.CORBA_2_3.portable

org.omg.CORBA.DynAnyPackage

org.omg.CORBA.ORBPackage

org.omg.CORBA.portable

org.omg.CORBA.TypeCodePackage

org.omg.CosNaming

org.omg.CosNaming.NamingContextExtPackage

org.omg.CosNaming.NamingContextPackage

org.omg.Dynamic

org.omg.DynamicAny

org.omg.DynamicAny.DynAnyFactoryPackage

org.omg.DynamicAny.DynAnyPackage

org.omg.IOP

org.omg.IOP.CodecFactoryPackage

org.omg.IOP.CodecPackage

org.omg.Messaging

org.omg.PortableInterceptor

org.omg.PortableInterceptor.ORBInitInfoPackage

org.omg.PortableServer

org.omg.PortableServer.CurrentPackage

org.omg.PortableServer.POAManagerPackage

org.omg.PortableServer.POAPackage

org.omg.PortableServer.portable

org.omg.PortableServer.ServantLocatorPackage

org.omg.SendingContext

org.omg.stub.java.rmi

org.w3c.dom

org.w3c.dom.bootstrap

org.w3c.dom.events

org.w3c.dom.ls

org.xml.sax

org.xml.sax.ext

org.xml.sax.helpers

allclasses-frame

allclasses-noframe

constant-values

deprecated-list

help-doc

JavaTM 2 Platform
Standard Ed. 5.0

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 实现必须至少提供两个提供程序:
  • 乐观提供程序,它与 CachedRowSet 实现或从该实现派生的实现一起使用。
  • XML 提供程序,它用于读取和写入 XML(比如与 WebRowSet 对象一起使用时)。
注意,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 实现。

  • 使用命令行
    在命令行中提供提供程序的名称,这会将提供程序添加到系统属性中。例如:
     
        -Drowset.provider.classname=com.fred.providers.HighAvailabilityProvider
     
  • 使用标准属性文件
    参考实现的目标是随 J2SE 1.5 一起发行,这将包含一个可以手工编辑的附加资源文件。下面是参考实现中包含的属性文件示例:
       #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
     

  • 使用 JNDI 上下文
    在 JNDI 上下文中可以注册可用的提供程序,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
 

字段详细信息

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 上下文的同步提供程序。

     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)

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. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策