Класс SyncFactory
- java.lang.Object
-
- javax.sql.rowset.spi.SyncFactory
public class SyncFactory extends Object
Механизм поставщика служб (SPI), который генерирует SyncProvider экземпляры для использования объектами отсоединённых RowSet. Экземпляры SyncProvider в свою очередь предоставляют объекту javax.sql.RowSetReader объект RowSet, необходимый для заполнения данных, и объект javax.sql.RowSetWriter, необходимый для распространения изменений в данных обратно в базовый источник данных.
Поскольку все методы в классе SyncFactory статические, существует только один объект SyncFactory на одну Java VM в любой момент времени. Это гарантирует, что существует единственный источник, из которого реализация RowSet может получить свою реализацию SyncProvider.
1.0 Обзор
КлассSyncFactory предоставляет внутренний реестр доступных реализаций поставщиков синхронизации (объекты SyncProvider). Этот реестр можно запросить, чтобы определить, какие поставщики синхронизации доступны. Следующая строка кода получает перечисление текущих зарегистрированных поставщиков. java.util.Enumeration e = SyncFactory.getRegisteredProviders();Все стандартные реализации
RowSet должны предоставлять как минимум двух поставщиков: - оптимистичного поставщика для использования с реализацией
CachedRowSetили реализацией, производной от неё - поставщика XML, который используется для чтения и записи XML, например, с объектами
WebRowSet
SyncProvider RIOptimisticProvider и RIXmlProvider, которые удовлетворяют этому требованию. Класс SyncFactory предоставляет методы доступа, чтобы помочь приложениям определить, какие поставщики синхронизации в настоящее время зарегистрированы в SyncFactory.
Другие методы позволяют регистрировать или де-регистрировать поставщиков персистентности RowSet с механизмом фабрики. Это позволяет сделать доступными дополнительные реализации поставщиков синхронизации для объектов RowSet во время выполнения.
Приложения могут применить определённый уровень фильтрации, чтобы определить уровень синхронизации, который предлагает реализация SyncProvider. Следующие критерии определяют, доступен ли поставщик объекту RowSet:
- Если конкретный поставщик указан объектом
RowSetиSyncFactoryне содержит ссылку на этого поставщика, выбрасываетсяSyncFactoryExceptionс сообщением, что поставщик синхронизации не найден. - Если реализация
RowSetинициализируется с указанным поставщиком и указанный поставщик должным образом зарегистрирован, запрашиваемый поставщик предоставляется. В противном случае выбрасываетсяSyncFactoryException. - Если объект
RowSetне указывает реализациюSyncProviderи нет дополнительных реализацийSyncProvider, предоставляются поставщики-реализации по умолчанию.
2.0 Регистрация реализаций SyncProvider
Как поставщики, так и разработчики могут регистрировать реализации SyncProvider с помощью одного из следующих механизмов.
-
Использование командной строки
Имя поставщика передаётся в командной строке, что добавит поставщика в системные свойства. Например:-Drowset.provider.classname=com.fred.providers.HighAvailabilityProvider
-
Использование стандартного файла свойств
Реализация по умолчанию предназначена для отправки с J2SE 1.5, которая будет включать дополнительный файл ресурсов, который можно редактировать вручную. Вот пример файла свойств, включённого в реализацию по умолчанию:#Default JDBC RowSet sync providers listing # # Optimistic synchronization provider rowset.provider.classname.0=com.sun.rowset.providers.RIOptimisticProvider rowset.provider.vendor.0=Oracle Corporation rowset.provider.version.0=1.0 # XML Provider using standard XML schema rowset.provider.classname.1=com.sun.rowset.providers.RIXMLProvider rowset.provider.vendor.1=Oracle Corporation rowset.provider.version.1=1.0
КлассSyncFactoryпроверяет этот файл и регистрирует содержащиеся в нём реализацииSyncProvider. Разработчик или поставщик может добавить другие реализации в этот файл. Например, вот возможное добавление:rowset.provider.classname.2=com.fred.providers.HighAvailabilityProvider rowset.provider.vendor.2=Fred, Inc. rowset.provider.version.2=1.0 -
Использование контекста JNDI
Доступные поставщики могут быть зарегистрированы в контексте JNDI, иSyncFactoryпопытается загрузить реализацииSyncProviderиз этого контекста JNDI. Например, следующий фрагмент кода регистрирует реализацию поставщика в контексте JNDI. Это обычно выполняет развертыватель. В этом примереMyProviderрегистрируется в пространстве имён CosNaming, которое используется ресурсами J2EE.import javax.naming.*; Hashtable svrEnv = new Hashtable(); srvEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming"); Context ctx = new InitialContext(svrEnv); com.fred.providers.MyProvider = new MyProvider(); ctx.rebind("providers/MyProvider", syncProvider);
SyncFactory. Это позволяет SyncFactory просматривать контекст JNDI в поисках реализаций SyncProvider. Hashtable appEnv = new Hashtable();
appEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming");
appEnv.put(Context.PROVIDER_URL, "iiop://hostname/providers");
Context ctx = new InitialContext(appEnv);
SyncFactory.registerJNDIContext(ctx); Если объект RowSet пытается получить объект MyProvider, SyncFactory попытается его найти. Сначала он ищет его в системных свойствах, затем в файлах ресурсов и, наконец, проверяет установленный контекст JNDI. Экземпляр SyncFactory проверяет, является ли запрашиваемый поставщик допустимым расширением абстрактного класса SyncProvider, и затем передаёт его объекту RowSet. В следующем фрагменте кода создаётся новый объект CachedRowSet и инициализируется со значением env, содержащим привязку к MyProvider . Hashtable env = new Hashtable();
env.put(SyncFactory.ROWSET_SYNC_PROVIDER, "com.fred.providers.MyProvider");
CachedRowSet crs = new com.sun.rowset.CachedRowSetImpl(env); Более подробные сведения об этих механизмах см. в спецификации пакета javax.sql.rowset.spi.- С момента:
- 1.5
- См. также:
-
SyncProvider,SyncFactoryException
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static String | ROWSET_SYNC_PROVIDER | Стандартный идентификатор свойства для имени реализации поставщика синхронизации. |
static String | ROWSET_SYNC_PROVIDER_VERSION | Стандартный идентификатор свойства для тега версии реализации поставщика синхронизации. |
static String | ROWSET_SYNC_VENDOR | Стандартный идентификатор свойства для имени поставщика реализации поставщика синхронизации. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static SyncProvider | getInstance(String providerID) | Возвращает экземпляр |
static Logger | getLogger() | Возвращает объект ведения журнала, чтобы приложения могли получать события синхронизации, опубликованные реализациями SyncProvider. |
static Enumeration<SyncProvider> | getRegisteredProviders() | Возвращает перечисление текущих зарегистрированных поставщиков синхронизации. |
static SyncFactory | getSyncFactory() | Возвращает |
static void | registerProvider(String providerID) | Добавляет указанный поставщик синхронизации в реестр фабрики. |
static void | setJNDIContext(Context ctx) | Устанавливает начальный контекст JNDI, из которого реализации SyncProvider могут извлекаться из пространства имён JNDI |
static void | setLogger(Logger logger) | Устанавливает объект ведения журнала, который будет использоваться реализацией |
static void | setLogger(Logger logger,
Level level) | Устанавливает объект ведения журнала, используемый реализациями |
static void | unregisterProvider(String providerID) | Удаляет указанный зарегистрированный поставщик синхронизации из реестра SPI фабрики. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Поля
ROWSET_SYNC_PROVIDER
public static final String ROWSET_SYNC_PROVIDER
Стандартный идентификатор свойства для имени реализации поставщика синхронизации.
- См. также:
- Значения постоянных полей
ROWSET_SYNC_VENDOR
public static final String ROWSET_SYNC_VENDOR
Стандартный идентификатор свойства для имени поставщика реализации поставщика синхронизации.
- См. также:
- Значения постоянных полей
ROWSET_SYNC_PROVIDER_VERSION
public static final String ROWSET_SYNC_PROVIDER_VERSION
Стандартный идентификатор свойства для тега версии реализации поставщика синхронизации.
- См. также:
- Значения постоянных полей
Методы
registerProvider
public static void registerProvider(String providerID)
throws SyncFactoryException Добавляет указанного поставщика синхронизации в регистр фабрики. Руководящие принципы предоставлены в спецификации SyncProvider для необходимых соглашений об именовании для реализаций SyncProvider.
Поставщики синхронизации, связанные с контекстом JNDI, могут быть зарегистрированы путем привязки экземпляра SyncProvider к пространству имен JNDI.
SyncProvider p = new MySyncProvider();
InitialContext ic = new InitialContext();
ic.bind ("jdbc/rowset/MySyncProvider", p); Кроме того, начальный контекст JNDI должен быть установлен с SyncFactory с помощью метода setJNDIContext. SyncFactory использует этот контекст для поиска доступных объектов SyncProvider , привязанных к контексту JNDI и его дочерним узлам.- Параметры:
-
providerID- ОбъектStringс уникальным идентификатором регистрируемого поставщика синхронизации - Исключения:
-
SyncFactoryException- если делается попытка предоставить пустое или null имя поставщика - См. также:
setJNDIContext(javax.naming.Context)
getSyncFactory
public static SyncFactory getSyncFactory()
Возвращает SyncFactory синглтон.
- Возвращает:
- экземпляр
SyncFactory
unregisterProvider
public static void unregisterProvider(String providerID)
throws SyncFactoryException Удаляет назначенного зарегистрированного поставщика синхронизации из регистра SPI фабрики.
- Параметры:
-
providerID- Уникальный идентификатор поставщика синхронизации - Исключения:
-
SyncFactoryException- Если попытка отменить регистрацию реализации SyncProvider, которая не была зарегистрирована.
getInstance
public static SyncProvider getInstance(String providerID)
throws SyncFactoryException Возвращает экземпляр SyncProvider , идентифицируемый по providerID.
- Параметры:
-
providerID- уникальный идентификатор поставщика - Возвращает:
- реализация
SyncProvider - Исключения:
-
SyncFactoryException- Если SyncProvider не найден, providerIDnull, или при вызове этого поставщика возникла ошибка.
getRegisteredProviders
public static Enumeration<SyncProvider> getRegisteredProviders()
throws SyncFactoryException Возвращает перечисление текущих зарегистрированных поставщиков синхронизации. Реализация RowSet может использовать любого поставщика в перечислении в качестве своего объекта SyncProvider .
Как минимум, должен быть возможен справочный поставщик синхронизации, позволяющий хранить данные контента RowSet с помощью драйвера JDBC.
- Возвращает:
- Enumeration Перечисление доступных зарегистрированных поставщиков синхронизации.
- Исключения:
-
SyncFactoryException- Если при получении зарегистрированных поставщиков произошла ошибка
setLogger
public static void setLogger(Logger logger)
Устанавливает объект регистрации, который будет использоваться реализацией SyncProvider, предоставляемой SyncFactory. Все реализации SyncProvider могут регистрировать свои события в этот объект, а приложение может получить к нему доступ с помощью метода getLogger.
Этот метод проверяет наличие объекта SQLPermission, который предоставляет разрешение setSyncFactory, прежде чем разрешить выполнение метода. Если объект SecurityManager существует и его метод checkPermission запрещает вызов setLogger, этот метод генерирует исключение java.lang.SecurityException.
- Параметры:
-
logger- Экземпляр объекта Logger - Исключения:
-
SecurityException- если менеджер безопасности существует и его методcheckPermissionзапрещает вызовsetLogger -
NullPointerException- если logger равен null - См. также:
SecurityManager.checkPermission(java.security.Permission)
setLogger
public static void setLogger(Logger logger,
Level level) Устанавливает объект регистрации, используемый реализациями SyncProvider, предоставляемыми SyncFactory SPI. Все реализации SyncProvider могут регистрировать свои события в этот объект, а приложение может получить к нему доступ с помощью метода getLogger.
Этот метод проверяет наличие объекта SQLPermission, который предоставляет разрешение setSyncFactory, прежде чем разрешить выполнение метода. Если объект SecurityManager существует и его метод checkPermission запрещает вызов setLogger, этот метод генерирует исключение java.lang.SecurityException.
- Параметры:
-
logger- экземпляр объекта Logger -
level- экземпляр объекта Level, указывающий требуемый уровень регистрации - Исключения:
-
SecurityException- если менеджер безопасности существует и его методcheckPermissionзапрещает вызовsetLogger -
NullPointerException- если logger равен null - См. также:
-
SecurityManager.checkPermission(java.security.Permission),LoggingPermission
getLogger
public static Logger getLogger()
throws SyncFactoryException Возвращает объект регистрации для приложений, чтобы получить события синхронизации, опубликованные реализациями SyncProvider.
- Возвращает:
- Объект
Logger, указанный для использования реализациямиSyncProvider - Исключения:
-
SyncFactoryException- если объект регистрации не задан.
setJNDIContext
public static void setJNDIContext(Context ctx)
throws SyncFactoryException Устанавливает начальный контекст JNDI, из которого реализации SyncProvider могут извлекаться из пространства имен JNDI.
Этот метод проверяет наличие объекта SQLPermission, который предоставляет разрешение setSyncFactory, прежде чем разрешить выполнение метода. Если объект SecurityManager существует и его метод checkPermission запрещает вызов setJNDIContext, этот метод генерирует исключение java.lang.SecurityException.
- Параметры:
-
ctx- действительный контекст JNDI - Исключения:
-
SyncFactoryException- если предоставленный контекст JNDI равен null -
SecurityException- если менеджер безопасности существует и его методcheckPermissionзапрещает вызовsetJNDIContext - См. также:
SecurityManager.checkPermission(java.security.Permission)
© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.sql.rowset/javax/sql/rowset/spi/SyncFactory.html