Класс SyncFactory
public class SyncFactory extends Object
SyncProvider экземпляры для использования отключёнными RowSet объектами. Экземпляры SyncProvider в свою очередь предоставляют javax.sql.RowSetReader объекту RowSet объект, необходимый для заполнения его данными, и javax.sql.RowSetWriter объект, необходимый для распространения изменений в его данных обратно в исходный источник данных. Поскольку все методы в классе SyncFactory являются статическими, в любой момент времени в одной виртуальной машине Java существует только один объект SyncFactory. Это гарантирует, что существует единственный источник, из которого реализация 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
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
ROWSET_SYNC_PROVIDER |
Стандартный идентификатор свойства для имени реализации поставщика синхронизации. |
static final String |
ROWSET_SYNC_PROVIDER_VERSION |
Стандартный идентификатор свойства для тега версии реализации поставщика синхронизации. |
static final String |
ROWSET_SYNC_VENDOR |
Стандартный идентификатор свойства для имени поставщика реализации поставщика синхронизации. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static SyncProvider |
getInstance |
Возвращает экземпляр SyncProvider с идентификатором providerID. |
static Logger |
getLogger() |
Возвращает объект протоколирования для приложений, чтобы получить события синхронизации, опубликованные реализациями SyncProvider. |
static Enumeration |
getRegisteredProviders() |
Возвращает перечисление текущих зарегистрированных поставщиков синхронизации. |
static SyncFactory |
getSyncFactory() |
Возвращает SyncFactory синглтон. |
static void |
registerProvider |
Добавляет заданного поставщика синхронизации в реестр фабрики. |
static void |
setJNDIContext |
Устанавливает начальный контекст JNDI, из которого реализации SyncProvider могут извлекаться из пространства имён JNDI |
static void |
setLogger |
Устанавливает объект протоколирования, который будет использоваться реализацией SyncProvider, предоставляемой SyncFactory. |
static void |
setLogger |
Устанавливает объект протоколирования, который используется реализациями SyncProvider, предоставляемыми SyncFactory SPI. |
static void |
unregisterProvider |
Удаляет назначенного текущего зарегистрированного поставщика синхронизации из реестра SPI фабрики. |
Подробное описание полей
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 имя поставщика - См. также:
getSyncFactory
public static SyncFactory getSyncFactory()
SyncFactory синглтон.- Возвращает:
- экземпляр
SyncFactory
unregisterProvider
public static void unregisterProvider(String providerID) throws SyncFactoryException
- Параметры:
-
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.
- Возвращает:
- Перечисление перечисление доступных зарегистрированных поставщиков синхронизации
- Исключения:
-
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 - См. также:
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 - См. также:
getLogger
public static Logger getLogger() throws SyncFactoryException
- Возвращает:
- Объект
Logger, указанный для использования реализациямиSyncProvider - Исключения:
-
SyncFactoryException- если объект регистрации не был установлен.
setJNDIContext
public static void setJNDIContext(Context ctx) throws SyncFactoryException
Этот метод проверяет наличие объекта SQLPermission, предоставляющего разрешение setSyncFactory, прежде чем позволить методу успешно завершиться. Если объект SecurityManager существует и его метод checkPermission отказывается от вызова setJNDIContext, этот метод вызывает java.lang.SecurityException.
- Параметры:
-
ctx- корректный контекст JNDI - Исключения:
-
SyncFactoryException- если предоставленный контекст JNDI равен null -
SecurityException- если менеджер безопасности существует и его методcheckPermissionотказывается от вызоваsetJNDIContext - См. также:
© 1993, 2023, 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/21/docs/api/java.sql.rowset/javax/sql/rowset/spi/SyncFactory.html