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

IDL Java: Переходная Служба Именования - tnameserv

Этот документ обсуждает использование Переходного процесса IDL Java Именование Службы, tnameserv. IDL Java также включает Демона Посредника запросов к объектам (ORBD). ORBD является процессом демона, содержащим Службу Начальной загрузки, Переходную Службу Именования, Персистентную Службу Именования, и Диспетчер серверов. Учебные руководства по IDL Java все использование ORBD, однако, можно заменить tnameserv orbd в любом из примеров, которые используют Переходную Службу Именования. Для документации относительно инструмента orbd соединитесь с его страницей справочника или Службой Именования IDL Java, Включенной с темой ORBD.

Темы в этом разделе включают:

 Переходный процесс IDL Java Именование Службы

COS CORBA (Общие Объектные Службы) Именование Службы обеспечивает, древовидный каталог для ссылок на объект очень как файловая система обеспечивает структуру каталогов для файлов. Переходная Услуга Именования, предоставленная с IDL Java, tnameserv, является простой реализацией спецификации Службы Именования COS.

Ссылки на объект сохранены в пространстве имен по имени, и каждую пару имени ссылки на объект вызывают привязкой имени. Привязка имени может быть организована под контекстами именования. Контексты именования являются самостоятельно привязкой имени и служат той же самой организационной функции в качестве подкаталога файловой системы. Вся привязка сохранена под начальным контекстом именования. Начальный контекст именования является единственной персистентной привязкой в пространстве имен; остальная часть пространства имен теряется если остановы процесса службы именования IDL Java и перезапуски.

Для апплета или приложения, чтобы использовать именование COS, его ШАР должен знать порт узла, выполняющего службу именования, или иметь доступ к stringified начальному контексту именования для той службы именования. Служба именования может или быть службой именования IDL Java или другой совместимой COS службой именования.

Запуск Переходного процесса IDL Java Именование Службы

Следует запустить службу именования IDL Java перед приложением или апплетом, который использует его службу именования. Установка продукта IDL Java создает сценарий (Солярис: tnameserv) или исполняемый файл (Windows NT: tnameserv.exe), который запускает службу именования IDL Java. Запустите службу именования, таким образом, она работает в фоновом режиме.

Если Вы не определяете иначе, служба именования IDL Java слушает на порту 900 для протокола начальной загрузки, используемого, чтобы реализовать методы ORB resolve_initial_references() И list_initial_references(), следующим образом:

        tnameserv -ORBInitialPort nameserverport&

Если Вы не определяете порт сервера имени, порт 900 используется по умолчанию. Когда рабочее программное обеспечение Соляриса, следует стать корнем, чтобы запустить процесс на порту под 1024. Поэтому мы рекомендуем, чтобы Вы использовали номер порта, больше чем или равный 1024. Чтобы определить различный порт, например, 1050, и выполнить службу именования в фоновом режиме, от командного процессора UNIX, войдите:

        tnameserv -ORBInitialPort 1050&

От системного приглашения MS-DOS (Windows) войдите:

        start tnameserv -ORBInitialPort 1050

Клиенты сервера имени должны быть сделаны знающий о новом номере порта. Сделайте это, устанавливая свойство org.omg.CORBA.ORBInitialPort в новый номер порта, создавая объект ШАРА.

Выполнение сервера и клиента на различных узлах

В большей части IDL Java и учебных руководств IIOP RMI, Служба Именования, Сервер, и Клиент все работают на машине разработки. В развертывании реального мира вероятно, что клиент и сервер будет работать на различных хост-машинах чем Служба Именования.

Для клиента и сервера, чтобы найти Службу Именования, они должны быть сделаны знающий о номере порта и узле, на котором работает служба именования. Сделайте это, устанавливая свойства org.omg.CORBA.ORBInitialPort И org.omg.CORBA.ORBInitialHost в файлах клиента и сервера к машинному имени и номеру порта, на котором работает Служба Именования. Пример этого показывают в Привет Мировом Примере Используя IIOP RMI. Вы могли также использовать параметры командной строки -ORBInitialPort nameserverport# и -ORBInitialHost nameserverhostname, чтобы сказать клиент и сервер, где найти Службу Именования. IDL Java: Выполнение Привет Мирового Примера на ДВУХ Машинах показывает один способ сделать это использование параметра командной строки.

Например, предположите Переходную Службу Именования, tnameserv работает на порту 1050 на узле nameserverhost. Клиент работает на узле clienthost, и сервер работает на узле serverhost.

-J опция

Этот параметр командной строки доступен для использования с tnameserve:
-Joption
Опция передачи к виртуальной машине Java, где опция является одной из опций, описанных на ссылочной странице для средства запуска приложения java. Например,-J-Xms48m устанавливает память запуска в 48 мегабайтов. Это - общее соглашение для-J, чтобы передать опции к базовой виртуальной машине.

