Spec-Zone.ru › OpenJDK 21

Интерфейс 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() последовательно загружает фабрики объектов и вызывает этот метод на них, пока одна из них не вернёт не-null значение. Когда исключение выбрасывается фабрикой объектов, исключение передаётся вызывающему методу NamingManager.getObjectInstance() (и поиск других фабрик, которые могут вернуть не-null значение, не проводится). Фабрика объектов должна выбрасывать исключение только в том случае, если она уверена, что это единственная целевая фабрика и что другие фабрики объектов не должны использоваться. Если эта фабрика не может создать объект, используя предоставленные аргументы, она должна вернуть null.

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

  1. Если obj равно null, создать контекст для разрешения URL-адресов со схемой, связанной с этой фабрикой. Результирующий контекст не привязан к конкретному URL-адресу: он может обрабатывать произвольные URL-адреса с идентификатором схемы этой фабрики. Например, вызов getObjectInstance() с obj, установленным в null, для фабрики контекста LDAP URL вернёт контекст, который может разрешать URL-адреса LDAP, такие как "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, 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.naming/javax/naming/spi/ObjectFactory.html

Spec-Zone.ru

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