На главную страницу
Форум txt.version   




Статья :: Доступ к Сервису CORBA.
Оглавление | Назад | Вперёд | Индекс

Глава 22
Доступ к Сервису CORBA

В этой главе рассматривается использование LiveConnect для доступа к распределённым объектам CORBA. С помощью LiveConnect Вы можете получить доступ к Java; через Java - соединяться с CORBA-объектами, используя Netscape Internet Service Broker for Java.

В главе имеются следующие разделы:

О Сервисе CORBA


Netscape Internet Service Broker for Java (ISB for Java) это брокер запроса объектов фирмы Netscape. ISB for Java устанавливает соединения внутри себя и с другими брокерами запроса объектов/object request brokers (ORB) путём использования протокола Internet InterORB Protocol (IIOP).

ISB for Java даёт Вашим приложениям JavaScript доступ к распределённой объектной модели CORBA, опубликованной в ORB, работающем на основе IIOP (включая сам ISB for Java). Эти объекты могут быть частью распределённого приложения. Чтобы получить доступ к такому распределённому объекту, Вы обязаны иметь Java-stub/основу, и этот stub-класс обязан быть в пути Вашей CLASSPATH. В свою очередь, Вы можете использовать Java и LiveConnect для экспонирования частей Вашего серверного приложения JavaScript как распределённых объектов CORBA.

За пределами данного учебника остаётся описание создания CORBA-исполняемых распределённых объектов  с использованием ISB for Java, а также то, как делать Java-стабы для таких объектов. Об этом см. учебник Netscape Internet Service Broker for Java Programmer's Guide.

Приложения серверного JavaScript могут получать доступ к распределённому объекту в зависимости от того как он опубликован. Простейшей альтернативой является создание и запуск распределённого объекта как отдельного процесса, что показано на следующем рисунке.

Рисунок 22.1   Приложение JavaScript CORBA-клиент

Как видно на рисунке, среды запуска Java и JavaScript находятся вместе на одном web-сервере. Они взаимодействуют путём использования LiveConnect стандартным способом, описанным ранее в этой главе. Методы, вызываемые в оболочке стаба в JavaScript, дают в результате вызов методов объекта Java-стаба в Java. Стаб использует Java ORB для взаимодействия с удалённым сервисом. В данной архитектуре серверный процесс объекта может проходить только на машине, которая имеет ORB, и может быть написан на любом языке.

Приложение-образец flexi иллюстрирует это. В нём FlexiServer это отдельное приложение Java, содержащее реализации нескольких распределённых объектов. Этот пример обсуждается в разделе "Приложение-Образец Flexi".

После того как поработаете с flexi, прочтите в разделе "Альтернативные Публикации" обсуждение более сложных альтернатив публикации.

Приложение-Образец Flexi


Приложение flexi иллюстрирует использование серверного JavaScript для доступа к удалённому сервису, запущенному на ORB с включённым протоколом IIOP, а также показывает удалённый сервис, написанный целиком на Java с использованием ISB for Java. И исходные файлы, и исполняемые файлы приложения flexi установлены в директории $NSHOME\js\samples\flexi.

A flexible spending account (FSA)/гибко расходуемый счёт это счёт, на котором служащие могут хранить доллары предоплаты, используемые для медицинских расходов. Служащие обычно подписываются на этот план через администратора плана и выбирают сумму в долларах, которую они хотят хранить на своих счетах. Если служащий осуществляет затраты на медицинские цели, он отправляет запрос, который, если одобрен, вызывает снятие суммы со счёта и перевод её служащему.

Приложение flexi предоставляет поддержку обслуживания FSA. В этом приложении администратор имеет следующие опции:

  • Создание нового счёта с указанным балансом.
  • Выбор существующего счёта по фамилии служащего.
  • Хранение дополнительных вложений на выбранном счёте.
  • Закрытие счёта.
  • Принятие или отказ в выполнении запроса, отправленного служащим.

Для служащего имеются следующие опции:

  • Просмотр статуса счёта, включая статус любого отклонённого запроса.
  • Отправка нового запроса путём заполнения формы.

CORBA. Клиентский и Серверный Процессы


Рисунок 22.2 показывает две основные части flexi. Они реализуют клиента и сервис CORBA.

Рисунок 22.2   Приложение-Образец flexi

