Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

COS Называя Поставщика услуг для
Именование Java и Интерфейс Каталога (JNDI)

Оглавление


Введение

Общие Объектные Службы (COS) Сервер Имени являются сервером имени для того, чтобы сохранить Общую Архитектуру Посредника запросов к объектам (CORBA) ссылки на объект. К этому можно получить доступ из приложений CORBA при использовании пакета Именования COS (org.omg. CORBA.CosNaming).

JNDI/COS, называющий поставщика услуг, реализует интерфейс javax.naming.Context сверху пакета Именования COS, чтобы позволить приложениям использовать JNDI, чтобы получить доступ к Серверу Имени COS. JNDI может также использоваться, чтобы получить доступ к другому именованию и службам каталогов, в дополнение к Серверу Имени COS, таким образом предлагая приложение CORBA один интерфейс для того, чтобы получить доступ к различному именованию и службам каталогов.

Этот документ описывает функции COS, называя поставщика услуг и содержит детали того, как JNDI отображается на пакет именования COS.


Соответствие

COS, называя поставщика услуг для JNDI использует IDL JavaTM, язык программирования Java, отображающийся на Язык определения интерфейсов Группы по управлению объектами промышленного стандарта (IDL OMG). В частности это использует Службу Именования COS.

Полная спецификация для Именования COS может быть получена из OMG.

Синтаксис имен приспосабливает Взаимодействующей Службе Именования (INS) спецификации (99-12-03), с поддержкой обратной совместимости предыдущей версии INS, Документ TC OMG orbos/98-10-11. Это описывается на Имена и URL.


Свойства среды

Следующие свойства среды JNDI важны для COS, называя поставщика услуг. См. документацию JNDI для описания того, как свойства инициализируются, используя свойства среды, системные свойства, параметры апплета, и файлы ресурсов.

java.naming.factory.initial

Это свойство используется, чтобы выбрать COS, называя поставщика услуг; это фактически не используется провайдером непосредственно. Это определяет имя класса начальной фабрики контекста для провайдера.

Например:

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory");

Это свойство должно быть установлено, если Вы используете службу именования COS в качестве начального контекста. Единственное исключение - то, если Вы предоставляете только URL к начальному контексту, когда, Вы не должны определить это свойство. См. Имена и URL для деталей.

java.naming.provider.url

Это свойство используется, чтобы сконфигурировать корневой контекст именования и/или Посредника запросов к объектам (ШАР). Его значение является строковым представлением URL.

Если это свойство не определяется, то ШАР инициализируется, используя свойство java.naming.corba.orb, свойство java.naming.applet, или другие свойства инициализации ШАРА. Корневой контекст именования получается, вызывая

orb.resolve_initial_references("NameService");

Если схема URL является одним из "IOR", "corbaname", или "corbaloc", как определено в спецификации (99-12-03) INS, то корневой контекст именования то, что назван URL. ШАР инициализируется, используя свойство java.naming.corba.orb, свойство java.naming.applet, или другие свойства инициализации ШАРА.

Если схема URL является или "iiop" или "iiopname", то узел и поля порта URL используются, чтобы инициализировать ШАР. "iiopname" URL должен соответствовать теперь устаревшей спецификации (98-10-11) INS. У этого есть форма:

iiopname://[<addr_list>][/<cosnaming_name>]

"iiop" схема URL поддерживается для обратной совместимости с более старой версией спецификации INS. У этого есть форма:

iiop://[<host>[:<port>]][/<cosnaming_name>]

И для "iiop" и для "iiopname" URL, если <host> не определяется, то это принимает значение по умолчанию к "localhost" для приложения и узлу апплета к апплету. Если <port> не определяется, то он принимает значение по умолчанию к 9999 для "iiopname", и 900 для "iiop". Корневой контекст именования получается, вызывая следующий метод на ШАРЕ:

orb.resolve_initial_references("NameService");

Если <cosnaming_name> непуст, то корневой контекст именования является контекстом именования, названным cosnaming_name.

Если схема URL не является одним из "iiop", "iiopname", "IOR", "corbaname", или "corbaloc", то URL должен назвать расположение, которое содержит stringified IOR корневого контекста именования. Например, если свойство содержит "file:/nsdir/ior", то файл /nsdir/ior должен содержать stringified IOR. Схема URL может быть любым, для которого есть соответствующий обработчик протокола URL (java.net.URLStreamHandler). См. класс java.net.URL для деталей. stringified IOR читается из потока данных, соответствующего URL при использовании кодировки символов латыни ISO 1. stringified IOR является первой строкой в потоке, который содержит префиксный "IOR:". Например, если схема URL является "http", то заголовки в потоке пропускаются и первая строка, которая содержит префиксный "IOR:" возвращается как IOR.

