Spec-Zone.ru › OpenJDK 27

Класс 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
Обратите внимание, что реализации JDBC RowSet включают реализации SyncProvider RIOptimisticProvider и RIXmlProvider, удовлетворяющие этому требованию.

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

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

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

  1. Если объект RowSet указывает конкретного поставщика, а SyncFactory не содержит ссылки на этого поставщика, выбрасывается исключение SyncFactoryException с сообщением о том, что поставщик синхронизации не найден.
  2. Если реализация RowSet создаётся с указанным поставщиком и этот поставщик зарегистрирован надлежащим образом, предоставляется запрошенный поставщик. В противном случае выбрасывается исключение SyncFactoryException.
  3. Если объект 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);
    
Затем приложение зарегистрирует контекст JNDI в экземпляре 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 final String ROWSET_SYNC_PROVIDER
Стандартный идентификатор свойства для имени реализации поставщика синхронизации.
static final String ROWSET_SYNC_PROVIDER_VERSION
Стандартный идентификатор свойства для тега версии реализации поставщика синхронизации.
static final String ROWSET_SYNC_VENDOR
Стандартный идентификатор свойства для имени поставщика реализации поставщика синхронизации.

Краткое описание методов

Модификатор и тип Метод Описание
static SyncProvider getInstance(String providerID)
Возвращает экземпляр SyncProvider, идентифицируемый значением providerID.
static Logger getLogger()
Возвращает объект ведения журнала, с помощью которого приложения могут получать события синхронизации, опубликованные реализациями SyncProvider.
static Enumeration<SyncProvider> getRegisteredProviders()
Возвращает перечисление зарегистрированных на данный момент поставщиков синхронизации.
static SyncFactory getSyncFactory()
Возвращает синглтон SyncFactory.
static void registerProvider(String providerID)
Добавляет указанный поставщик синхронизации в реестр фабрики.
static void setJNDIContext(Context ctx)
Задаёт начальный контекст JNDI, из которого реализации SyncProvider могут извлекаться из пространства имён JNDI
static void setLogger(Logger logger)
Задаёт объект ведения журнала, используемый реализацией SyncProvider, предоставленной SyncFactory.
static void setLogger(Logger logger, Level level)
Задаёт объект ведения журнала, используемый реализациями SyncProvider, предоставленными SPI SyncFactory.
static void unregisterProvider(String providerID)
Удаляет указанный зарегистрированный в данный момент поставщик синхронизации из реестра SPI фабрики.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Показывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация устарела и может быть удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Переводит текущий поток в состояние ожидания до его пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Переводит текущий поток в состояние ожидания до его пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Переводит текущий поток в состояние ожидания до его пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

Подробное описание полей

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(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.

Возвращает:
Enumeration — перечисление доступных поставщиков синхронизации, зарегистрированных в этой фабрике
Выбрасывает:
SyncFactoryException — если при получении зарегистрированных поставщиков возникает ошибка

setLogger

public static void setLogger(Logger logger)
Задаёт объект ведения журнала, используемый реализацией SyncProvider, предоставленной SyncFactory. Все реализации SyncProvider могут записывать свои события в этот объект, а приложение может получить ссылку на него с помощью метода getLogger.
Параметры:
logger — экземпляр объекта Logger
Выбрасывает:
NullPointerException — если средство ведения журнала имеет значение null

setLogger

public static void setLogger(Logger logger, Level level)
Задаёт объект ведения журнала, используемый реализациями SyncProvider, предоставленными SPI SyncFactory. Все реализации SyncProvider могут записывать свои события в этот объект, а приложение может получить ссылку на него с помощью метода getLogger.
Параметры:
logger — экземпляр объекта Logger
level — экземпляр объекта Level, указывающий требуемый уровень ведения журнала
Выбрасывает:
NullPointerException — если средство ведения журнала имеет значение null

getLogger

public static Logger getLogger() throws SyncFactoryException
Возвращает объект ведения журнала, с помощью которого приложения могут получать события синхронизации, опубликованные реализациями SyncProvider.
Возвращает:
объект Logger, заданный для использования реализациями SyncProvider
Выбрасывает:
SyncFactoryException — если объект ведения журнала не задан.

setJNDIContext

public static void setJNDIContext(Context ctx) throws SyncFactoryException
Задаёт начальный контекст JNDI, из которого реализации SyncProvider могут извлекаться из пространства имён JNDI
Параметры:
ctx — допустимый контекст JNDI
Выбрасывает:
SyncFactoryException — если предоставленный контекст JNDI имеет значение null

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API