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
可以使用RowSetReader
对象和RowSetWriter
对象设置任何RowSet
实现。 但是,只有RIXMLProvider
实现可以设置XmlReader
对象和XmlWriter
对象。 WebRowSet
对象使用XmlReader
对象以XML格式读取数据以填充该数据。 它使用XmlWriter
对象将其自身写入流或java.io.Writer
对象以XML格式。
SyncProvider
实现的指南,应注意以下几点:
SyncProvider
实现其完全限定类名。 SyncProvider
在一个名为软件包实施providers
。 例如,如果名为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
的RowSet SyncProvider
一起使用。 该数据库将与已经维护的数据库类似,以列出可用的JDBC驱动程序。
供应商应参考参考实现同步提供程序,以获取有关如何实现新的SyncProvider
实现的更多指导。
RowSet
对象如何获取它的提供者 Rowset
对象可以通过以下两种方式之一访问SyncProvider
对象:
CachedRowSet crs = new CachedRowSet(
"com.fred.providers.HighAvailabilitySyncProvider");
setSyncProvider
方法 CachedRowSet crs = new CachedRowSet();
crs.setSyncProvider("com.fred.providers.HighAvailabilitySyncProvider");
默认情况下,RowSet同步提供程序的RowSet
实现始终可用于Java平台。 如果没有其他可插拔同步提供程序已经被正确注册,那么SyncFactory
将自动生成默认的SyncProvider
参考实现的实例。 因此,在上述代码片段中,如果没有在SyncFactory
实例中注册了名为com.fred.providers.HighAvailabilitySyncProvider
的SyncFactory
,则crs将被分配给参考实现中的默认提供者,即com.sun.rowset.providers.RIOptimisticProvider
。
RowSet
对象和数据源之间的更新违反原始查询或基础数据源约束,则会导致所有断开RowSet
RowSet实现及其指定的SyncProvider
实现的未定义行为。
当发生这种违规行为时,不定义行为为SyncProvider
实施确定自己最佳行动方案提供了更大的灵活性。
A SyncProvider
实现可以选择实现特定的处理程序来处理查询违规的一个子集。 但是,如果SyncProvider实施不处理原始查询违规或更一般的数据源SyncProvider
违规,则所有SyncProvider
对象都必须抛出SyncProviderException
。
RowSet
对象从每个从SQL最初制定了一个SQL查询来填充VIEW
。
虽然在许多情况下可以对基础视图执行更新,但是这种更新需要额外的元数据,这可能会有所不同。
SyncProvider
类提供两个常量来指示实现是否支持更新SQL VIEW
。
NONUPDATABLE_VIEW_SYNC
- 表示SyncProvider
实现不支持与SQL VIEW
作为RowSet
对象的基础数据源。 UPDATABLE_VIEW_SYNC
- 表示SyncProvider
实现支持与SQL VIEW
作为基础数据源。 如果RowSet
对象使用SQL VIEW
数据填充,则默认值不可VIEW
。
SyncProvider
常数 SyncProvider
类提供了三组常数,用作SyncProvider
方法的返回值或参数。
SyncProvider
对象可以被实现为以不同程度的谨慎来执行RowSet对象及其底层数据源之间的RowSet
。
第一组常量表示如何处理同步。
例如, GRADE_NONE
表示SyncProvider
对象不会关心哪些数据有效,并且将简单地将RowSet
数据写入数据源。
GRADE_MODIFIED_AT_COMMIT
表示提供者只会检查修改后的数据是否有效。
其他等级检查数据是否有效,或者在数据修改或加载时设置锁定。
SyncProvider
对象的同步等级
SyncProvider
对象是否可以执行对SQL VIEW
更新的VIEW
SyncFactory
, SyncFactoryException
Modifier and Type | Field and Description |
---|---|
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 之间的
RowSet 。
|
Constructor and Description |
---|
SyncProvider()
创建默认的
SyncProvider 对象。
|
Modifier and Type | Method and Description |
---|---|
abstract int |
getDataSourceLock()
返回此
SyncProvider 实现中当前的数据源锁严重级别。
|
abstract int |
getProviderGrade()
返回一个常量,表示一个
RowSet 对象可以从此
SyncProvider 对象预期的
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 对象和SQL
VIEW 在从该数据源
RowSet 对象得到了它的数据。
|
public static final int GRADE_NONE
SyncProvider
实现返回此等级将简单的写在更新RowSet
对象的基础数据源不检查任何数据的有效性。
public static final int GRADE_CHECK_MODIFIED_AT_COMMIT
SyncProvider
实现返回此等级将只检查已更改的行。
public static final int GRADE_CHECK_ALL_AT_COMMIT
SyncProvider
实现返回此等级将检查所有的行,包括未更改的行。
public static final int GRADE_LOCK_WHEN_MODIFIED
SyncProvider
实现返回此等级将在原始数据源锁定该行。
public static final int GRADE_LOCK_WHEN_LOADED
SyncProvider
实现返回此等级将锁定受用于填充原来的语句整个视图和/或表RowSet
对象。
public static final int DATASOURCE_NO_LOCK
SyncProvider
实现的默认锁定设置,除非RowSet
对象另有指示。
public static final int DATASOURCE_ROW_LOCK
SyncProvider
对象的
RowSet
对象的原始SQL语句所触及的行上。
public static final int DATASOURCE_TABLE_LOCK
SyncProvider
对象的
RowSet
对象的原始SQL语句所触及的所有表上都放置了一个锁。
public static final int DATASOURCE_DB_LOCK
SyncProvider
对象的
RowSet
对象的数据源的整个数据源上放置一个锁。
public static final int UPDATABLE_VIEW_SYNC
SyncProvider
实现支持RowSet对象与用于填充对象的SQL
VIEW
之间的
RowSet
。
public static final int NONUPDATABLE_VIEW_SYNC
SyncProvider
实现
不支持之间的同步
RowSet
对象和SQL
VIEW
用来填充它。
public abstract String getProviderID()
SyncProvider
对象的唯一标识符。
String
对象具有此
SyncProvider
对象的完全限定类名
public abstract RowSetReader getRowSetReader()
javax.sql.RowSetReader
对象,可以用于使用数据填充
RowSet
对象。
javax.sql.RowSetReader
对象
public abstract RowSetWriter getRowSetWriter()
javax.sql.RowSetWriter
对象,可用于将
RowSet
对象的数据写回基础数据源。
javax.sql.RowSetWriter
对象
public abstract int getProviderGrade()
RowSet
对象可以从此
SyncProvider
对象预期的
SyncProvider
。
public abstract void setDataSourceLock(int datasource_lock) throws SyncProviderException
SyncProvider
通过增加或减少其为成功同步提供的乐观程度来调整其行为。
datasource_lock
- 以下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
- 如果确定数据源锁定级别发生错误。
setDataSourceLock(int)
public abstract int supportsUpdatableView()
SyncProvider
实现可以一个之间执行同步
RowSet
对象和SQL
VIEW
在从该数据源
RowSet
对象得到了它的数据。
int
说这个SyncProvider
对象是否支持更新SQL VIEW
;
以下之一:SyncProvider.UPDATABLE_VIEW_SYNC,SyncProvider.NONUPDATABLE_VIEW_SYNC
public abstract String getVersion()
SyncProvider
实例的发行版本。
String
详细说明的发行版本
SyncProvider
实施
public abstract String getVendor()
SyncProvider
实例的供应商名称
String
详细说明了这个
SyncProvider
实现的供应商名称