JavaTM Platform
Standard Ed. 6

软件包 javax.sql.rowset.spi

第三方供应商在其同步提供者的实现中必须使用的标准类和接口。

请参见:
          描述

接口摘要
SyncResolver 定义一个框架,当发生同步冲突时,它允许应用程序使用手工决策树来确定应该执行的操作。
TransactionalWriter 一个专用接口,用来方便地扩展标准 SyncProvider 抽象类以便拥有细粒度的事务控制。
XmlReader 一个专用接口,用来方便地扩展 SyncProvider 抽象类以用于面向 XML 的同步提供者。
XmlWriter 一个专用接口,用来方便地扩展 SyncProvider 抽象类以用于面向 XML 的同步提供者。
 

类摘要
SyncFactory 该服务提供者接口 (SPI) 机制可以生成由非连接 RowSet 对象使用的 SyncProvider 实例。
SyncProvider 为非连接 RowSet 对象提供 reader/writer 功能的同步机制。
 

异常摘要
SyncFactoryException 指示 SyncFactory 机制发生的错误。
SyncProviderException 指示 SyncProvider 机制发生的错误。
 

软件包 javax.sql.rowset.spi 的描述

第三方供应商在其同步提供者的实现中必须使用的标准类和接口。这些类和接口被称为服务提供者接口 (SPI)。供应商通过向 jdbc@sun.com 发送电子邮件,可以使其实现被 JDBC 网页所包含,该网页列出了可用的 SyncProvider 实现。这样做有助于开发人员了解该实现。为了使 RowSet 对象能够使用实现,供应商必须向 SyncFactory 单件注册。(有关注册过程和所使用命名约定的完整解释,请参阅 SyncProvider 的类注释。)

目录

1.0 包规范

以下类和接口组成了 javax.sql.rowset.spi 包:

javax.sql 包中的以下接口也是 SPI 的一部分:

SyncProvider 实现通过以下机制提供非连接 RowSet 对象:将数据读入该对象和将在该对象中修改的数据写回底层数据源。当调用 CachedRowSet 方法 executepopulate 时,readerRowSetReaderXMLReader 对象可以将数据读入 RowSet 对象。当调用 CachedRowSet 方法 acceptChanges 时,writerRowSetWriterXMLWriter 对象可以将更改写回底层数据源。

RowSet 对象中的更改写入其数据源的过程称为同步RowSet 正在使用的 SyncProvider 实现可以确定 RowSet 对象的 writer 所使用的同步级别。同步的各种级别被称为等级

同步的较低等级称为乐观 并发级别,因为它们乐观地假设不存在任何冲突或仅有极少的冲突。当在 RowSet 对象中修改的同一数据也在数据源中修改时,会发生冲突。使用乐观并发模型意味着如果存在冲突,则会丢失对数据源或 RowSet 对象的修改。

同步的较高等级被称为悲观,因为它们假设数据源会被访问并修改。这些等级可以设置各种级别的锁定以增加不发生冲突的几率。

最低级别的同步只将对 RowSet 对象进行的任何更改写入到其底层数据源。writer 不执行任何检查冲突的操作。如果存在冲突,并且数据源值被重写,则其他方对数据源进行的更改会丢失。

RIXMLProvider 实现使用最低级别的同步,并仅将 RowSet 更改写入数据源。确实是这样,因为 XML 数据源通常不会启用事务处理技术来维护数据完整性。但是,特定的标准化组织已经在考虑提供基于 XML 的同步。有关详细信息,请参阅


     http://www.syncml.org

对于下一个级别,writer 会查看是否存在冲突,如果存在,则它不将任何内容写入到数据源。此并发级别的问题是如果另一方在 RowSet 对象获得其数据后修改了数据源中相应数据,则对 RowSet 对象进行的修改会丢失。RIOptimisticProvider 实现使用此级别的同步。

