Spec-Zone.ru › OpenJDK 17

Интерфейс ObjectFactory

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

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

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

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

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

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

С:
1.3
См. также:
  • NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
  • NamingManager.getURLContext(java.lang.String, java.util.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, на фабрике контекста LDAP URL вернёт контекст, который может разрешить LDAP URL-адреса, такие как "ldap://ldap.wiz.com/o=wiz,c=us" и "ldap://ldap.umich.edu/o=umich,c=us".
  2. Если obj — это строка URL, создаётся объект (обычно контекст), идентифицированный URL-адресом. Например, предположим, что это фабрика контекста LDAP URL. Если 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 и nameCtx могут быть использованы для указания имени создаваемого объекта. name — это имя объекта, относительно контекста nameCtx. Если есть несколько возможных контекстов, из которых объект можно назвать (что часто бывает), выбор одного зависит от вызывающего метода. Хорошее правило — выбрать «наиболее глубокий» доступный контекст. Если nameCtx равно null, name относится к контексту по умолчанию. Если имя не задано, параметр name должен быть null. Если фабрика использует nameCtx, она должна синхронизировать своё использование с учётом одновременного доступа, так как реализации контекста не гарантируют потокобезопасность.

Параметры:
obj - Возможный null объект, содержащий информацию о местоположении или ссылке, которая может быть использована при создании объекта.
name - Имя этого объекта относительно nameCtx, или null, если имя не указано.
nameCtx - Контекст, относительно которого указан параметр name, или null, если name относится к контексту по умолчанию.
environment - Возможный null среда, используемая при создании объекта.
Возвращает:
Созданный объект; null, если объект не может быть создан.
Выбрасывает:
Exception - если эта объектная фабрика столкнулась с исключением во время попытки создать объект, и другие объектные фабрики не должны проверяться.
См. также:
  • NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
  • NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)

© 1993, 2021, 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/17/docs/api/java.naming/javax/naming/spi/ObjectFactory.html

Spec-Zone.ru

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