模块  java.sql.rowset
软件包  javax.sql.rowset.spi

Class SyncProvider


  • public abstract class SyncProvider
    extends Object
    同步机制,为断开连接的RowSet对象提供读取器/写入器功能。 SyncProvider实现是扩展SyncProvider抽象类的类。

    SyncProvider实现由唯一ID标识,该ID是其完全限定的类名。 此名称必须在SyncFactory SPI中注册,从而使实现可用于所有RowSet实现。 引用实现中的工厂机制使用此名称来实例化实现,然后可以提供RowSet对象及其读取器( javax.sql.RowSetReader对象)及其javax.sql.RowSetReader器( javax.sql.RowSetWriter对象)。

    Jdbc RowSet实现规范提供了SyncProvider抽象类的两个参考实现: RIOptimisticProviderRIXMLProvider RIOptimisticProvider可以使用RowSetReader对象和RowSetWriter对象设置任何RowSet实现。 但是,只有RIXMLProvider实现可以设置XmlReader对象和XmlWriter对象。 WebRowSet对象使用XmlReader对象以XML格式读取数据以使用该数据填充自身。 它使用XmlWriter对象将自身写入XML格式的流或java.io.Writer对象。

    1.0实施命名公约

    作为命名SyncProvider实现的指南,应注意以下内容:
    • SyncProvider实现的名称是其完全限定的类名。
    • 建议供应商在名为providers的软件包中提供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 

    供应商可以通过发送电子邮件至[email protected]向Oracle Corporation注册SyncProvider实施类名称。 Oracle将维护一个数据库,列出可用的SyncProvider实现,以便与兼容的RowSet实现一起使用。 此数据库将类似于已列出的列出可用JDBC驱动程序的数据库。

    供应商应参考参考实现同步提供程序,以获取有关如何实现新SyncProvider实现的其他指导。

    2.0 RowSet对象如何获取其提供者

    断开连接的Rowset对象可以通过以下两种方式之一访问SyncProvider对象:
    • 使用构造函数
        CachedRowSet crs = new CachedRowSet(
                        "com.fred.providers.HighAvailabilitySyncProvider"); 
    • 使用setSyncProvider方法
        CachedRowSet crs = new CachedRowSet();
             crs.setSyncProvider("com.fred.providers.HighAvailabilitySyncProvider"); 

    默认情况下, RowSet同步提供程序的参考实现始终可供Java平台使用。 如果没有正确注册其他可插拔同步提供程序, SyncFactory将自动生成默认SyncProvider参考实现的实例。 因此,在前面的代码片段中,如果没有向SyncFactory实例注册名为com.fred.providers.HighAvailabilitySyncProvider实现,则将在引用实现中为crs分配默认提供程序,即com.sun.rowset.providers.RIOptimisticProvider

    3.0违规和同步问题

    如果断开连接的RowSet对象与数据源之间的更新违反了原始查询或基础数据源约束,则会导致所有已断开连接的RowSet实现及其指定的SyncProvider实现的未定义行为。 如果发生此类违规行为时未定义行为, SyncProviderSyncProvider实施提供更大的灵活性,以确定其自身的最佳操作方案。

    SyncProvider实现可以选择实现特定处理程序来处理查询违规的子集。 但是,如果SyncProvider实现未处理原始查询冲突或更一般的数据源约束冲突,则所有SyncProvider对象都必须抛出SyncProviderException

    4.0可更新的SQL VIEW

    这是可能的任何断开或连接RowSet对象从每个从SQL最初制定了一个SQL查询来填充VIEW 虽然在许多情况下可以对底层视图执行更新,但是这种更新需要额外的元数据,这可能会有所不同。 SyncProvider类提供了两个常量来指示实现是否支持更新SQL VIEW
    • NONUPDATABLE_VIEW_SYNC - 表示SyncProvider实现不支持与SQL VIEW同步,作为RowSet对象的基础数据源。
    • UPDATABLE_VIEW_SYNC - 表示SyncProvider实现支持与SQL VIEW同步作为基础数据源。

    如果RowSet对象是使用SQL VIEW数据填充的,则默认值是不可更新的。

    5.0 SyncProvider常数

    SyncProvider类提供了三组常量,用作SyncProvider方法的返回值或参数。 SyncProvider对象可以被实现为一个之间执行同步RowSet对象并伴有不同程度的护理其底层数据源。 第一组常量表示如何处理同步。 例如, GRADE_NONE表示SyncProvider对象不会SyncProvider查看哪些数据有效,只是将RowSet数据写入数据源。 GRADE_MODIFIED_AT_COMMIT表示提供程序仅检查已修改数据的有效性。 其他等级检查所有数据的有效性或在修改或加载数据时设置锁定。
    1. 用于指示SyncProvider对象的同步等级的SyncProvider
      • SyncProvider.GRADE_NONE
      • SyncProvider.GRADE_MODIFIED_AT_COMMIT
      • SyncProvider.GRADE_CHECK_ALL_AT_COMMIT
      • SyncProvider.GRADE_LOCK_WHEN_MODIFIED
      • SyncProvider.GRADE_LOCK_WHEN_LOADED
    2. 用于指示在数据源上设置了哪些锁的常量
      • SyncProvider.DATASOURCE_NO_LOCK
      • SyncProvider.DATASOURCE_ROW_LOCK
      • SyncProvider.DATASOURCE_TABLE_LOCK
      • SyncProvider.DATASOURCE_DB_LOCK
    3. 用于指示SyncProvider对象是否可以对SQL VIEW执行更新的VIEW
      这些常量在前一节(4.0)中进行了解释。
      • SyncProvider.UPDATABLE_VIEW_SYNC
      • SyncProvider.NONUPDATABLE_VIEW_SYNC
    从以下版本开始:
    1.5
    另请参见:
    SyncFactorySyncFactoryException
    • 字段汇总

      字段  
      变量和类型 字段 描述
      static int DATASOURCE_DB_LOCK
      表示锁定在整个数据源上,该数据源是使用此 SyncProvider对象的 RowSet对象的数据源。
      static int DATASOURCE_NO_LOCK
      表示原始数据源上没有锁定。
      static int DATASOURCE_ROW_LOCK
      指示对用于填充正在使用此 SyncProvider对象的 RowSet对象的原始SQL语句所触及的行的锁定。
      static int DATASOURCE_TABLE_LOCK
      指示对用于填充使用此 SyncProvider对象的 RowSet对象的原始SQL语句所触及的所有表的锁定。
      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对象。
    • 字段详细信息

      • GRADE_NONE

        public static final int GRADE_NONE
        表示未提供与原始数据源的同步。 返回此等级的SyncProvider实现将仅尝试将RowSet对象中的更新写入基础数据源,而不检查任何数据的有效性。
        另请参见:
        常数字段值
      • GRADE_CHECK_MODIFIED_AT_COMMIT

        public static final int GRADE_CHECK_MODIFIED_AT_COMMIT
        表示与原始数据源相关的低级别乐观同步等级。 返回此等级的SyncProvider实现将仅检查已更改的行。
        另请参见:
        常数字段值
      • GRADE_CHECK_ALL_AT_COMMIT

        public static final int GRADE_CHECK_ALL_AT_COMMIT
        表示与原始数据源相关的高级乐观同步等级。 返回此等级的SyncProvider实现将检查所有行,包括未更改的行。
        另请参见:
        常数字段值
      • GRADE_LOCK_WHEN_MODIFIED

        public static final int GRADE_LOCK_WHEN_MODIFIED
        表示与原始数据源相关的悲观同步等级。 返回此等级的SyncProvider实现将锁定原始数据源中的行。
        另请参见:
        常数字段值
      • GRADE_LOCK_WHEN_LOADED

        public static final int GRADE_LOCK_WHEN_LOADED
        表示与原始数据源相关的最悲观同步等级。 返回此等级的SyncProvider实现将锁定受用于填充RowSet对象的原始语句影响的整个视图和/或表。
        另请参见:
        常数字段值
      • DATASOURCE_NO_LOCK

        public static final int DATASOURCE_NO_LOCK
        表示原始数据源上没有锁定。 这是所有SyncProvider实现的默认锁定设置,除非RowSet对象另有指示。
        另请参见:
        常数字段值
      • DATASOURCE_ROW_LOCK

        public static final int DATASOURCE_ROW_LOCK
        指示对用于填充使用此 SyncProvider对象的 RowSet对象的原始SQL语句所触及的行的锁定。
        另请参见:
        常数字段值
      • DATASOURCE_TABLE_LOCK

        public static final int DATASOURCE_TABLE_LOCK
        指示对用于填充使用此 SyncProvider对象的 RowSet对象的原始SQL语句所触及的所有表的锁定。
        另请参见:
        常数字段值
      • DATASOURCE_DB_LOCK

        public static final int DATASOURCE_DB_LOCK
        表示锁定在整个数据源上,该数据源是使用此 SyncProvider对象的 RowSet对象的数据源。
        另请参见:
        常数字段值
      • UPDATABLE_VIEW_SYNC

        public static final int UPDATABLE_VIEW_SYNC
        表示 SyncProvider实现支持 RowSet对象与用于填充它的SQL VIEW之间的同步。
        另请参见:
        常数字段值
      • NONUPDATABLE_VIEW_SYNC

        public static final int NONUPDATABLE_VIEW_SYNC
        表明 SyncProvider实现 支持之间的同步 RowSet对象和SQL VIEW用来填充它。
        另请参见:
        常数字段值
    • 构造方法详细信息

      • SyncProvider

        public SyncProvider()
        创建默认的 SyncProvider对象。
    • 方法详细信息

      • getProviderID

        public abstract String getProviderID()
        返回此 SyncProvider对象的唯一标识符。
        结果
        具有此 String对象的完全限定类名的 SyncProvider对象
      • 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 
        异常
        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实现的供应商名称