RowSet对象提供读取/写入功能的同步机制。 SyncProvider实现是一个扩展SyncProvider抽象类的类。
SyncProvider实现由唯一ID标识,即其完全限定的类名。此名称必须在SyncFactory SPI中注册,从而使实现对所有RowSet实现可用。参考实现中的工厂机制使用此名称来实例化实现,然后可以为RowSet对象提供其读取器(javax.sql.RowSetReader对象)和写入器(javax.sql.RowSetWriter对象)。
Jdbc RowSet实现规范提供了SyncProvider抽象类的两个参考实现:RIOptimisticProvider和RIXMLProvider。 RIOptimisticProvider可以为任何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实现不支持将SQLVIEW作为RowSet对象的数据源进行同步。UPDATABLE_VIEW_SYNC- 表示SyncProvider实现支持将SQLVIEW作为数据源进行同步。
默认情况下,如果从SQL VIEW中填充数据,则RowSet对象不可更新。
5.0 SyncProvider常量
SyncProvider类提供了三组常量,用作SyncProvider方法的返回值或参数。 SyncProvider对象可以实现在RowSet对象和其底层数据源之间执行同步,其同步程度各不相同。第一组常量指示如何处理同步。例如,GRADE_NONE表示SyncProvider对象不会关心哪些数据有效,只会将RowSet数据写入数据源。 GRADE_MODIFIED_AT_COMMIT表示提供程序仅在提交时检查修改的数据的有效性。其他等级会检查所有数据的有效性或在修改或加载数据时设置锁。
- 指示
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
- 指示在数据源上设置的锁的常量
- SyncProvider.DATASOURCE_NO_LOCK
- SyncProvider.DATASOURCE_ROW_LOCK
- SyncProvider.DATASOURCE_TABLE_LOCK
- SyncProvider.DATASOURCE_DB_LOCK
- 指示
SyncProvider对象是否可以执行对SQLVIEW的更新的常量
这些常量在前面的部分(4.0)中有解释。- SyncProvider.UPDATABLE_VIEW_SYNC
- SyncProvider.NONUPDATABLE_VIEW_SYNC
- 自:
- 1.5
- 参见:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic 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对象和用于填充它的SQLVIEW之间进行同步。static final int表示SyncProvider实现支持在RowSet对象和用于填充它的SQLVIEW之间进行同步。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract 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 voidsetDataSourceLock(int datasource_lock) 在由datasource_lock指示的级别上在底层数据源上设置锁。abstract int返回此SyncProvider实现是否可以在RowSet对象和用于填充它的数据源中的SQLVIEW之间执行同步。
-
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对象与用于填充它的SQLVIEW之间的同步。- 参见:
-
NONUPDATABLE_VIEW_SYNC
public static final int NONUPDATABLE_VIEW_SYNC表示SyncProvider实现不支持RowSet对象与用于填充它的SQLVIEW之间的同步。- 参见:
-
-
Constructor Details
-
SyncProvider
public SyncProvider()创建一个默认的SyncProvider对象。
-
-
Method Details
-
getProviderID
返回此SyncProvider对象的唯一标识符。- 返回:
-
一个
String对象,其中包含此SyncProvider对象的完全限定类名
-
getRowSetReader
返回一个javax.sql.RowSetReader对象,可用于使用数据填充RowSet对象。- 返回:
-
一个
javax.sql.RowSetReader对象
-
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
在由datasource_lock指示的级别上对底层数据源设置锁定。这应该导致SyncProvider通过增加或减少提供成功同步的乐观程度来调整其行为。- 参数:
-
datasource_lock- 表示所需数据源锁定级别的以下常量之一:SyncProvider.DATASOURCE_NO_LOCK, SyncProvider.DATASOURCE_ROW_LOCK, SyncProvider.DATASOURCE_TABLE_LOCK, SyncProvider.DATASOURCE_DB_LOCK, - 抛出:
-
SyncProviderException- 如果设置了不受支持的数据源锁定级别。 - 参见:
-
getDataSourceLock
返回此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对象数据的数据源中的SQLVIEW之间执行同步。- 返回:
-
一个
int,指示此SyncProvider对象是否支持更新SQLVIEW;以下之一: SyncProvider.UPDATABLE_VIEW_SYNC、SyncProvider.NONUPDATABLE_VIEW_SYNC
-
getVersion
返回此SyncProvider实例的发布版本。- 返回:
-
一个
String,详细说明SyncProvider实现的发布版本
-
getVendor
返回此SyncProvider实例的供应商名称- 返回:
-
一个
String,详细说明此SyncProvider实现的供应商名称
-