对于称为悲观并发的较高级别的同步,writer 会采取一些步骤(如设置锁定)来避免冲突。设置锁定可以是在一个行上设置,也可以是在一个表或整个数据源上设置。因此,同步级别是一个以下两者间的权衡:用户并发访问数据源的能力和 writer 保持 RowSet 对象及其同步数据源中数据的能力。

它要求所有非连接 RowSet 对象(CachedRowSetFilteredRowSetJoinRowSetWebRowSet 对象)从 SyncFactory 机制获取它们的 SyncProvider 对象。

参考实现 (RI) 提供两个同步提供者。

这些 SyncProvider 实现与参考实现捆绑在一起,使它们总是可用于 RowSet 实现。 SyncProvider 实现通过向单一 SyncFactory 注册使它们本身可用。当 RowSet 对象通过在构造方法中指定某个提供者,或者指定它作为 CachedRowSet 方法 setSyncProvider 的参数来请求该提供者时,该单一 SyncFactory 会查看请求的提供者是否已向它注册。如果已注册,则 SyncFactory 创建一个它的实例,并将它传递到发出请求的 RowSet 对象。如果指定的 SyncProvider 实现没有注册,则单一 SyncFactory 导致抛出 SyncFactoryException 对象。如果不指定任何提供者,则单一 SyncFactory 将创建一个默认的提供者实现 RIOptimisticProvider 的实例,并将它传递到发出请求的 RowSet 对象。

如果 WebRowSet 对象在其构造方法中未指定提供者,则 SyncFactory 将为它提供一个 RIOptimisticProvider 实例。但是,可以实现 WebRowSet 的构造方法来将提供者设置为 RIXMLProvider,它以 XML 格式读取和写入 RowSet 对象。

有关更多详细信息,请参阅 SyncProvider 类规范。

供应商可以使用任何一个可能级别的同步开发 SyncProvider 实现,从而给 RowSet 对象一个选择同步机制的机会。供应商通过向 jdbc@sun.com 的 Sun Microsystems 注册完全限定类名称使其实现可用。下面将更加详细地讨论此过程。

2.0 服务提供者接口架构

  • 3.0 SyncProvider 实现者指南

    4.0 解决同步冲突

    接口 SyncResolver 提供了一种应用程序手动确定发生冲突时应执行的操作的方式。当 CachedRowSet 方法 acceptChanges 完成并检测到一个或多个冲突时,它将抛出一个 SyncProviderException 对象。应用程序可以捕获该异常,并通过调用方法 SyncProviderException.getSyncResolver() 使它检索 SyncResolver 对象。

    SyncResolver 对象是实现了 SyncResolver 接口的一种特殊 CachedRowSet 对象或 JdbcRowSet 对象,它逐行检查冲突。它与同步的 RowSet 对象完全相同,区别在于它仅包含数据源中导致冲突的数据。将所有其他列值都设置为 null。为了从一个冲突值导航到另一个冲突值,SyncResolver 对象提供了方法 nextConflictpreviousConflict

    SyncResolver 接口也提供了一些方法,用于执行以下操作:

    在调用 CachedRowSet 方法 acceptChanges 时,它会委托给 RowSet 对象的 SyncProvider 对象。实现的 SyncProvider 对象提供 writer 的方式决定对冲突执行检查的级别(等级)。完成所有的冲突检查并且找到一个或多个冲突之后,方法 acceptChanges 会抛出一个 SyncProviderException 对象。应用程序可以捕获该异常,并使用该异常获取 SyncResolver 对象。

    然后,应用程序可以使用 SyncResolver 方法获取关于每个冲突的信息,并决定要执行的操作。如果应用程序逻辑或用户决定 RowSet 对象中的值应该保留,那么应用程序或用户可以使用它重写数据源值。

    SyncResolver 接口的注释有更多详细信息。

    5.0 相关的规范

    6.0 相关的文档


    JavaTM Platform
    Standard Ed. 6

    提交错误或意见
    有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

    版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策