Когда свойство определяет stringified IOR или расположение одного, корневой контекст именования то, что назван stringified IOR. ШАР Инициализируется, используя свойство java.naming.corba.orb, свойство java.naming.applet, или другие свойства инициализации ШАРА.

java.naming.corba.orb

Это свойство определяет ШАР, который использует программа. Когда COS JNDI, называя поставщика услуг должен будет использовать ШАР, например, чтобы искать начальную ссылку "NameService" или повернуть stringified IOR в ссылку на объект, это будет использовать этот ШАР.

В приложении можно установить это свойство следующим образом:

ORB orb = ORB.init(args, null);
Hashtable env = new Hashtable(5, 0.75f);
env.put("java.naming.corba.orb", orb);
...
    
В апплете можно установить это следующим образом:
public class MyApplet extends Applet {

    public someInitMethod() {
        ORB orb = ORB.init(this, null);
        Hashtable env = new Hashtable(5, 0.75f);
        env.put("java.naming.corba.orb", orb);
        ...
    }
...
}
    

Если это свойство не устанавливается, то свойство java.naming.provider.url, свойство java.naming.applet, или свойства инициализации ШАРА используются, чтобы инициализировать ШАР.

java.naming.applet

Это свойство определяет апплет, который использует программа. Это используется, чтобы инициализировать ШАР, который будет использоваться COS, называя поставщика услуг. Его параметры используются для свойств установки JNDI-related; см. документацию JNDI для деталей.

public class MyApplet extends Applet {

    public someInitMethod() {
        Hashtable env = new Hashtable(5, 0.75f);
        env.put("java.naming.applet", this);
        ...
    }
...
}
    
java.naming.factory.state

Разделенный от двоеточия список полностью определенных имен классов классов фабрики состояния, используемых, чтобы получить состояние объекта для того, чтобы оно сохранило данный объект непосредственно. Можно использовать этот механизм, чтобы преобразовать объект в формы, которые могут быть сохранены в сервер имени COS. Сервер имени COS поддерживает хранение объекты CORBA.

Фабрика состояния, которая преобразовывает java.rmi.Remote в объект CORBA, предоставляется по умолчанию. Эта фабрика полезна для приложений тот IIOP RMI использования. Можно предоставить другие фабрики, чтобы влиять на преобразование других объектов в объекты CORBA для того, чтобы сохранить. См. javax.naming.spi.NamingManager.getStateToBind() для деталей.

java.naming.factory.object

Разделенный от двоеточия список полностью определенных имен классов объектных классов фабрики для того, чтобы преобразовать объект CORBA. Можно использовать этот механизм, чтобы преобразовать объект в формы, ожидаемые приложением. Например, специализированная объектная фабрика могла сделать соответствующее сужение, чтобы возвратить объект ожидаемого типа. См. javax.naming.spi.NamingManager.getObjectInstance() для деталей.

java.naming.batchsize

Определяет пакетный размер, чтобы использовать в CosNaming::BindingIterator.next_n, получая результаты list()/listBindings(). Значение по умолчанию "100". Например, следующие наборы пакетный размер, чтобы быть 24.

    
env.put(Context.BATCHSIZE, "24");
Свойства инициализации ШАРА

Можно определить CORBA связанные свойства, такие как те с "org.omg.CORBA." снабдите префиксом как свойства. Свойства типа String используются, чтобы инициализировать ШАР.


Инициализация ШАРА

Свойства, которые влияют, какой ШАР используется и как ШАР инициализируется:

Следующий алгоритм используется, чтобы определить, какой ШАР используется:
  1. Если java.naming.corba.orb был установлен, то его значение (ШАР) используется.
  2. Иначе, провайдер будет внутренне инициализировать и использовать ШАР следующим образом:
    a) Любые свойства org.omg.CORBA.* и свойства типа String извлекаются и используются в качестве части параметра Properties методу ORB.init(). Можно использовать этот механизм, чтобы определить, например, реализацию ШАРА или узел использования.
    b) Если java.naming.provider.url был установлен, и он содержит URL схемы "iiop" или "iiopname", то узел и номер порта, определенный в URL, используются в качестве части параметра Properties методу ORB.init(), переопределяя любые свойства org.omg.CORBA.ORBInitialHost И org.omg.CORBA.ORBInitialPort, установленные в (a).
    c) Экземпляр Properties, созданный в (a) и (b), передают к ORB.init() наряду с экземпляром Applet в свойстве java.naming.applet, или пустому String[], если java.naming.applet не был предоставлен.

Если свойства, используемые в шагах (a), (b) и (c), не содержат релевантной информации для того, чтобы инициализировать ШАР, то значения по умолчанию реализации IDL Java используются. Обычно это означает порт 900 на локальном узле к приложению, и порт 900 на узле апплета к апплету используется. Отметьте, что, когда ШАР инициализируется, используя ORB.init(), его параметры проверяются в следующем порядке: (от org.omg.CORBA.ORB javadoc)

  1. Регистрация параметра Applet или приложения представляет массив в виде строки, если любой
  2. Регистрация параметра свойств, если любой
  3. Зарегистрируйтесь в свойствах System (в настоящий момент приложения только)
  4. Возвратитесь к hardcoded поведению по умолчанию (используйте реализацию IDL Java),