Клиент CORBA это приложение на серверном JavaScript, известное как flexi. Это приложение реализует пользовательские интерфейсы администратора и служащего, описанные ранее. Оно соединяется с объектом FSA-Admin (описанном далее) в отдельном процессе или даже на отдельном компьютере. Приложение затем использует этот и другие объекты, возвращаемые из FSA-Admin, для выполнения большинства своих операций.

Сервер CORBA это отдельное Java-приложение, работающее из оболочки/shell. Оно содержит реализации всех интерфейсов, определённых в IDL-файле Flexi.idl. Это приложение под названием FlexiServer реализует основную функциональность системы FSA. После старта это приложение создаёт экземпляр объекта, реализующий интерфейс ::FSA::Admin, и регистрирует его под именем "FSA-Admin." Клиенты этого сервиса (такие как приложение flexi на JavaScript) получают доступ к этому объекту, разрешая сначала своё имя. Клиенты используют этот объект для создания других объектов и для получения удалённых ссылок на них.

Старт FlexiServer


FlexiServer это отдельное приложение Java. Оно может работать только на машине, имеющей JDK 1.0.2. В Enterprise Server 3.01 и в FastTrack Server 3.01 Вы можете также запускать его на машине с JDK 1.1.2. Прежде чем запустить FlexiServer, Вы должны убедиться, что среда работы корректна.

Из оболочки, где Вы запускаете FlexiServer, убедитесь, что Ваша переменная окружения PATH содержит $JDK\bin и что CLASSPATH включает следующее:

...
$NSHOME\js\samples\flexi
$NSHOME\wai\java\nisb.zip
$JDK\lib\classes.zip

Здесь $JDK это директория, в которой установлен JDK, а $NSHOME это директория, в которой установлен Ваш web-сервер.

Если среда корректна, Вы можете стартовать FlexiServer так:

cd $NSHOME\js\samples\flexi\impl
java FlexiServer

Вы должны увидеть такое сообщение:

Started FSA Admin: Admin[Server,oid=PersistentId[repId=IDL:Flexi/Admin:1.0,objectName=FSA-Admin]]

С этого момента FlexiServer стартовал как сервис CORBA и зарегистрировал в ORB объект с интерфейсом ::FSA::Admin и именем FSA-Admin. FlexiServer работает в фоновом режиме, ожидая запросов на обслуживание.

Старт Flexi


Вы обязаны стартовать FlexiServer до старта flexi, поскольку стартовая страница flexi пытается соединиться с FlexiServer.

Добавьте $NSHOME\js\samples\flexi в CLASSPATH Вашего web-сервера. О том, как это сделать, см. "Установка LiveConnect".

Используя Application Manager, установите приложение flexi JavaScript, как описано в разделе "Установка Нового Приложения". Параметры, устанавливаемые Вами для flexi, показаны в следующей таблице.

Таблица 22.1  Установки Приложения Flexi
УстановкаЗначение

Name

flexi

Web File Path/Путь к web-файлу

$NSHOME\js\samples\flexi\flexi.web

Default Page/Страница по Умолчанию

fsa.html

Initial Page/Начальная Страница

start.html

Client Object Maintenance/Обслуживание Объекта сlient

client-cookie

Использование Flexi


Чтобы стартовать flexi, Вы можете запустить его из Application Manager или ввести следующий URL:

http://server-name/flexi

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

  1. Администратор создаёт для пользователя баланс.
  2. Служащий выбирает счёт.
  3. Служащий отправляет запрос.
  4. Администратор выбирает счёт служащего.
  5. Администратор принимает запрос, что уменьшает баланс счёта служащего, и отправляет чек на запрошенную сумму.
  6. Служащий выбирает счёт.
  7. Служащий просматривает статус счёта.
  8. Администратор выбирает счёт служащего.
  9. Администратор удаляет запрос.

Система может обрабатывать только один запрос служащего в единицу времени. После удаления запроса может быть отправлен новый запрос.

Исходные Файлы


В таблице показаны первичные файлы и директории для flexi.

Таблица 22.2  Файлы и Директории Приложения Flexi
flexi.idl

Файл, определяющий интерфейс с удалённым сервисом, включая Admin, Account, Claim.

Flexi\

Директория, содержащая код, сгенерированный из Flexi.idl программой idl2java. Эта директория содержит каркасы и стабы (каркасы\основы) интерфейсов.

impl\

Директория, содержащая Java-реализации всех интерфейсов, определённых во Flexi.idl. Она также содержит класс FlexiServer, реализующий main-программу приложения Java, которое работает как сервис.

*.html

