Spec-Zone .ru
спецификации, руководства, описания, API
|
Оглавление
Общие Объектные Службы (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 может быть получена из
Синтаксис имен приспосабливает
Следующие свойства среды JNDI важны для COS, называя поставщика услуг. См. документацию JNDI для описания того, как свойства инициализируются, используя свойства среды, системные свойства, параметры апплета, и файлы ресурсов.
java.naming.factory.initial
Это свойство используется, чтобы выбрать COS, называя поставщика услуг; это фактически не используется провайдером непосредственно. Это определяет имя class начальной фабрики контекста для провайдера.
Например:
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", как определено в
Если схема URL является или "iiop" или "iiopname", то узел и поля порта URL используются, чтобы инициализировать ШАР. "iiopname" URL должен соответствовать теперь устаревшей
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 class для деталей. 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
Разделенный от двоеточия список полностью определенных имен class классов фабрики состояния, используемых, чтобы получить состояние объекта для того, чтобы оно сохранило данный объект непосредственно. Можно использовать этот механизм, чтобы преобразовать объект в формы, которые могут быть сохранены в сервер имени COS. Сервер имени COS поддерживает хранение объекты CORBA.
Фабрика состояния, которая преобразовывает java.rmi.Remote в объект CORBA, предоставляется по умолчанию. Эта фабрика полезна для приложений тот
java.naming.factory.object
Разделенный от двоеточия список полностью определенных имен class объектных классов фабрики для того, чтобы преобразовать объект 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 используются, чтобы инициализировать ШАР.
Свойства, которые влияют, какой ШАР используется и как ШАР инициализируется:
java.naming.corba.orb
java.naming.applet
java.naming.provider.url
Если свойства, используемые в шагах (a), (b) и (c), не содержат релевантной информации для того, чтобы инициализировать ШАР, то значения по умолчанию реализации IDL Java используются. Обычно это означает порт 900 на локальном узле к приложению, и порт 900 на узле апплета к апплету используется. Отметьте, что, когда ШАР инициализируется, используя ORB.init(), его параметры проверяются в следующем порядке: (от org.omg.CORBA.ORB javadoc)
Корневой контекст именования инициализируется, или использование свойства 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");
Имена String
Имена String, принятые методами java.naming.Context, являются именами составного объекта JNDI, на которые каждый компонент является формой stringified CosNaming::NameComponent.
CosNaming::Name содержит последовательность CosNaming::NameComponent. Форма stringified компонента является связью идентификатора компонента, добрый символ разделителя ('. '), и вид компонента. Возникновение любых метасимволов ('. ',' / ', или' \'), или в идентификаторе или в виде оставляется, используя символ ESC (' \'). Форма stringified CosNaming::Name определяется в Разделе 3.5 из
Синтаксис имени составного объекта 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() поддерживает
Отметьте, что это правило не используется, когда Вы предоставляете "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
Сервер имени 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 этого контекстно-зависимого к корню Потому что Именование пространства имен.
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, чтобы развязать объект.
Этот раздел объясняет, как изменить Вашу программу IDL Java, чтобы использовать JNDI. Объяснение использует примеры программ IDL Java helloClient.java и helloServer.java.
# idltojava -fclient -fserver hello.idl
Это создает клиент (helloClient.java) и сервер (helloServer.java) скелеты, и каталог, содержащий общий код (например, HelloApp/*.java).
Удалите:
import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*;Добавьте:
import javax.naming.*;
Удалите:
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext ncRef = NamingContextHelper.narrow(objRef);
Добавьте:
Hashtable env = new Hashtable(5, 0.75f); env.put("java.naming.corba.orb", orb); Context ic = new InitialContext(env);
Удалите:
// resolve the Object Reference in Naming NameComponent nc = new NameComponent("Hello", ""); NameComponent path[] = {nc}; hello helloRef = helloHelper.narrow(ncRef.resolve(path));Добавьте:
// resolve the Object Reference using JNDI hello helloRef = helloHelper.narrow((org.omg.CORBA.Object)ic.lookup("Hello"));
Когда менеджер безопасности был установлен, следует предоставить приложению, используя JNDI и COS, называя поставщика услуг следующие полномочия:
permission java.net.SocketPermission "host[:port]", "connect";
Для каждого узла/порта, идентифицированного в свойстве java.naming.factory.initial, на названия строк URL, предоставленные методам контекста, в параметрах инициализации ШАРА и свойствах, и в ссылках на объект.