Корневая Инициализация Контекста именования

Корневой контекст именования инициализируется, или использование свойства java.naming.provider.url или resolve_initial_references() обращается к ШАРУ. Если свойство java.naming.provider.url устанавливается, но не содержит ни одного "iiop" или "iiopname" URL, то это, как предполагается, содержит stringified IOR, "corbaname" или "corbaloc" URL IOR, или URL, содержащий расположение stringified IOR. IOR используется, чтобы получить корневой контекст именования и должен быть IOR объекта CORBA типа CosNaming::NamingContext.

Если java.naming.provider.url не был установлен, то корневой контекст именования получается, вызывая следующий метод на ШАРЕ:

        orb.resolve_initial_references("NameService");

Имена и URL

Имена String

Имена String, принятые методами java.naming.Context, являются именами составного объекта JNDI, на которые каждый компонент является формой stringified CosNaming::NameComponent.

CosNaming::Name содержит последовательность CosNaming::NameComponent. Форма stringified компонента является связью идентификатора компонента, добрый символ разделителя ('. '), и вид компонента. Возникновение любых метасимволов ('. ',' / ', или' \'), или в идентификаторе или в виде оставляется, используя символ ESC (' \'). Форма stringified CosNaming::Name определяется в Разделе 3.5 из спецификации (99-12-03) INS.

Синтаксис имени составного объекта JNDI очень подобен, но не идентичен, синтаксис INS. Есть незначительные различия относительно обработки символов ESC и символов кавычек. Если Вы хотите использовать имена с точным синтаксисом INS, то следует использовать перегрузки, которые принимают параметр Name вместо параметра String. Параметром Name должно быть значение, возвращенное nameParser.parse(), где nameParser является значением, полученным из COS, называя поставщика услуг. См., что Имя Анализирует раздел.

Названия строк URL

Форма URL CosNaming::Name определяется в спецификации INS.

corbaname:<corbaloc_obj>["#" <cosnaming_name>]

где <corbaloc_obj>

<corbaloc_obj> = <obj_addr_list> ["/" <key_string>]

и <obj_addr_list> является списком адресов как определено в "corbaloc" URL, и <key_string> является ключевой строкой как определено в "corbaloc" URL. <cosnaming_name> является формой stringified имени INS (см., что Имя Анализирует).

Для обратной совместимости с более старыми версиями INS также поддерживаются следующие схемы URL.

iiopname://[<addr_list>][/<cosnaming_name>]

где <addr_list> определяет список пар узла/порта. Если <port> не определяется, то он принимает значение по умолчанию к 9999. <cosnaming_name> является формой stringified имени INS.

iiop://<host>[:<port>][/<cosnaming_name>]

Если <port> не предоставляется, то он принимает значение по умолчанию к 900. <cosnaming_name> является формой stringified имени INS.

Когда Вы предоставляете "iiop" или "iiopname" URL к начальному контексту таким образом, ШАР, предоставленный начальному контексту, используется, если его метод string_to_object() поддерживает 03.12.99 спецификации INS. Иначе, ШАР игнорируется и сервер, и обозначения порта в URL используются, чтобы создать ШАР. Значение свойства java.naming.factory.initial игнорируется в целях разрешить URL.

Отметьте, что это правило не используется, когда Вы предоставляете "corbaname" URL к начальному контексту. Для "corbaname" URL используется ШАР, предоставленный начальному контексту, потому что ШАР необходим, чтобы разрешить "corbaname" URL. Объекты имени

Параметр Name методу Context обрабатывается как последовательность строк, каждый представляющий stringified CosNaming::NameComponent.

Парсинг имени

COS, называя поставщика услуг поддерживает имена в синтаксисе, определенном в спецификации INS. Короче говоря, синтаксис - то, что компоненты являются слева направо наклонной чертой (' / ') разделенный и чувствительный к регистру. Идентификатор и вид каждого компонента разделяются символом точки ('. ').

Вот фрагмент кода, который использует синтаксический анализатор имени от COS, называя поставщика услуг, чтобы в конечном счете сделать поиск, используя имя INS.

String insName = ...;
InitialContext ctx = new InitialContext(env);   // env contains init properties
NameParser parser = ctx.getNameParser("");      // parser for INS names
Name name = parser.parse(insName);              // get parsed INS name
Object obj = ctx.lookup(name);                  // do lookup

Отображение API

Сервер имени COS поддерживает только операции именования. COS, называя поставщика услуг отображает методы javax.naming.Context, чтобы использовать соответствующие вызовы Именования COS.

addToEnvironment()

Записи изменяются на свойство среды, но не повторно инициализирует ШАР.

bind()

Связывает объект с указанным именем.

Если связываемым объектом является org.omg.CosNaming.NamingContext, то CosNaming::NamingContext.bind_context используется. Если это - org.omg.CORBA.Object, то CosNaming::NamingContext.bind используется. Привязка любого другого типа объекта не поддерживается, если объект не может быть преобразован в org.omg.CORBA.Object, используя механизм фабрики состояния, описанный затем.

Прежде, чем связывание выполняется на сервере именования, COS, называя поставщика услуг использует javax.naming.spi.NamingManager.getStateToBind(), чтобы позволить объекту быть преобразованным в org.omg.CORBA.Object. Метод getStateToBind() использует фабрики состояния, доступные COS, называя поставщика услуг. Если фабрика состояния принимает объект java.rmi.Remote, то это ответственно за получение тупика IIOP RMI объекта и соединение этого с ШАРОМ, связанным с контекстом. Соединенный тупик является объектом, который будет связан в сервере именования.

По умолчанию COS, называя поставщика услуг предоставляет и использует фабрику состояния, которая преобразовывает объект, реализовывая интерфейс java.rmi.Remote к org.omg.CORBA.Object после требований, описанных выше. Эта фабрика использует утилиты в пакете javax.rmi.CORBA. Можно предоставить дополнительные фабрики состояния, чтобы преобразовать объекты в объекты CORBA.

close()

Выпуски любые внутренние структуры данных используются.

composeName()

Связывает предоставленное имя к префиксу.

createSubcontext()

Использование CosNaming::NamingContext.bind_new_context, чтобы создать и ограничить новый контекст.

destroySubcontext()

Использование CosNaming::NamingContext.destroy, чтобы уничтожить именованный контекст. Затем использование CosNaming::NamingContext.unbind, чтобы удалить привязку.

getEnvironment()

Возвращает среду этого контекста.

getNameInNamespace()

Возвращает имя INS этого контекстно-зависимого к корню пространства имен Cos Naming.

getNameParser()

Возвращает синтаксический анализатор имени для того, чтобы проанализировать имена INS.

lookup()
lookupLink()

Использование CosNaming::NamingContext.resolve к поиску имя. Это возвращает ссылку на объект CORBA кроме тех случаев, когда ссылка является ссылкой CosNaming::NamingContext, когда объект Context возвращается вместо этого. NamingManager.getObjectInstance() вызывают прежде, чем объект возвращается в случае, если приложение или пользователь предоставили объектные фабрики.

list()
listBindings()

Использование CosNaming::NamingContext.resolve, чтобы получить ссылку на объект для контекста, и затем использует CosNaming::BindingIterator и классы помощника, чтобы выполнить итерации через контекст. Объекты, связанные с именами, получаются, вызывая CosNaming::NamingContext.resolve на них. NamingManager.getObjectInstance() вызывают прежде, чем объект возвращается в случае, если приложение или пользователь предоставили объектные фабрики.

removeFromEnvironment()

Удаляет указанное свойство из среды, но иначе не обновляет контекст.

rebind()

Если связываемым объектом является org.omg.CosNaming.NamingContext, то CosNaming::NamingContext.rebind_context используется. Если это - org.omg.CORBA.Object, то CosNaming::NamingContext.rebind используется. См. bind() для деталей об использовании фабрик состояния, чтобы преобразовать параметр в org.omg.CORBA.Object.

rename()

Этот метод реализуется, используя bind(), сопровождаемый unbind(). Это не является атомарным.

unbind()

Использование CosNaming::NamingContext.unbind, чтобы развязать объект.


Преобразование Программ CORBA, чтобы использовать JNDI

Этот раздел объясняет, как изменить Вашу программу IDL Java, чтобы использовать JNDI. Объяснение использует примеры программ IDL Java helloClient.java и helloServer.java.

  1. Генерируйте тупики от файла IDL.
    # idltojava -fclient -fserver hello.idl
    

    Это создает клиент (helloClient.java) и сервер (helloServer.java) скелеты, и каталог, содержащий общий код (например, HelloApp/*.java).

  2. Заполните код для программ клиента и сервера.
  3. Измените (или скопируйте файлы клиента и сервера) использовать JNDI вместо COS, Называющего непосредственно.

Соображения безопасности

Когда менеджер безопасности был установлен, следует предоставить приложению, используя JNDI и COS, называя поставщика услуг следующие полномочия:

permission java.net.SocketPermission "host[:port]", "connect";

Для каждого узла/порта, идентифицированного в свойстве java.naming.factory.initial, на названия строк URL, предоставленные методам контекста, в параметрах инициализации ШАРА и свойствах, и в ссылках на объект.


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами