- java.lang.Object
-
- javax.sql.rowset.spi.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
抽象类的两个参考实现:RIOptimisticProvider
和RIXMLProvider
。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
可以从最初来自SQLVIEW
的SQL查询中填充任何已断开连接的或连接的对象RowSet
对象。 虽然在许多情况下可以对基础视图执行更新,但是这种更新需要额外的元数据,这可能会有所不同。SyncProvider
类提供了两个常量来指示实现是否支持更新SQLVIEW
。-
NONUPDATABLE_VIEW_SYNC
- 表示SyncProvider
实现不支持与SQLVIEW
同步作为RowSet
对象的基础数据源。 -
UPDATABLE_VIEW_SYNC
- 表示SyncProvider
实现支持与SQLVIEW
作为基础数据源的同步。
默认情况下,如果
RowSet
对象使用SQLVIEW
数据填充,则该对象不可更新。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
更新的VIEW
这些常数在前面的部分(4.0)中有说明。- SyncProvider.UPDATABLE_VIEW_SYNC
- SyncProvider.NONUPDATABLE_VIEW_SYNC
- 从以下版本开始:
- 1.5
- 另请参见:
-
SyncFactory
,SyncFactoryException
-
-
-
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
对象和SQLVIEW
用来填充它。static int
UPDATABLE_VIEW_SYNC
表示SyncProvider
实现支持RowSet
对象与用于填充对象的SQLVIEW
之间的同步。
-
构造方法摘要
构造方法 Constructor 描述 SyncProvider()
创建默认的SyncProvider
对象。
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract int
getDataSourceLock()
返回此SyncProvider
实现中当前的数据源锁严重级别。abstract int
getProviderGrade()
返回一个常量,指示RowSet
对象可以从此SyncProvider
对象预期的同步等级。abstract String
getProviderID()
返回此SyncProvider
对象的唯一标识符。abstract RowSetReader
getRowSetReader()
返回一个javax.sql.RowSetReader
对象,可以用来填充RowSet
对象的数据。abstract RowSetWriter
getRowSetWriter()
返回一个javax.sql.RowSetWriter
对象,可用于将一个RowSet
对象的数据写回底层数据源。abstract String
getVendor()
返回此SyncProvider
实例的供应商名称abstract String
getVersion()
返回此SyncProvider
实例的发行版本。abstract void
setDataSourceLock(int datasource_lock)
在 datasource_lock指示的级别设置底层数据源上的锁定。abstract int
supportsUpdatableView()
返回此SyncProvider
实现是否可以执行RowSet
对象与RowSet
对象获取其数据的数据源中的SQLVIEW
之间的同步。
-
-
-
字段详细信息
-
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
对象与用于填充对象的SQLVIEW
之间的同步。- 另请参见:
- Constant Field Values
-
NONUPDATABLE_VIEW_SYNC
public static final int NONUPDATABLE_VIEW_SYNC
表明SyncProvider
实现 不支持之间的同步RowSet
对象和SQLVIEW
用来填充它。- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
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
对象获取其数据的数据源中的SQLVIEW
之间的同步。- 结果
-
一个
int
说这个SyncProvider
对象是否支持更新SQLVIEW
; 以下之一:SyncProvider.UPDATABLE_VIEW_SYNC,SyncProvider.NONUPDATABLE_VIEW_SYNC
-
getVersion
public abstract String getVersion()
返回此SyncProvider
实例的发行版本。- 结果
-
一个
String
详细说明了发布版本的SyncProvider
实现
-
getVendor
public abstract String getVendor()
返回此SyncProvider
实例的供应商名称- 结果
-
一个
String
详细说明了这个SyncProvider
实现的供应商名称
-
-