Интерфейс StateFactory
- Все известные подинтерфейсы:
DirStateFactory
public interface StateFactory
Среда JNDI позволяет динамически загружать реализации объектов с помощью фабрик объектов. Например, при поиске принтера, связанного в пространстве имён, если служба печати связывает имена принтеров с объектами Reference, для создания объекта принтера можно использовать Reference, чтобы вызывающий код мог напрямую работать с объектом принтера после поиска.
ObjectFactory отвечает за создание объектов определённого типа. В приведённом выше примере можно использовать PrinterObjectFactory для создания объектов Printer.
Для выполнения обратного процесса, когда объект связывается с пространством имён, JNDI предоставляет фабрики состояний. Продолжая пример с принтером, предположим, что объект принтера обновлён и связан повторно:
ctx.rebind("inky", printer);
Поставщик службы для ctx использует фабрику состояний, чтобы получить состояние printer для связывания с пространством имён. Фабрика состояний для объекта типа Printer может возвращать более компактный объект для хранения в системе именования. Фабрика состояний должна реализовывать интерфейс StateFactory. Кроме того, класс фабрики должен быть открытым и иметь открытый конструктор без параметров. Обратите внимание: если фабрика находится в именованном модуле, она должна находиться в пакете, экспортируемом этим модулем в модуль java.naming.
Метод getStateToBind() фабрики состояний может вызываться несколько раз, возможно, с разными параметрами. Реализация является потокобезопасной.
StateFactory предназначен для использования с поставщиками служб, реализующими только интерфейс Context. DirStateFactory предназначен для использования с поставщиками служб, реализующими интерфейс DirContext.
- С момента выпуска:
- 1.3
- См. также:
Краткое описание методов
Подробное описание методов
getStateToBind
Object getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws NamingException
NamingManager.getStateToBind() последовательно загружает фабрики состояний и вызывает для каждой из них этот метод, пока одна из фабрик не вернёт ненулевой результат. DirectoryManager.getStateToBind() последовательно загружает фабрики состояний. Если фабрика реализует DirStateFactory, то DirectoryManager вызывает DirStateFactory.getStateToBind(); в противном случае он вызывает StateFactory.getStateToBind().
Если фабрика выбрасывает исключение, оно передаётся вызывающему коду NamingManager.getStateToBind() и DirectoryManager.getStateToBind(). Поиск других фабрик, которые могли бы вернуть ненулевой результат, прекращается. Фабрика должна выбрасывать исключение, только если уверена, что она является единственной предполагаемой фабрикой и другие фабрики не следует проверять. Если эта фабрика не может создать объект с использованием переданных аргументов, она должна вернуть null.
Параметры name и nameCtx можно использовать, чтобы указать имя создаваемого объекта. Подробности см. в описании раздела «Параметры имени и контекста» в ObjectFactory.getObjectInstance(). Если фабрика использует nameCtx, ей следует синхронизировать доступ к нему, поскольку реализации контекста не гарантируют потокобезопасность.
Параметры name и environment принадлежат вызывающему коду. Реализация не будет изменять эти объекты или сохранять ссылки на них, хотя может сохранять ссылки на их клоны или копии.
- Параметры:
-
obj— ненулевой объект, состояние которого необходимо получить. -
name— имя этого объекта относительноnameCtxили null, если имя не указано. -
nameCtx— контекст, относительно которого указан параметрname, или null, еслиnameзадан относительно контекста начальной инициализации по умолчанию. -
environment— возможно, null-среда, используемая при создании состояния объекта. - Возвращает:
- Состояние объекта, предназначенное для связывания; null, если фабрика не возвращает никаких изменений.
- Выбрасывает:
-
NamingException— если при попытке получить состояние объекта эта фабрика столкнулась с исключением и другие фабрики не должны проверяться. - См. также:
© 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/StateFactory.html