Module  java.sql.rowset
软件包  javax.sql.rowset.spi

Class SyncProvider



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

    A SyncProvider实现由唯一的ID标识,唯一的ID是其完全限定的类名。 该名称必须注册到SyncFactory SPI,从而使实现可用于所有RowSet实现。 在参考实施工厂机制使用该名称来实例化的实施,则其可提供RowSet对象与其读取器(一个javax.sql.RowSetReader对象)及其写入器(一个javax.sql.RowSetWriter对象)。

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

    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 

    供应商可以通过向jdbc@sun.com发送电子邮件,向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参考实现的实例。 因此,在前面的代码片段,如果没有名为实施com.fred.providers.HighAvailabilitySyncProvider已经与注册SyncFactory例如,CRS将被分配在参考实施方式中,这是默认提供商com.sun.rowset.providers.RIOptimisticProvider

    3.0违规和同步问题

    如果断开连接的RowSet对象和数据源之间的更新违反原始查询或底层数据源约束,则会导致所有断开连接的RowSet实现及其指定的SyncProvider实现的未定义行为。 当这种违规行为发生时,不定义行为为SyncProvider实施提供了更大的灵活性,以确定其最佳行动方案。

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

    4.0可更新的SQL VIEW

    可以从最初来自SQL VIEW的SQL查询中填充任何已断开连接的或连接的对象RowSet对象。 虽然在许多情况下可以对基础视图执行更新,但是这种更新需要额外的元数据,这可能会有所不同。 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对象不会关心哪些数据有效,并将简单地将RowSet数据写入数据源。 GRADE_MODIFIED_AT_COMMIT表示提供者将仅检查修改后的数据的有效性。 其他等级检查数据是否有效,或者在数据修改或加载时设置锁定。
    1. 常数表示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
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      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之间的同步。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      SyncProvider​()
      创建默认的 SyncProvider对象。
    • 字段详细信息

      • GRADE_NONE

        public static final int GRADE_NONE
        表示不提供与始发数据源的同步。 返回此成绩的SyncProvider实现将简单地尝试将RowSet对象中的更新写入底层数据源,而不会检查任何数据的有效性。
        另请参见:
        Constant Field Values
      • GRADE_CHECK_MODIFIED_AT_COMMIT

        public static final int GRADE_CHECK_MODIFIED_AT_COMMIT
        表示相对于始发数据源的低级乐观同步等级。 返回此等级的SyncProvider实现将仅检查已更改的行。
        另请参见:
        Constant Field Values
      • GRADE_CHECK_ALL_AT_COMMIT

        public static final int GRADE_CHECK_ALL_AT_COMMIT
        表示相对于始发数据源的高级乐观同步等级。 返回此等级的SyncProvider实现将检查所有行,包括尚未更改的行。
        另请参见:
        Constant Field Values
      • GRADE_LOCK_WHEN_MODIFIED

        public static final int GRADE_LOCK_WHEN_MODIFIED
        表示相对于始发数据源的悲观同步等级。 返回此等级的SyncProvider实现将锁定始发数据源中的行。
        另请参见:
        Constant Field Values
      • GRADE_LOCK_WHEN_LOADED

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

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

        public static final int DATASOURCE_ROW_LOCK
        表示在用于填充使用该 SyncProvider对象的 RowSet对象的原始SQL语句所触摸的行上放置了一个锁。
        另请参见:
        Constant Field Values
      • DATASOURCE_TABLE_LOCK

        public static final int DATASOURCE_TABLE_LOCK
        表示在用于填充正在使用此 SyncProvider对象的 RowSet对象的原始SQL语句所触及的所有表上都放置了一个锁。
        另请参见:
        Constant Field Values
      • DATASOURCE_DB_LOCK

        public static final int DATASOURCE_DB_LOCK
        表示锁定位于整个数据源上,该数据源是使用该 SyncProvider对象的 RowSet对象的数据源。
        另请参见:
        Constant Field Values
      • UPDATABLE_VIEW_SYNC

        public static final int UPDATABLE_VIEW_SYNC
        表示 SyncProvider实现支持 RowSet对象与用于填充对象的SQL VIEW之间的同步。
        另请参见:
        Constant Field Values
      • NONUPDATABLE_VIEW_SYNC

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

      • 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实现的供应商名称