Интерфейс ObjectFactory
- Все известные подинтерфейсы:
DirObjectFactory
public interface ObjectFactory
Фреймворк JNDI позволяет динамически загружать реализации объектов через объектные фабрики. Например, при поиске принтера, связанного в пространстве имен, если служба печати связывает имена принтеров с ссылками, ссылка на принтер может использоваться для создания объекта принтера, чтобы вызывающий метод lookup мог напрямую работать с объектом принтера после поиска.
ObjectFactory отвечает за создание объектов определенного типа. В приведенном выше примере может быть PrinterObjectFactory для создания объектов Printer.
Объектная фабрика должна реализовывать интерфейс ObjectFactory. Кроме того, класс фабрики должен быть публичным и должен иметь публичный конструктор без параметров. Обратите внимание, что в случаях, когда фабрика находится в именованном модуле, она должна находиться в пакете, который экспортируется этим модулем в модуль java.naming.
Метод getObjectInstance() объектной фабрики может вызываться несколько раз, возможно, с использованием различных параметров. Реализация потокобезопасна.
Упоминание о URL в документации для этого класса относится к строке URL, как определено в RFC 1738 и связанных RFC. Это любая строка, которая соответствует синтаксису, описанному в них, и она может не всегда иметь соответствующую поддержку в классе java.net.URL или веб-браузерах.
- С:
- 1.3
- См. также:
Краткое описание методов
Подробное описание методов
getObjectInstance
Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws Exception
Специальные требования к этому объекту предоставляются с помощью environment. Примером такой переменной окружения является информация об идентификации пользователя.
NamingManager.getObjectInstance() последовательно загружает объектные фабрики и вызывает этот метод на них, пока одна не вернёт ненулевое значение. Когда объект фабрики выбрасывает исключение, исключение передаётся вызывающему методу NamingManager.getObjectInstance() (и поиск других фабрик, которые могут вернуть ненулевое значение, не производится). Объектная фабрика должна выбрасывать исключение только в том случае, если она уверена, что она единственная целевая фабрика и что другие объектные фабрики не должны пробоваться. Если эта фабрика не может создать объект с использованием предоставленных аргументов, она должна вернуть null.
Фабрика контекста URL — это специальная объектная фабрика, которая создает контексты для разрешения URL-адресов или объектов, местоположения которых указаны URL-адресами. Метод getObjectInstance() фабрики контекста URL будет подчиняться следующим правилам.
- Если
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". - Если
obj— строка URL, создайте объект (обычно контекст), идентифицированный по URL-адресу. Например, предположим, что это фабрика контекста LDAP. Еслиobjравно "ldap://ldap.wiz.com/o=wiz,c=us", getObjectInstance() вернёт контекст, именованный по отличительному имени "o=wiz, c=us" на сервере LDAP ldap.wiz.com. Этот контекст затем может использоваться для разрешения имён LDAP (таких как "cn=George") относительно этого контекста. - Если
obj— массив строк URL, предполагается, что URL-адреса эквивалентны с точки зрения контекста, к которому они относятся. Проверка того, эквивалентны ли URL-адреса или необходимо их эквивалентировать, зависит от фабрики контекста. Порядок URL-адресов в массиве не имеет значения. Объект, возвращаемый getObjectInstance(), похож на случай с одним URL-адресом. Это объект, именованный URL-адресами. - Если
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- если эта фабрика объектов столкнулась с исключением во время попытки создать объект, и другие фабрики объектов не должны быть опробованы. - См. также:
© 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://download.java.net/java/early_access/jdk24/docs/api/java.naming/javax/naming/spi/ObjectFactory.html