Интерфейс ObjectFactory
- Все известные подинтерфейсы:
DirObjectFactory
public interface ObjectFactory
Фреймворк JNDI позволяет динамически загружать реализации объектов с помощью фабрик объектов. Например, при поиске принтера, связанного в пространстве имен, если служба печати связывает имена принтеров со ссылками, такую ссылку можно использовать для создания объекта принтера, чтобы после поиска вызывающий код мог напрямую работать с объектом принтера.
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 — это специальная ObjectFactory, создающая контексты для разрешения 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. Например, предположим, что это фабрика контекстов 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 и Context. Параметры 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://docs.oracle.com/en/java/javase/25/docs/api/java.naming/javax/naming/spi/ObjectFactory.html