Spec-Zone.ru › OpenJDK 25

Интерфейс ObjectFactory

Все известные подинтерфейсы:
DirObjectFactory
public interface ObjectFactory
Этот интерфейс представляет фабрику для создания объектов.

Фреймворк JNDI позволяет динамически загружать реализации объектов с помощью фабрик объектов. Например, при поиске принтера, связанного в пространстве имен, если служба печати связывает имена принтеров со ссылками, такую ссылку можно использовать для создания объекта принтера, чтобы после поиска вызывающий код мог напрямую работать с объектом принтера.

ObjectFactory отвечает за создание объектов определенного типа. В приведенном выше примере можно использовать PrinterObjectFactory для создания объектов Printer.

Фабрика объектов должна реализовывать интерфейс ObjectFactory. Кроме того, класс фабрики должен быть общедоступным и иметь общедоступный конструктор без параметров. Обратите внимание: если фабрика находится в именованном модуле, она должна находиться в пакете, экспортируемом этим модулем в модуль java.naming.

Метод getObjectInstance() фабрики объектов может вызываться несколько раз, возможно, с разными параметрами. Реализация является потокобезопасной.

Упоминание URL в документации к этому классу относится к строке URL, определенной в RFC 1738 и связанных с ним RFC. Это любая строка, соответствующая описанному в них синтаксису; при этом класс java.net.URL или веб-браузеры могут не всегда поддерживать такую строку.

Начиная с:
1.3
См. также:
  • NamingManager.getObjectInstance(Object, Name, Context, Hashtable)
  • NamingManager.getURLContext(String, Hashtable)
  • ObjectFactoryBuilder
  • StateFactory

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

Модификатор и тип Метод Описание
Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment)
Создает объект, используя указанные сведения о расположении или ссылке.

Подробное описание методов

getObjectInstance

Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws Exception
Создает объект, используя указанные сведения о расположении или ссылке.

Особые требования к этому объекту передаются с помощью environment. Примером такого свойства среды являются сведения об идентификаторе пользователя.

NamingManager.getObjectInstance() последовательно загружает фабрики объектов и вызывает у них этот метод, пока одна из них не вернет ненулевой результат. Если фабрика объектов выбрасывает исключение, оно передается вызывающему коду NamingManager.getObjectInstance() (поиск других фабрик, которые могли бы вернуть ненулевой результат, не выполняется). Фабрика объектов должна выбрасывать исключение, только если уверена, что именно она предназначена для этой задачи и другие фабрики объектов не должны проверяться. Если фабрика не может создать объект с переданными аргументами, она должна вернуть null.

Фабрика контекстов URL — это специальная ObjectFactory, создающая контексты для разрешения URL или объектов, расположение которых задано URL. Метод getObjectInstance() фабрики контекстов URL должен соблюдать следующие правила.

  1. Если obj равно null, создается контекст для разрешения URL схемы, связанной с этой фабрикой. Полученный контекст не привязан к конкретному URL: он может обрабатывать произвольные URL с идентификатором схемы этой фабрики. Например, вызов getObjectInstance() со значением obj, равным null, у фабрики контекстов URL LDAP вернет контекст, который может разрешать URL LDAP, такие как "ldap://ldap.wiz.com/o=wiz,c=us" и "ldap://ldap.umich.edu/o=umich,c=us".
  2. Если obj — это строка URL, создается объект (обычно контекст), указанный в URL. Например, предположим, что это фабрика контекстов URL LDAP. Если obj равно "ldap://ldap.wiz.com/o=wiz,c=us", getObjectInstance() вернет контекст, обозначенный отличительным именем "o=wiz, c=us" на LDAP-сервере ldap.wiz.com. Затем этот контекст можно использовать для разрешения имен LDAP (например, "cn=George") относительно этого контекста.
  3. Если obj — это массив строк URL, предполагается, что URL эквивалентны с точки зрения контекста, на который они ссылаются. Проверку эквивалентности URL или необходимость такой проверки определяет фабрика контекстов. Порядок URL в массиве не имеет значения. Объект, возвращаемый getObjectInstance(), аналогичен объекту в случае с одним URL. Это объект, указанный URL.
  4. Если obj имеет любой другой тип, поведение getObjectInstance() определяется реализацией фабрики контекстов.

Параметры name и environment принадлежат вызывающему коду. Реализация не будет изменять эти объекты или сохранять ссылки на них, хотя может сохранять ссылки на их клоны или копии.

Параметры Name и Context. Параметры name и nameCtx можно использовать для указания имени создаваемого объекта. name — это имя объекта относительно контекста nameCtx. Если существует несколько контекстов, относительно которых можно указать имя объекта (что часто бывает), выбрать один из них должен вызывающий код. Как правило, следует выбирать наиболее «глубокий» из доступных контекстов. Если nameCtx равно null, name является относительным к исходному контексту по умолчанию. Если имя не указано, параметр name должен иметь значение null. Если фабрика использует nameCtx, она должна синхронизировать его использование для защиты от конкурентного доступа, поскольку потокобезопасность реализаций контекстов не гарантируется.

Параметры:
obj — возможно, null; объект, содержащий сведения о расположении или ссылке, которые можно использовать при создании объекта.
name — имя этого объекта относительно nameCtx или null, если имя не указано.
nameCtx — контекст, относительно которого указан параметр name, или null, если name является относительным к исходному контексту по умолчанию.
environment — возможно, null; среда, используемая при создании объекта.
Возвращает:
Созданный объект; null, если объект невозможно создать.
Выбрасывает:
Exception — если эта фабрика объектов столкнулась с исключением при попытке создать объект и другие фабрики объектов не должны проверяться.
См. также:
  • NamingManager.getObjectInstance(Object, Name, Context, Hashtable)
  • NamingManager.getURLContext(String, Hashtable)

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.naming/javax/naming/spi/ObjectFactory.html

Spec-Zone.ru

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