Остановка Переходного процесса IDL Java Именование Службы

Чтобы остановить службу именования IDL Java, используйте соответствующую команду операционной системы, такую как kill для процесса Unix, или Ctrl-C для процесса Windows. Служба именования будет продолжать ожидать вызовов, пока это не будет явно завершение работы. Отметьте, что имена, зарегистрированные в службе именования IDL Java, исчезают, когда служба завершается.

Демонстрационный Клиент: Добавление Объектов к Пространству имен

Следующий пример программы иллюстрирует, как добавить имена к пространству имен. Это - автономный Переходный клиент Службы Именования, который создает следующее простое дерево.

В этом примере планы являются ссылкой на объект, и Персональный контекст именования, который содержит две ссылки на объект: календарь и расписание.

import java.util.Properties;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;

public class NameClient
{
   public static void main(String args[])
   {
      try {
В вышеупомянутом разделе, Запуская Переходный процесс IDL Java Именование Службы, сервер имен был запущен на порту 1050. Следующий код гарантирует, что клиентская программа знает об этом номере порта.
        Properties props = new Properties();
        props.put("org.omg.CORBA.ORBInitialPort", "1050");
        ORB orb = ORB.init(args, props);

Этот код получает начальный контекст именования и присваивает его ctx. Вторая строка копирует ctx в фиктивную ссылку на объект objref, что мы присоединим к различным именам и добавим в пространство имен.
        NamingContext ctx =
NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));
        NamingContext objref = ctx;

Этот код создает имя "планы" типа "текст" и связывает это с нашей фиктивной ссылкой на объект. "планы" тогда добавляются при начальном использовании контекста именования rebind. rebind метод позволяет нам выполнять эту программу много раз, не получая исключения, которые мы получили бы от использования bind.
        NameComponent nc1 = new NameComponent("plans", "text");
        NameComponent[] name1 = {nc1};
        ctx.rebind(name1, objref);
        System.out.println("plans rebind successful!");

Этот код создает контекст именования под названием "Персональный" из типа "каталог". Получающаяся ссылка на объект, ctx2, связывается с именем и добавляется под начальным контекстом именования.
        NameComponent nc2 = new NameComponent("Personal", "directory");
        NameComponent[] name2 = {nc2};
        NamingContext ctx2 = ctx.bind_new_context(name2);
        System.out.println("new naming context added..");

Остаток от кода связывает фиктивную ссылку на объект, используя имена "расписание" и "календарь" под "Персональным" контекстом именования (ctx2).
        NameComponent nc3 = new NameComponent("schedule", "text");
        NameComponent[] name3 = {nc3};
        ctx2.rebind(name3, objref);
        System.out.println("schedule rebind successful!");

        NameComponent nc4 = new NameComponent("calender", "text");
        NameComponent[] name4 = {nc4};
        ctx2.rebind(name4, objref);
        System.out.println("calender rebind successful!");


    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
  }
}

Демонстрационный Клиент: Просмотр Пространства имен

Следующий пример программы иллюстрирует, как просмотреть пространство имен.

import java.util.Properties;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;

public class NameClientList
{
   public static void main(String args[])
   {
      try {
В вышеупомянутом разделе, Запуская Переходный процесс IDL Java Именование Службы, сервер имен был запущен на порту 1050. Следующий код гарантирует, что клиентская программа знает об этом номере порта.

        Properties props = new Properties();
        props.put("org.omg.CORBA.ORBInitialPort", "1050");
        ORB orb = ORB.init(args, props);


Следующий код получает начальный контекст именования.
        NamingContext nc =
NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));

list метод перечисляет привязку в контексте именования. В этом случае до 1000 привязки от начального контекста именования будет возвращена в BindingListHolder; любая остающаяся привязка возвращается в BindingIteratorHolder.
        BindingListHolder bl = new BindingListHolder();
        BindingIteratorHolder blIt= new BindingIteratorHolder();
        nc.list(1000, bl, blIt);

Этот код вытаскивает массив привязки из возвращенного BindingListHolder. Если нет никакой привязки, концов программы.
        Binding bindings[] = bl.value;
        if (bindings.length == 0) return;

Остаток от циклов кода посредством привязки и распечатывает имена.
        for (int i=0; i < bindings.length; i++) {

            // get the object reference for each binding
            org.omg.CORBA.Object obj = nc.resolve(bindings[i].binding_name);
            String objStr = orb.object_to_string(obj);
            int lastIx = bindings[i].binding_name.length-1;

            // check to see if this is a naming context
            if (bindings[i].binding_type == BindingType.ncontext) {
              System.out.println( "Context: " +
bindings[i].binding_name[lastIx].id);
            } else {
                System.out.println("Object: " +
bindings[i].binding_name[lastIx].id);
            }
        }

       } catch (Exception e) {
        e.printStackTrace(System.err);
       }
   }
}

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