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
Modifier 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
-
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 void
setDataSourceLock
(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
实现的供应商名称
-