Интерфейс StateFactory
- Все известные подинтерфейсы:
DirStateFactory
public interface StateFactory
Фреймворк JNDI позволяет загружать реализации объектов динамически через фабрики объектов. Например, при поиске принтера, связанного в именованном пространстве, если служба печати связывает имена принтеров с Reference, то принтер Reference может быть использован для создания объекта принтера, так что вызывающий метод lookup может напрямую работать с объектом принтера после поиска.
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, если фабрика не возвращает никаких изменений.
- Исключения:
-
NamingException- если эта фабрика столкнулась с исключением при попытке получить состояние объекта, и другие фабрики не должны проверяться. - См. также:
© 1993, 2021, 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/17/docs/api/java.naming/javax/naming/spi/StateFactory.html