Интерфейс ObjectFactory

Все известные подинтерфейсы:
DirObjectFactory
public interface ObjectFactory

Этот интерфейс представляет собой фабрику для создания объекта.

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

Объектная фабрика отвечает за создание объектов определенного типа. В приведенном выше примере у вас может быть 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 вернёт контекст, который может разрешать 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 — Возможно нулевой объект, содержащий информацию о местоположении или ссылке, которая может быть использована для создания объекта.
name — Имя этого объекта относительно nameCtx, или null, если имя не указано.
nameCtx — Контекст, относительно которого задаётся параметр name, или null, если name относится к контексту по умолчанию.
environment — Возможно нулевой объект среды, используемый при создании объекта.
Возвращает:
Созданный объект; 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, 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.naming/javax/naming/spi/ObjectFactory.html

Spec-Zone .ru
спецификации, руководства, описания, API