Файлы, реализующие серверное приложение JavaScript. Сюда входит также web-файл приложения, flexi.web.

Просмотрите эти файлы, чтобы добиться полной ясности в вопросах работы приложения. Здесь обсуждаются лишь некоторые детали.

Установка FlexiServer как CORBA-Сервера


Функция main отдельного Java-приложения реализована в flexi\impl\FlexiServer.java. Его код таков:

import org.omg.CORBA.*;
class FlexiServer
{
   public static void main(String[] args) {
   try {
      // Инициализируются orb и boa.
      org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
      org.omg.CORBA.BOA boa = orb.BOA_init();

      // Создаётся серверный объект.
       Admin __admin = new Admin();
      
// Информирует boa, что серверный объект готов.
       boa.obj_is_ready(__admin);
      
// Регистрируется имя объекта с именем сервиса.
       // Сначала определяется хост имени сервиса, по умолчанию это <localhost>:80.
       String _nameServiceHost = null;
      if (args.length > 0) {
         // Принимается, что первый arg это имя хоста имени
         // сервиса. Ожидаемый формат: <hostname>:<port>
          _nameServiceHost = args[0];
      }

      else {
          String _localHostName = null;
          try {
            _localHostName=
                java.net.InetAddress.getLocalHost().getHostName();
             _nameServiceHost = _localHostName + ":80";
          }
          catch (java.net.UnknownHostException e) {
             System.out.println("Couldn't determine local host;
             can't register name.");
          }
      }
  
    String _regURL = "http://" + _nameServiceHost + "/FSA-Admin";
       System.out.println("Registering Admin object at URL: " + _regURL);
      // Регистрируется серверный объект.
      netscape.WAI.Naming.register(_regURL, __admin);
      System.out.println("Started FSA Admin: " + __admin);
      boa.impl_is_ready();
   }
   catch (org.omg.CORBA.SystemException e)
{
      System.err.println(e);
      }
   }
}

Этот код инициализирует ORB и создаёт экземпляр класса Admin. Затем экземпляр регистрируется как распределённый объект с URL в форме http://host :port/FSA-Admin. По умолчанию host это имя хоста, на котором запущен FlexiServer, а port равен 80. Вы можете поставить Ваши собственные значения для host:port  путём передачи их как аргументов для FlexiServer при его старте. Чтобы использовать локальный хост, но другой номер порта, Вам нужно изменить исходный код и перекомпилировать его. Если код имеет соответствующее имя, он регистрирует объект, используя метод register объекта netscape.WAI.Naming. Дополнительно см. книгу Netscape Internet Service Broker for Java Reference Guide.

Наконец, код печатает сообщение на консоль и ожидает запросы от CORBA-клиентов. В данном случае единственным CORBA-клиентом, который знает о нём, является приложения flexi на языке JavaScript.

Установка flexi как CORBA-Клиента


Файл start.html это начальная страница приложения JavaScript flexi. Эта страница использует LiveConnect для инициализации ISB for Java и установления соединения с FSA-Admin.

<server>
// Инициализируется orb.
project.orb = Packages.org.omg.CORBA.ORB.init();
// Устанавливается соединение с сервисом "FSA-Admin".
// По умолчанию принимается, что name service запущен на текущем сервере.
nameHost = "http://" + server.hostname;
serviceName = "/FSA-Admin";
serviceURL = nameHost + serviceName;
// Разрешается имя и получается ссылка на стаб Admin.
project.fsa_admin = Packages.Flexi.AdminHelper.narrow(
netscape.WAI.Naming.resolve(serviceURL));
</server>

Первый оператор инициализирует ISB for Java, вызывая static-метод init Java-класса org.omg.CORBA.ORB. Он сохраняет возвращённый объект как свойство объекта project, так что он доступен для всего приложения.

Второй набор операторов определяет URL, который использовался для регистрации объекта FSA-Admin. Если Вы использовали при регистрации этого объекта другой URL (как описано в последнем разделе), Вам нужно сделать соответствующие изменения в этих операторах. URL, используемый в CORBA-сервере, обязан быть точно тем же, что и URL, используемый в CORBA-клиенте.

Код затем вызывает метод resolve объекта netscape.WAI.Naming для установления соединения с объектом Admin, который был зарегистрирован FlexiServer как FSA-Admin. Наконец, он вызывает метод narrow объекта AdminHelper для приведения полученного объекта к соответствующему типу Java-объекта. Этот Java-метод возвращает Java-объект, соответствующий распределённому объекту. Машина выполнения JavaScript обёртывает этот Java-объект как JavaScript-объект и сохраняет его как свойство объекта project. Теперь Вы можете вызывать методы и получать доступ к свойствам этого возвращённого объекта, как и любого другого Java-объекта. Другие страницы flexi работают через этот объект.

И ещё раз - о том, как работают CORBA-объекты, см. книгу  Netscape Internet Service Broker for Java Reference Guide.

Использование Объекта Admin для Администрирования и Просмотра Новых Счетов


Код во flexi создаёт другие объекты, кроме объекта Admin, и осуществляет к ним доступ во FlexiServer. Эти объекты создаются путём вызовов метода объекта Admin. Например, если служащий отправляет запрос, новый запрос создаётся в account-empl.html следующим оператором:

__claim = __account.submitClaim(
parseFloat(request.claimAmount),
   request.serviceDate,
request.providerName,
   request.details);

Этот код вызывает метод submitClaim объекта Account для создания нового запроса служащего. Реализация этого метода в файле impl\Account.java создаёт новый Claim-объект, который регистрируется в ORB и возвращается:

public Flexi.Claim submitClaim(float amount, String serviceDate,
   String providerName, String details)
{
Claim __clm = new Claim(this, amount, serviceDate,
       providerName, details);
   org.omg.CORBA.ORB.init().BOA_init().obj_is_ready(__clm);
   _current_clm = __clm;
System.out.println("***Created a new claim: " + __clm);
   return __clm;
};

Альтернативные Публикации


Имеются две альтернативы для публикации распределённых CORBA-объектов, представляющие интерес при работе с серверным JavaScript:

  • Объект может быть создан web-сервером (а не приложением JavaScript) и запущен на web-сервере.
  • Объект может быть создан приложением JavaScript и запущен на web-сервере.

В этих альтернативных вариантах CORBA-клиент и CORBA-сервер оба работают в одном процессе web-сервера.

С этой точки зрения, если CORBA-клиент не является приложением JavaScript, первый вариант пригоден для тех же целей, что и в случае, когда CORBA-сервер запущен как отдельный процесс.

Однако второй вариант, создающий распределённый объект в приложении JavaScript, реально делает это приложение сервисом CORBA. Рисунок 22.3 иллюстрирует эти альтернативы.

Рисунок 22.3   Приложение JavaScript как CORBA-сервер

Ещё раз: среды выполнения Java и JavaScript находятся вместе на одном web-сервере. Они взаимодействуют через использование LiveConnect стандартным способом, описанным ранее в этой главе. В это случае, однако, процессы Java и JavaScript действуют вместе как CORBA-сервис. Этот сервис затем взаимодействует с CORBA-клинтом через ISB for Java стандартным способом. Образец-приложение bank это пример приложения JavaScript, реализующего CORBA-сервис.

В данном случае CORBA-клиент может находиться на любой машине, имеющей ORB с IIOP, и может быть написан на любом языке. Интересно то, что CORBA-клиент может быть клиентским приложением Java (и через LiveConnect на клиенте - клиентским приложением JavaScript). Это даёт совершенно другой способ взаимодействия клиентского приложения JavaScript с серверным приложением JavaScript.

Оглавление | Назад | Вперёд | Индекс

Дата последнего обновления: 29 сентября 1999 г.

© Copyright © 1999 Sun Microsystems, Inc. Некоторая часть Copyright © 1999 Netscape Communications Corp. Все Права Зарезервированы.

Доступ к Сервису CORBA.

страницы в данном разделе 
 Технология Разработки Приложений JavaScript.  Индекс.
 Оглавление.  Доступ к Сервису CORBA.
 Глава 11. Конвертация Типов Данных.  Глава 8. Соединение с БД.
 Глава 9. Работа с БД.  Конфигурирование Вашй Базы Данных.
 Обработка Ошибок в LiveWire.  Введение.
 Словарь.  Оглавление.
 JavaScript. Обзор.  Основы Серверного JavaScript.
 LiveConnect. Обзор.  Другая Функциональность JavaScript.
 

Часть 1. Разработка Серверных Приложений.

 Возможности Серверного JavaScript.
 Работа с LiveConnect.  Служба LiveWire Database Service.
 Предисловие.  Быстрое Начало с Примерами Приложений.
 Служба Session Management Service.  Оглавление-Индекс.
 Приложения-Образцы Videoapp и Oldvideo.   


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста