|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.sql.rowset.spi
类 SyncProvider
java.lang.Object javax.sql.rowset.spi.SyncProvider
-
public abstract class SyncProvider
- extends Object
为非连接 RowSet
对象提供 reader/writer 功能的同步机制。SyncProvider
实现是一个扩展了 SyncProvider
抽象类的类。
SyncProvider
实现由一个唯一 ID 标识,该 ID 即其完全限定类名称。此名称必须向 SyncFactory
SPI 注册,这样才能使该实现可用于所有的 RowSet
实现。参考实现中的工厂机制使用此名称来实例化该实现,然后该实现可以通过其 reader(javax.sql.RowSetReader
对象)和 writer(javax.sql.RowSetWriter
对象)提供一个 RowSet
对象。
Jdbc RowSet
实现规范提供 SyncProvider
抽象类的两个参考实现:RIOptimisticProvider
和 RIXMLProvider
。RIOptimisticProvider
可以使用 RowSetReader
对象和 RowSetWriter
对象设置任何 RowSet
实现。但是,只有 RIXMLProvider
实现可以设置 XmlReader
对象和 XmlWriter
对象。WebRowSet
对象使用 XmlReader
对象以 XML 格式读取数据,然后使用该数据填充本身。它使用 XmlWriter
对象以 XML 格式将本身写入到流或 java.io.Writer
对象。
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 向 Sun Microsystems 公司注册 SyncProvider
实现类名称。Sun 将维护列出可用 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
实现提供更大的灵活性,使它能自己决定如何反应。
SyncProvider
实现可以选择实现特定的处理程序来处理查询冲突的子集。但是,如果 SyncProvider
实现没有处理原始查询冲突或更一般的数据源约束冲突,则所有的 SyncProvider
对象必须抛出 SyncProviderException
。
4.0 可更新的 SQL VIEW
能够从 SQL 查询(最初从 SQLVIEW
形成)填充任何非连接或连接的 RowSet
对象。虽然在许多情况下能够对基础视图执行更新,但是此类更新需要附加的元数据,并且该数据可能不同。SyncProvider
类提供两个常量来指示实现是否支持更新 SQL VIEW
。
NONUPDATABLE_VIEW_SYNC
- 指示将 SQLVIEW
作为RowSet
对象的数据基础源的情况下,SyncProvider
实现不支持与它的同步。UPDATABLE_VIEW_SYNC
- 指示将 SQLVIEW
作为数据基础源的情况下,SyncProvider
实现支持与它的同步。
如果使用取自 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
- 另请参见:
-
SyncFactory
,SyncFactoryException
字段摘要 | |
---|---|
static int |
DATASOURCE_DB_LOCK 指示锁定整个数据源,该数据源是正在使用此 SyncProvider 对象的 RowSet 对象的数据源。 |
static int |
DATASOURCE_NO_LOCK 指示在原始数据源上不保持任何锁定。 |
static int |
DATASOURCE_ROW_LOCK 指示锁定原始 SQL 语句涉及的行,该语句用于填充正在使用此 SyncProvider 对象的 RowSet 对象。 |
static int |
DATASOURCE_TABLE_LOCK 指示锁定原始 SQL 语句涉及的所有表,该语句用于填充正在使用此 SyncProvider 对象的 RowSet 对象。 |
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 之间的同步。 |
构造方法摘要 | |
---|---|
SyncProvider() 创建默认的 SyncProvider 对象。 |
方法摘要 | |
---|---|
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 从中获取其数据)中的 SQL VIEW 之间的同步。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
GRADE_NONE
public static int GRADE_NONE
-
指示没有提供与原始数据源的同步。返回此等级的
SyncProvider
实现仅尝试将RowSet
对象中的更新写入底层数据源,而不检查任何数据的有效性。
GRADE_CHECK_MODIFIED_AT_COMMIT
public static int GRADE_CHECK_MODIFIED_AT_COMMIT
-
指示关于原始数据源的低级别乐观同步等级。 返回此等级的
SyncProvider
实现只检查已经更改的行。
GRADE_CHECK_ALL_AT_COMMIT
public static int GRADE_CHECK_ALL_AT_COMMIT
-
指示关于原始数据源的高级别乐观同步等级。 返回此等级的
SyncProvider
实现将检查所有的行,包括没有更改的行。
GRADE_LOCK_WHEN_MODIFIED
public static int GRADE_LOCK_WHEN_MODIFIED
-
指示关于原始数据源的悲观同步等级。 返回此等级的
SyncProvider
实现将锁定原始数据源中的行。
GRADE_LOCK_WHEN_LOADED
public static int GRADE_LOCK_WHEN_LOADED
-
指示关于原始数据源的最悲观同步等级。返回此等级的
SyncProvider
实现将锁定用于填充RowSet
对象的原始语句所影响的整个视图和/或表。
DATASOURCE_NO_LOCK
public static int DATASOURCE_NO_LOCK
-
指示在原始数据源上不保持任何锁定。如果
RowSet
对象没有其他指示,则这是所有SyncProvider
实现的默认锁定设置。
DATASOURCE_ROW_LOCK
public static int DATASOURCE_ROW_LOCK
-
指示锁定原始 SQL 语句涉及的行,该语句用于填充正在使用此
SyncProvider
对象的RowSet
对象。