Интерфейс StateFactory
- Все известные подинтерфейсы:
DirStateFactory
public interface StateFactory
Фреймворк JNDI позволяет загружать реализации объектов динамически через объектные фабрики. Например, при поиске принтера, связанного в пространстве имён, если служба печати связывает имена принтеров с Reference, принтер Reference может быть использован для создания объекта принтера, так что вызывающий метод lookup может напрямую работать с объектом принтера после поиска.
ObjectFactory отвечает за создание объектов определённого типа. В приведённом выше примере вы можете иметь PrinterObjectFactory для создания Printer объектов.
Для обратного процесса, когда объект связывается в пространство имён, JNDI предоставляет фабрики состояния. Продолжая пример с принтером, предположим, что объект принтера обновлён и пересвязан:
ctx.rebind("inky", printer);
Поставщик услуг для ctx использует фабрику состояния для получения состояния printer для связывания в его пространстве имён. Фабрика состояния для объекта типа Printer может вернуть более компактный объект для хранения в системе имён. Фабрика состояния должна реализовывать интерфейс StateFactory. Кроме того, класс фабрики должен быть public и иметь public конструктор, не принимающий параметров. Обратите внимание, что в тех случаях, когда фабрика находится в именованном модуле, она должна находиться в пакете, который экспортируется этим модулем в модуль 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, 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/StateFactory.html