Spec-Zone .ru
спецификации, руководства, описания, API
|
public interface StateFactory
Платформа JNDI учитывает объектные реализации, которые будут загружены в динамически через объектные фабрики. Например, ища принтер, связанный в пространстве имен, если служба печати связывает имена принтера к Reference s, принтер, Reference мог бы использоваться, чтобы создать объект принтера, так, чтобы вызывающая сторона поиска могла непосредственно работать на объекте принтера после поиска.
ObjectFactory ответственен за создание объектов определенного типа. В вышеупомянутом примере у Вас может быть PrinterObjectFactory для того, чтобы создать объекты Printer.
Для обратного процесса, когда объект связывается в пространство имен, JNDI обеспечивает фабрики состояния. Продолжая с примером принтера, предположите, что объект принтера обновляется, и отскочите:
Поставщик услуг для ctx использует фабрику состояния, чтобы получить состояние printer для того, чтобы связать в его пространство имен. Фабрика состояния для объекта типа Printer могла бы возвратить более компактный объект для хранения в системе именования.ctx.rebind("inky", printer);
Фабрика состояния должна реализовать интерфейс StateFactory. Кроме того, класс фабрики должен быть общедоступным и должен иметь общедоступного конструктора, который не принимает параметров.
Метод getStateToBind() фабрики состояния может быть вызван многократно, возможно используя различные параметры. Реализация ориентирована на многопотоковое исполнение.
StateFactory предназначается для использования с поставщиками услуг, которые реализуют только интерфейс Context. DirStateFactory предназначается для использования с поставщиками услуг, которые реализуют интерфейс DirContext.
NamingManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
, DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
, ObjectFactory
, DirStateFactory
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(). Поиск других фабрик, которые могут произвести ненулевой ответ, останавливается. Фабрика должна только выдать исключение, если это уверено, что это - единственная намеченная фабрика и что никакие другие фабрики нельзя попробовать. Если эта фабрика не может создать объект, используя предоставленные параметры, она должна возвратить нуль.
name
и nameCtx
параметры могут дополнительно использоваться, чтобы определить имя создаваемого объекта. См. описание "Имени и Параметров Контекста" в ObjectFactory.getObjectInstance()
для деталей. Если фабрика использует nameCtx
это должно синхронизировать свое использование против параллельного доступа, так как реализации контекста, как гарантируют, не будут ориентированы на многопотоковое исполнение.
name и параметры environment принадлежат вызывающей стороне. Реализация не будет изменять эти объекты или сохранять ссылки на них, хотя она может сохранить ссылки на клонов или копии.
obj
- Ненулевой объект, состояние которого должно быть получено.name
- Имя этого объекта относительно nameCtx
, или нуль, если никакое имя не определяется.nameCtx
- Контекстно-зависимое то, к который name
параметр определяется, или нуль если name
относительно начального контекста по умолчанию.environment
- Возможно нулевая среда, которая будет использоваться в создании состояния объекта.NamingException
- если эту фабрику, с которой встречаются исключение, пытаясь получить состояние объекта, и никакие другие фабрики, нужно попробовать.NamingManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
, DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.