Класс 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 являются статическими, в любой момент времени в виртуальной машине 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.- См. также:
-
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 не найден, providerID являетсяnullили возникла ошибка при попытке вызвать этого поставщика.
getRegisteredProviders
public static Enumeration<SyncProvider> getRegisteredProviders()
throws SyncFactoryException Возвращает перечисление текущих зарегистрированных поставщиков синхронизации. Реализация RowSet может использовать любой поставщик в перечислении в качестве своего объекта SyncProvider.
По меньшей мере, должен быть возможным эталонный поставщик синхронизации, позволяющий хранить данные содержимого RowSet с помощью драйвера JDBC.
- Возвращает:
- Перечисление A перечисление доступных зарегистрированных поставщиков синхронизации
- Исключения:
-
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- если регистратор null - См. также:
SecurityManager.checkPermission(java.security.Permission)
setLogger
public static void setLogger(Logger logger,
Level level) Устанавливает объект логгирования, который используется реализациями SyncProvider, предоставляемыми API SyncFactory. Все реализации SyncProvider могут регистрировать свои события в этом объекте, и приложение может получить доступ к этому объекту с помощью метода getLogger.
Этот метод проверяет, существует ли объект SQLPermission, который предоставляет разрешение setSyncFactory, прежде чем разрешить выполнение метода. Если объект SecurityManager существует и его метод checkPermission запрещает вызов метода setLogger, этот метод генерирует исключение java.lang.SecurityException.
- Параметры:
-
logger- экземпляр объекта Logger -
level- экземпляр объекта Level, указывающий требуемый уровень регистрации - Исключения:
-
SecurityException- если существует менеджер безопасности и его методcheckPermissionзапрещает вызов методаsetLogger -
NullPointerException- если регистратор 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.