Module java.sql.rowset

Class SyncProvider

java.lang.Object
javax.sql.rowset.spi.SyncProvider

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

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

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

1.0 实现命名约定

作为命名SyncProvider实现的指南,应注意以下内容:
  • SyncProvider实现的名称是其完全限定的类名。
  • 建议供应商在名为providers的包中提供SyncProvider实现。

例如,如果名为Fred, Inc.的供应商提供了SyncProvider实现,您可以有以下内容:

     供应商名称:Fred, Inc.
     供应商的域名:com.fred
     包名称:com.fred.providers
     SyncProvider实现类名:HighAvailabilityProvider

     SyncProvider实现的完全限定类名:
                        com.fred.providers.HighAvailabilityProvider
 

以下代码行使用完全限定名称在SyncFactory静态实例中注册此实现。

     SyncFactory.registerProvider(
                          "com.fred.providers.HighAvailabilityProvider");
 

参考实现提供的默认SyncProvider对象使用以下名称:

     com.sun.rowset.providers.RIOptimisticProvider
 

供应商应参考参考实现同步提供程序,以获取有关如何实现新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实现提供了更大的灵活性,以确定其自己的最佳操作方式。

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

4.0 可更新的SQL视图

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

默认情况下,如果从SQL VIEW中填充数据,则RowSet对象不可更新。

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的更新的常量
    这些常量在前面的部分(4.0)中有解释。
    • SyncProvider.UPDATABLE_VIEW_SYNC
    • SyncProvider.NONUPDATABLE_VIEW_SYNC
自:
1.5
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    表示在使用此SyncProvider对象的RowSet对象的数据源上放置了锁。
    static final int
    表示在原始数据源上没有剩余的锁。
    static final int
    表示在由用于填充使用此SyncProvider对象的RowSet对象的原始SQL语句触及的行上放置了锁。
    static final int
    表示在由用于填充使用此SyncProvider对象的RowSet对象的原始SQL语句触及的所有表上放置了锁。
    static final int
    表示相对于原始数据源的高级乐观同步等级。
    static final int
    表示相对于原始数据源的低级乐观同步等级。
    static final int
    表示相对于原始数据源的最悲观同步等级。
    static final int
    表示相对于原始数据源的悲观同步等级。
    static final int
    表示不提供与原始数据源的同步。
    static final int
    表示SyncProvider实现支持在RowSet对象和用于填充它的SQL VIEW之间进行同步。
    static final int
    表示SyncProvider实现支持在RowSet对象和用于填充它的SQL VIEW之间进行同步。
  • Constructor Summary

    Constructors
    Constructor
    Description
    创建一个默认的SyncProvider对象。
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract int
    返回此SyncProvider实现中活动的当前数据源锁严重级别。
    abstract int
    返回RowSet对象可以从此SyncProvider对象期望的同步等级的常量。
    abstract String
    返回此SyncProvider对象的唯一标识符。
    abstract RowSetReader
    返回一个javax.sql.RowSetReader对象,可用于填充RowSet对象的数据。
    abstract RowSetWriter
    返回一个javax.sql.RowSetWriter对象,可用于将RowSet对象的数据写回底层数据源。
    abstract String
    返回此SyncProvider实例的供应商名称。
    abstract String
    返回此SyncProvider实例的发布版本。
    abstract void
    setDataSourceLock(int datasource_lock)
    在由datasource_lock指示的级别上在底层数据源上设置锁。
    abstract int
    返回此SyncProvider实现是否可以在RowSet对象和用于填充它的数据源中的SQL VIEW之间执行同步。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • 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
      表示对作为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之间的同步。
      参见:
  • Constructor Details

    • SyncProvider

      public SyncProvider()
      创建一个默认的SyncProvider对象。
  • Method Details

    • 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

      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 - 如果确定数据源锁定级别时发生错误。
      参见:
    • 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实现的供应商名称