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

Начинание с IDL Java: Разработка Клиентского приложения

Эта тема представляет основы записи клиентского приложения CORBA. Включенный в этот урок:

  1. Создание HelloClient.java
  2. Понимание HelloClient.java
  3. Компиляция HelloClient.java

Создание HelloClient.java

Создать HelloClient.java,

  1. Запустите свой текстовый редактор и создайте файл под названием HelloClient.java в Вашем основном каталоге проекта, Hello.
  2. Введите следующий код для HelloClient.java в текстовом файле. Следующий раздел, Понимая HelloClient.java, объясняет каждую строку кода в некоторых деталях.

    HelloClient.java

    // Copyright and License 
     
    import HelloApp.*;
    import org.omg.CosNaming.*;
    import org.omg.CosNaming.NamingContextPackage.*;
    import org.omg.CORBA.*;
    
    public class HelloClient
    {
      static Hello helloImpl;
    
      public static void main(String args[])
        {
          try{
            // create and initialize the ORB
            ORB orb = ORB.init(args, null);
    
            // get the root naming context
            org.omg.CORBA.Object objRef = 
                orb.resolve_initial_references("NameService");
            // Use NamingContextExt instead of NamingContext. This is 
            // part of the Interoperable naming Service.  
            NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
     
            // resolve the Object Reference in Naming
            String name = "Hello";
            helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
    
            System.out.println("Obtained a handle on server object: " + helloImpl);
            System.out.println(helloImpl.sayHello());
            helloImpl.shutdown();
    
            } catch (Exception e) {
              System.out.println("ERROR : " + e) ;
              e.printStackTrace(System.out);
              }
        }
    
    }
     
    
  3. Сохраните и закройте HelloClient.java.

Понимание HelloClient.java

Этот раздел объясняет каждую строку HelloClient.java, описывая, что код делает, так же как почему это необходимо для этого приложения.

Выполнение Основной Установки

Основная оболочка клиента CORBA является тем же самым так много приложений Java: Вы импортируете требуемые пакеты библиотеки, объявляете класс приложений, определяете метод main, и обрабатываете исключения.

Импорт Необходимых Пакетов

Во-первых, мы импортируем пакеты, требуемые для клиентского класса:

import HelloApp.*; // the package containing our stubs
import org.omg.CosNaming.*; // HelloClient will use the Naming Service
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*; // All CORBA applications need these classes

Объявление Клиентского Класса

Следующий шаг должен объявить клиентский класс:

public class HelloClient
{
  // The main() method goes here.
}

Определение Метода main()

Каждое приложение Java нуждается в методе main(). Это объявляется в рамках класса HelloClient, следующим образом:

  public static void main(String args[])
  {
    // The try-catch block goes here.
  }

Обработка Системных Исключений CORBA

Поскольку все программы CORBA могут выдать системные исключения CORBA во время выполнения, вся функциональность main() помещается в пределах блока try-catch. Программы CORBA выдают системные исключения всякий раз, когда проблема происходит во время любого из процессов (маршалинг, немаршалинг, upcall) включенный в вызов.

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

Блок try-catch устанавливается в main(),

    try{
    
      // Add the rest of the HelloClient code here.
    
    } catch(Exception e) {
        System.out.println("ERROR : " + e);
        e.printStackTrace(System.out);
      }

Создание Объекта ШАРА

Клиент CORBA нуждается в локальном объекте ШАРА выполнить весь его маршалинг и работу IIOP. Каждый клиент инстанцирует объекта org.omg.CORBA.ORB и инициализирует его, передавая к объектной определенной информации о себе.

Переменная ШАРА объявляется и инициализируется в блоке try-catch.

        ORB orb = ORB.init(args, null);

Звонок в метод init() ШАРА передает в параметрах командной строки Вашего приложения, разрешая Вам установить определенные свойства во время выполнения.

Обнаружение Привет Сервер

Теперь, когда у приложения есть ШАР, оно может попросить, чтобы ШАР определил местоположение практической эксплуатации, в которой оно нуждается, в этом случае Привет сервер. Есть много способов для клиента CORBA получить начальную ссылку на объект; наше клиентское приложение будет использовать Службу Именования COS, определенную OMG и предоставленный IDL Java. См. Используя Ссылки на объект Stringified для информации о том, как получить начальную ссылку на объект, когда нет никакой доступной службы именования.

Этими двумя опциями для Именования Служб, поставленных с J2SE v.1.4, является orbd, который является процессом демона, содержащим Службу Начальной загрузки, Переходную Службу Именования, Персистентную Службу Именования, и Диспетчер серверов, и tnameserv, переходную службу именования. Этот пример использует orbd.

Получение Начального Контекста именования

Первый шаг в использовании службы именования должен получить начальный контекст именования. В блоке try-catch, ниже Вашей инициализации ШАРА, Вы вызываете orb.resolve_initial_references(), чтобы получить ссылку на объект на сервер имени:

        org.omg.CORBA.Object objRef = 
            orb.resolve_initial_references("NameService");

Строка "NameService" определяется для всех ШАРОВ CORBA. Когда Вы передаете в той строке, ШАР возвращает начальный контекст именования, ссылку на объект на службу имен. Строка "NameService" указывает:

Строка "TNameService" указывает, что переходная служба именования будет использоваться, когда ORBD будет службой именования. В этом примере мы используем персистентную службу именования, которая является частью orbd.

Сужение Ссылки на объект

Как со всеми ссылками на объект CORBA, objRef является универсальным объектом CORBA. Чтобы использовать это в качестве объекта NamingContextExt, следует сузить это к его надлежащему типу.

        NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

Здесь мы видим использование idlj - сгенерированный класс помощника, подобный в функции к HelloHelper. Объектом ncRef является теперь org.omg.CosNaming.NamingContextExt, и можно использовать его, чтобы получить доступ к службе именования и найти другие службы. Вы сделаете это в следующем шаге.

Объект NamingContextExt в новинку для J2SE v.1.4, и является частью Взаимодействующей Службы Именования.

Разрешите Ссылку на объект в Именовании

Чтобы опубликовать ссылку в Службе Именования к объекту Hello реализация интерфейса Hello, Вы сначала нуждаетесь в строке идентификации для объекта Hello.

      String name = "Hello";

Наконец, мы передаем name к методу resolve_str() службы именования, чтобы получить ссылку на объект на Привет сервер и сузить это к объекту Hello:

        helloImpl = HelloHelper.narrow(ncRef.resolve-str(name));
        System.out.println("Obtained a handle on server object: " + helloImpl);     

Здесь Вы видите класс помощника HelloHelper на работе. Метод resolve-str() возвращает универсальный объект CORBA, как Вы видели выше, определяя местоположение службы имен непосредственно. Поэтому, Вы сразу сужаете это к объекту Hello, который является ссылкой на объект, Вы должны выполнить остальную часть Вашей работы. Затем, Вы отправляете сообщение экрану, подтверждающему, что ссылка на объект была получена.

Вызов Работы sayHello()

Вызовы CORBA похожи на вызов метода на локальном объекте. Сложности параметров маршалинга к проводу, направляя их к ШАРУ серверной стороны, немаршалингу, и размещению upcall к методу сервера абсолютно прозрачны клиентскому программисту. Поскольку так много делается для Вас сгенерированным кодом, вызов является действительно самой легкой частью программирования CORBA.

Наконец, мы печатаем результаты вызова к стандартному выводу и явно завершаем работу ШАРА:

        System.out.println(helloImpl.sayHello());
        helloImpl.shutdown();

Компиляция HelloClient.java

Теперь мы скомпилируем HelloClient.java так, чтобы мы могли исправить любые ошибки прежде, чем продолжать с этим учебным руководством.

Пользователи Windows отмечают, что следует заменить наклонными чертами влево (\) наклонные черты (/) во всех путях в этом документе.

Скомпилировать HelloClient.java,

  1. Изменитесь на каталог Hello.
  2. Выполните компилятор Java на HelloClient.java:
    javac HelloClient.java HelloApp/*.java
    
  3. Исправьте любые ошибки в своем файле и перекомпилируйте в случае необходимости.
  4. HelloClient.class сгенерирован к каталогу Hello.

Выполнение Клиентского приложения

Запущение Привет Мирового приложения покрывается Запущением Привет Мирового Приложения.

Для получения дополнительной информации

Разработка Клиентов
Интересные темы покрытий для клиентских программистов CORBA
Исключения: Системные Исключения
Объясняет, как системные исключения CORBA работают, и обеспечивает детали о незначительных кодах системных исключений IDL Java
Инициализация: Системные Свойства
Объясняет, какие свойства можно передать к ШАРУ в инициализации
Именование Службы
Покрывает Службу Именования COS более подробно

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