Платформа Java™
Стандарт Эд. 7

Пакет javax.sql.rowset.spi

Стандартные классы и интерфейсы, которые сторонний поставщик должен использовать в ее реализации провайдера синхронизации.

См.: Описание

Пакет javax.sql.rowset.spi Описание

Стандартные классы и интерфейсы, которые сторонний поставщик должен использовать в ее реализации провайдера синхронизации. Эти классы и интерфейсы упоминаются как Интерфейс Поставщика услуг (SPI). Поставщику можно было включать его реализацию на веб-странице JDBC, которая перечисляет доступный SyncProvider реализации, посылая электронное письмо jdbc@sun.com. Выполнение этого помогает сделать разработчиков, знающих о реализации. Позволять a RowSet возразите, чтобы использовать реализацию, поставщик должен зарегистрировать ее в SyncFactory одиночный элемент. (См. комментарий класса для SyncProvider для полного объяснения процесса регистрации и соглашения о присвоении имен, которое будет использоваться.)

Оглавление

1.0 Спецификация пакета

Следующие классы и интерфейсы составляют javax.sql.rowset.spi пакет:

  • SyncFactory
  • SyncProvider
  • SyncFactoryException
  • SyncProviderException
  • SyncResolver
  • XmlReader
  • XmlWriter
  • TransactionalWriter
Следующие интерфейсы, в javax.sql пакет, также часть SPI:
  • RowSetReader
  • RowSetWriter

A SyncProvider реализация обеспечивает разъединенный RowSet объект с механизмами для того, чтобы считать данные в это и для того, чтобы записать данные, которые были изменены в этом назад к базовому источнику данных. Читатель, a RowSetReader или XMLReader объект, данные чтений в a RowSet возразите когда CachedRowSet методы execute или populate вызываются. Писатель, a RowSetWriter или XMLWriter возразите, записывает изменения обратно к базовому источнику данных когда CachedRowSet метод acceptChanges вызывается.

Процесс записи изменений в a RowSet объект к его источнику данных известен как синхронизация. SyncProvider реализация это a RowSet объект использует, определяет уровень синхронизации что RowSet использование писателя объекта. Различные уровни синхронизации упоминаются как классы.

Более низкие уровни синхронизации известны как уровни оптимистичного параллелизма, потому что они оптимистично предполагают, что не будет никаких конфликтов или очень немногих конфликтов. Конфликт существует когда те же самые данные, измененные в RowSet объект был также изменен в источнике данных. Используя оптимистичный параллелизм модель означает это, если есть конфликт, модификации или к источнику данных или к RowSet объект будет потерян.

Более высокие уровни синхронизации вызывают пессимистичные, потому что они предполагают, что другие будут получать доступ к источнику данных и делать модификации. Переменные уровни набора этих классов блокировок, чтобы увеличить возможности, что никакие конфликты не происходят.

Самый низкий уровень синхронизации просто пишет любые изменения, произведенные в RowSet возразите против его базового источника данных. Писатель не делает ничего, чтобы проверить на конфликты. Если есть конфликт, и значения источника данных перезаписываются, изменения, которыми произвели другие стороны в источнике данных, теряются.

RIXMLProvider реализация использует самый низкий уровень синхронизации и только пишет RowSet изменения к источнику данных. Это - истина, потому что обычно источники данных XML не включают методам транзакции для того, чтобы поддержать целостность данных. Однако, определенные группы стандартов рассмотрели предлагающую основанную на XML синхронизацию. Для получения дополнительной информации см.

     http://www.syncml.org

Для следующие выравнивают, проверки писателя, чтобы видеть, есть ли какие-либо конфликты, и если есть, это ничего не пишет в источник данных. Проблема с этим уровнем параллелизма - это, если другая сторона изменила соответствующие данные в источнике данных начиная с RowSet объект получил свои данные, изменения, произведенные в RowSet объект теряется. RIOptimisticProvider реализация использует этот уровень синхронизации.

В более высоких уровнях синхронизации, называемой пессимистическим параллелизмом, писатель предпринимает шаги, чтобы избежать конфликтов, устанавливая блокировки. Установка блокировок может измениться от установки блокировки на единственной строке к установке блокировки на таблице или всем источнике данных. Уровень синхронизации является поэтому компромиссом между возможностью пользователей получить доступ к источнику данных одновременно и возможности писателя удержать данные RowSet возразите и его источник данных синхронизировался.

Это - требование, чтобы все разъединялись RowSet объекты (CachedRowSet, FilteredRowSet, JoinRowSet, и WebRowSet объекты), получают их SyncProvider объекты от SyncFactory механизм.

Ссылочная реализация (RI) обеспечивает двух провайдеров синхронизации.

Они SyncProvider реализации связываются ссылочной реализацией, которая всегда делает их доступными RowSet реализации. SyncProvider реализации делают себя доступными, будучи зарегистрированным в SyncFactory одиночный элемент. Когда a RowSet возразите запрашивает провайдера, определяя это в конструкторе или как параметр CachedRowSet метод setSyncProvider, SyncFactory одноэлементные проверки, чтобы видеть, был ли требуемый провайдер зарегистрирован в этом. Если это имеет, SyncFactory создает экземпляр этого и передает это к запросу RowSet объект. Если SyncProvider реализация, которая определяется, не была зарегистрирована, SyncFactory одиночный элемент вызывает a SyncFactoryException объект, который будет брошен. Если никакой провайдер не определяется, SyncFactory одиночный элемент создаст экземпляр реализации провайдера по умолчанию, RIOptimisticProvider, и передайте это к запросу RowSet объект.

Если a WebRowSet объект не определяет провайдера в своем конструкторе, SyncFactory приведет этому пример RIOptimisticProvider. Однако, конструктор для WebRowSet реализуется, чтобы установить провайдера в RIXMLProvider, который читает и пишет a RowSet объект в формате XML.

См. спецификацию класса SyncProvider для получения дальнейшей информации.

Поставщики могут разработать реализацию SyncProvider с любым из возможных уровней синхронизации, таким образом давая RowSet возражает выбору механизмов синхронизации. Поставщик может сделать его реализацию доступной, регистрируя полностью определенное имя класса в Oracle Corporation в jdbc@sun.com. Этот процесс обсуждается в дальнейших деталях ниже.

2.0 Архитектура Интерфейса Поставщика услуг

  • 3.0 Руководство Разработчика SyncProvider

      3.1 Требования

      Совместимое SyncProvider реализация, которая является полностью сменной в SyncFactory должен расширить и реализовать все абстрактные методы в SyncProvider класс. Кроме того, реализация должна определить класс, блокируя и обновляемые возможности представления, определенные в SyncProvider определение класса. Один или больше SyncProvider критерии описания должны поддерживаться. Ожидается, что реализации поставщика предложат диапазон класса, блокировки, и обновляемых возможностей представления.

      Кроме того, SyncProvider соглашение о присвоении имен должно сопровождаться как детализировано в SyncProvider описание класса.

      3.2 Классы

      JSR 114 определяет ряд классов, чтобы описать качество синхронизации a SyncProvider объект может предложить разъединенный RowSet объект. Эти классы перечисляются от самого низкого качества службы к самому высокому.

      • GRADE_NONE - Никакая синхронизация с инициирующим источником данных не обеспечивается. A SyncProvider реализация возвращая этот класс просто попытается записать любые данные, которые изменились в RowSet возразите против базового источника данных, перезаписывая независимо от того, что там. Никакая попытка не предпринимается, чтобы сравнить исходные значения с текущей стоимостью, чтобы видеть, есть ли конфликт. RIXMLProvider реализуется с этим классом.

      • GRADE_CHECK_MODIFIED_AT_COMMIT - низкий уровень оптимистической синхронизации. A SyncProvider реализация возвращая этот класс проверит на конфликты в строках, которые изменились между последней синхронизацией и текущей синхронизацией полным ходом. Любые изменения в инициирующем источнике данных, которые были изменены, не будут отражены в разъединенном RowSet объект. Если нет никаких конфликтов, изменений в RowSet объект будет записан источнику данных. Если есть конфликты, никакие изменения не пишутся. RIOptimisticProvider реализация использует этот класс.

      • GRADE_CHECK_ALL_AT_COMMIT - высокая отметка оптимистической синхронизации. A SyncProvider реализация возвращая этот класс проверит все строки, включая строки, которые не изменились в разъединенном RowSet объект. Таким образом любые изменения к строкам в базовом источнике данных будут отражены в разъединенном RowSet возразите, когда синхронизация заканчивается успешно.

      • GRADE_LOCK_WHEN_MODIFIED - пессимистический класс синхронизации. SyncProvider реализации возвращая этот класс заблокируют строку в инициирующем источнике данных, который соответствует строке, изменяемой в RowSet объект уменьшить возможность других процессов, изменяющих те же самые данные в источнике данных.

      • GRADE_LOCK_WHEN_LOADED - более высокий пессимистический класс синхронизации. A SyncProvider реализация возвращая этот класс заблокирует все представление и/или таблицу, на которую влияет исходный запрос, используемый, чтобы заполнить a RowSet объект.

      3.3 Блокировки

      JSR 114 определяет ряд констант, которые определяют, были ли какие-либо блокировки помещены в a RowSet базовый источник данных объекта и, если так, в которые конструкции помещаются блокировки. Эти блокировки останутся на источнике данных в то время как RowSet объект разъединяется от источника данных.

      Эти константы нужно считать дополнительными к константам класса. Настройка по умолчанию для большинства настроек класса требует, чтобы никакие блокировки источника данных не остались когда a RowSet объект разъединяется от его источника данных. Классы GRADE_LOCK_WHEN_MODIFIED и GRADE_LOCK_WHEN_LOADED позвольте разъединенный RowSet объект иметь мелкомодульный контроль над степенью блокировки.

      • DATASOURCE_NO_LOCK - Никакие блокировки не остаются на инициирующем источнике данных. Это - установка блокировки по умолчанию для всех SyncProvider реализации если иначе не направлено a RowSet объект.

      • DATASOURCE_ROW_LOCK - блокировка помещается в строки, которые затрагиваются исходным SQL-запросом, используемым, чтобы заполнить RowSet объект.

      • DATASOURCE_TABLE_LOCK - блокировка помещается во все таблицы, которые затрагиваются запросом, который использовался, чтобы заполнить RowSet объект.

      • DATASOURCE_DB_LOCK блокировка помещается в весь источник данных, который используется RowSet объект.

      3.4 Обновляемые Представления

      A RowSet объект может быть заполнен с данными от SQL VIEW. Следующие константы указывают ли a SyncProvider объект может обновить данные в таблице или таблицах от который VIEW был получен.

      • UPDATABLE_VIEW_SYNC Указывает на это a SyncProvider реализация поддерживает синхронизацию к таблице или таблицам от который SQL VIEW используемый, чтобы заполнить a RowSet объект получается.

      • NONUPDATABLE_VIEW_SYNC Указывает на это a SyncProvider реализация не поддерживает синхронизацию к таблице или таблицам от который SQL VIEW используемый, чтобы заполнить a RowSet объект получается.

      3.5 Использование SyncProvider Классификация и Блокировка

      В примере ниже, ссылочная реализация CachedRowSetImpl реконфигурировала свой текущий объект SyncProvider, вызывая метод setSyncProvider.

          CachedRowSetImpl crs = new CachedRowSetImpl();
          crs.setSyncProvider("com.foo.bar.HASyncProvider");
      
      Приложение может получить объект SyncProvider, использующийся в настоящее время разъединенным RowSet объект. Это может также получить класс синхронизации, с которой провайдер был реализован и степень блокировки использующегося в настоящее время. Кроме того, у приложения есть гибкость, чтобы установить степень блокировки, которая будет использоваться, который может увеличить возможности для успешной синхронизации. Их работа показывают в следующем фрагменте кода.
          SyncProvider sync = crs.getSyncProvider();
      
          switch (sync.getProviderGrade()) {
          case: SyncProvider.GRADE_CHECK_ALL_AT_COMMIT
               //A high grade of optimistic synchronization
          break;
          case: SyncProvider.GRADE_CHECK_MODIFIED_AT_COMMIT 
               //A low grade of optimistic synchronization 
          break;
          case: SyncProvider.GRADE_LOCK_WHEN_LOADED 
               // A pessimistic synchronization grade 
          break;
          case: SyncProvider.GRADE_LOCK_WHEN_MODIFIED 
               // A pessimistic synchronization grade 
          break;
          case: SyncProvider.GRADE_NONE 
            // No synchronization with the originating data source provided
          break;
          }
                
          switch (sync.getDataSourcLock() {
            case: SyncProvider.DATASOURCE_DB_LOCK
             // A lock is placed on the entire datasource that is used by the
             // RowSet object 
             break;
      
            case: SyncProvider.DATASOURCE_NO_LOCK
             // No locks remain on the  originating data source.
            break;
      
            case: SyncProvider.DATASOURCE_ROW_LOCK
             // A lock is placed on the rows that are  touched by the original 
             // SQL statement used to populate
             // the RowSet object that is using the SyncProvider
             break;
      
            case: DATASOURCE_TABLE_LOCK
             // A lock is placed on  all tables that are touched by the original 
             // SQL statement used to populated
             // the RowSet object that is using the SyncProvider
             break;
      
      
      Это - также возможное использование статического служебного метода в SyncFactory класс, чтобы определить список SyncProvider реализации, в настоящий момент зарегистрированные в SyncFactory.
              Enumeration e = SyncFactory.getRegisteredProviders();
      

    4.0 Разрешение Конфликтов Синхронизации

    Интерфейс SyncResolver обеспечивает путь к приложению, чтобы решить вручную, что сделать, когда конфликт происходит. Когда CachedRowSet метод acceptChanges концы и обнаружили один или более конфликтов, это бросает a SyncProviderException объект. Приложение может поймать исключение и иметь его, получают a SyncResolver объект, вызывая метод SyncProviderException.getSyncResolver().

    A SyncResolver объект, который является специальным предложением отчасти CachedRowSet объект или a JdbcRowSet объект, который реализовал SyncResolver взаимодействуйте через интерфейс, исследует строку конфликтов строкой. Это - копия RowSet объект, синхронизируемый за исключением того, что это содержит только данные от источника данных, это вызывает конфликт. Все другие значения столбцов устанавливаются в null. Чтобы переместиться от одного конфликта оценивают другому, a SyncResolver объект обеспечивает методы nextConflict и previousConflict.

    SyncResolver интерфейс также обеспечивает методы для того, чтобы они сделали следующее:

    • узнавая, ли конфликт, включенный обновление, удаление, или вставка
    • получение значения в источнике данных, который вызвал конфликт
    • установка значения, которое должно быть в источнике данных, если это должно быть изменено или установка значения, которое должно быть в RowSet возразите, должно ли это быть изменено

    Когда CachedRowSet метод acceptChanges вызывается, это делегирует к RowSet объект SyncProvider объект. Как писатель обеспечил этим SyncProvider объект реализуется, определяет, какой уровень (класс) проверки конфликты будет сделан. После того, как вся проверка конфликты завершается, и один или более конфликтов был найден, метод acceptChanges броски a SyncProviderException объект. Приложение может поймать исключение и использовать его, чтобы получить a SyncResolver объект.

    Приложение может тогда использовать SyncResolver методы, чтобы получить информацию о каждом конфликте и решить, что сделать. Если логика приложения или пользователь решают что значение в RowSet объект должен быть тем, чтобы сохраниться, приложение или пользователь могут перезаписать значение источника данных с этим.

    Комментарий для SyncResolver у интерфейса есть больше детали.

    5.0 Связанные Спецификации

    6.0 Связанная Документация

  •  Платформа Java™
    Стандарт Эд. 7

    Представьте ошибку или функцию
    Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
    Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.




    Spec-Zone.ru - all specs in one place