Класс SyncProvider
- java.lang.Object
-
- javax.sql.rowset.spi.SyncProvider
public abstract class SyncProvider extends Object
Механизм синхронизации, предоставляющий возможности чтения/записи для отключенных RowSet объектов. Реализация SyncProvider — это класс, расширяющий абстрактный класс SyncProvider.
Реализация SyncProvider идентифицируется уникальным идентификатором, который представляет собой полное имя класса. Это имя должно быть зарегистрировано в 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— это полное имя её класса. - Рекомендуется, чтобы поставщики предоставляли реализацию
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
Поставщик может зарегистрировать имя класса реализации SyncProvider в корпорации Oracle, отправив электронное письмо на адрес jdbc@sun.com. Oracle будет поддерживать базу данных, перечисляющую доступные реализации SyncProvider для использования с соответствующими реализациями RowSet. Эта база данных будет похожа на уже поддерживаемую базу данных, перечисляющую доступные драйверы JDBC.
Поставщики должны обращаться к реализации по умолчанию синхронизационных провайдеров для получения дополнительной информации о том, как реализовать новую реализацию SyncProvider .
2.0 Как объект RowSet получает своего провайдера
Отключенный объект Rowset может получить доступ к объекту SyncProvider двумя способами: - Используя конструктор
CachedRowSet crs = new CachedRowSet( "com.fred.providers.HighAvailabilitySyncProvider"); - Используя метод
setSyncProviderCachedRowSet 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-представления
Любой отключенный или подключенный объектRowSet может быть заполнен из SQL-запроса, первоначально сформулированного из SQL-представления VIEW. Хотя во многих случаях возможно выполнение обновления базового представления, такое обновление требует дополнительных метаданных, которые могут различаться. Класс SyncProvider предоставляет две константы для указания, поддерживает ли реализация обновление SQL-представления VIEW. -
NONUPDATABLE_VIEW_SYNC- Указывает, что реализацияSyncProviderне поддерживает синхронизацию с SQL-представлениемVIEWв качестве базового источника данных для объектаRowSet. -
UPDATABLE_VIEW_SYNC- Указывает, что реализацияSyncProviderподдерживает синхронизацию с SQL-представлениемVIEWв качестве базового источника данных.
По умолчанию, объект RowSet не может быть обновлён, если он был заполнен данными из SQL-представления VIEW.
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выполнять обновления в SQL-представленииVIEW
Эти константы объяснены в предыдущем разделе (4.0).- SyncProvider.UPDATABLE_VIEW_SYNC
- SyncProvider.NONUPDATABLE_VIEW_SYNC
- См. также:
-
SyncFactory,SyncFactoryException
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static int |
DATASOURCE_DB_LOCK Указывает, что блокировка установлена на весь источник данных, который является источником данных для объекта |
static int |
DATASOURCE_NO_LOCK Указывает, что блокировки на исходном источнике данных больше нет. |
static int |
DATASOURCE_ROW_LOCK Указывает, что блокировка установлена на строки, затронутые исходным SQL-запросом, используемым для заполнения объекта |
static int |
DATASOURCE_TABLE_LOCK Указывает, что блокировка установлена на все таблицы, затронутые исходным 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 Указывает, что реализация |
static int |
UPDATABLE_VIEW_SYNC Указывает, что реализация |
Конструкторы
| Конструктор и описание |
|---|
SyncProvider() Создаёт объект |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
abstract int |
getDataSourceLock() Возвращает текущий уровень блокировки источника данных, активный в данной реализации |
abstract int |
getProviderGrade() Возвращает константу, указывающую на уровень синхронизации, который объект |
abstract String |
getProviderID() Возвращает уникальный идентификатор для этого объекта |
abstract RowSetReader |
getRowSetReader() Возвращает объект |
abstract RowSetWriter |
getRowSetWriter() Возвращает объект |
abstract String |
getVendor() Возвращает имя поставщика этого экземпляра |
abstract String |
getVersion() Возвращает версию выпуска этого экземпляра |
abstract void |
setDataSourceLock(int datasource_lock) Устанавливает блокировку на базовом источнике данных на уровне, указанном в datasource_lock. |
abstract int |
supportsUpdatableView() Возвращает, может ли эта реализация |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Поля
GRADE_NONE
public static final int GRADE_NONE
Указывает, что синхронизация с исходным источником данных не предоставляется. Реализация SyncProvider, возвращающая этот уровень, просто попытается записать обновления в объект RowSet в базу данных без проверки достоверности данных.
- См. также:
- Значения константных полей
GRADE_CHECK_MODIFIED_AT_COMMIT
public static final int GRADE_CHECK_MODIFIED_AT_COMMIT
Указывает низкий уровень оптимистичной синхронизации относительно исходного источника данных. Реализация SyncProvider, возвращающая этот уровень, проверит только изменённые строки.
- См. также:
- Значения константных полей
GRADE_CHECK_ALL_AT_COMMIT
public static final int GRADE_CHECK_ALL_AT_COMMIT
Указывает высокий уровень оптимистичной синхронизации относительно исходного источника данных. Реализация SyncProvider, возвращающая этот уровень, проверит все строки, включая строки, которые не были изменены.
- См. также:
- Значения константных полей
GRADE_LOCK_WHEN_MODIFIED
public static final int GRADE_LOCK_WHEN_MODIFIED
Указывает пессимистический уровень синхронизации относительно исходного источника данных. Реализация SyncProvider, возвращающая этот уровень, заблокирует строку в исходном источнике данных.
- См. также:
- Значения константных полей
GRADE_LOCK_WHEN_LOADED
public static final int GRADE_LOCK_WHEN_LOADED
Указывает наиболее пессимистический уровень синхронизации относительно исходного источника данных. Реализация SyncProvider, возвращающая этот уровень, заблокирует весь вид и/или таблицу, затронутые исходным запросом, используемым для заполнения объекта RowSet.
- См. также:
- Значения константных полей
DATASOURCE_NO_LOCK
public static final int DATASOURCE_NO_LOCK
Указывает, что блокировки исходного источника данных отсутствуют. Это значение по умолчанию для всех реализаций SyncProvider, если не указано иначе объектом RowSet.
- См. также:
- Значения константных полей
DATASOURCE_ROW_LOCK
public static final int DATASOURCE_ROW_LOCK
Указывает, что блокировка накладывается на строки, затронутые исходным SQL-запросом, используемым для заполнения объекта RowSet, использующего этот объект SyncProvider.
- См. также:
- Значения константных полей
DATASOURCE_TABLE_LOCK
public static final int DATASOURCE_TABLE_LOCK
Указывает, что блокировка накладывается на все таблицы, затронутые исходным SQL-запросом, используемым для заполнения объекта RowSet, использующего этот объект SyncProvider.
- См. также:
- Значения константных полей
DATASOURCE_DB_LOCK
public static final int DATASOURCE_DB_LOCK
Указывает, что блокировка накладывается на весь источник данных, являющийся источником данных для объекта RowSet, использующего этот объект SyncProvider.
- См. также:
- Значения константных полей
UPDATABLE_VIEW_SYNC
public static final int UPDATABLE_VIEW_SYNC
Указывает, что реализация SyncProvider поддерживает синхронизацию между объектом RowSet и SQL-запросом VIEW, используемым для его заполнения.
- См. также:
- Значения константных полей
NONUPDATABLE_VIEW_SYNC
public static final int NONUPDATABLE_VIEW_SYNC
Указывает, что реализация SyncProvider не поддерживает синхронизацию между объектом RowSet и SQL-запросом VIEW, используемым для его заполнения.
- См. также:
- Значения константных полей
Конструкторы
SyncProvider
public SyncProvider()
Создаёт объект SyncProvider по умолчанию.
Методы
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.
- Возвращает:
- целое число, являющееся одной из следующих констант: 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 и SQL-запросом VIEW в источнике данных, откуда объект RowSet получил свои данные.
- Возвращает:
- значение, указывающее, поддерживает ли этот объект
SyncProviderобновление SQL-запросаVIEW; одно из следующих значений: SyncProvider.UPDATABLE_VIEW_SYNC, SyncProvider.NONUPDATABLE_VIEW_SYNC
getVersion
public abstract String getVersion()
Возвращает версию выпуска этой реализации SyncProvider.
- Возвращает:
- строка, описывающая версию выпуска реализации
SyncProvider.
getVendor
public abstract String getVendor()
Возвращает имя поставщика этой реализации SyncProvider.
- Возвращает:
- строка, описывающая имя поставщика этой реализации
SyncProvider.
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.