В этой главе рассматривается использование LiveConnect для доступа к распределённым объектам CORBA. С помощью LiveConnect Вы можете получить доступ к Java; через Java - соединяться с CORBA-объектами, используя Netscape Internet Service Broker for Java.
В главе имеются следующие разделы:
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 могут получать доступ к распределённому объекту в зависимости от того как он опубликован. Простейшей альтернативой является создание и запуск распределённого объекта как отдельного процесса, что показано на следующем рисунке.
Как видно на рисунке, среды запуска Java и JavaScript находятся вместе на одном web-сервере. Они взаимодействуют путём использования LiveConnect стандартным способом, описанным ранее в этой главе. Методы, вызываемые в оболочке стаба в JavaScript, дают в результате вызов методов объекта Java-стаба в Java. Стаб использует Java ORB для взаимодействия с удалённым сервисом. В данной архитектуре серверный процесс объекта может проходить только на машине, которая имеет ORB, и может быть написан на любом языке.
Приложение-образец flexi
иллюстрирует это. В нём FlexiServer
это отдельное приложение Java, содержащее реализации нескольких распределённых
объектов. Этот пример обсуждается в разделе "Приложение-Образец Flexi".
После того как поработаете с flexi
, прочтите в разделе "Альтернативные
Публикации" обсуждение более сложных альтернатив публикации.
Приложение flexi
иллюстрирует использование серверного JavaScript
для доступа к удалённому сервису, запущенному на ORB с включённым протоколом IIOP,
а также показывает удалённый сервис, написанный целиком на Java с использованием ISB for Java.
И исходные файлы, и исполняемые файлы приложения flexi
установлены
в директории $NSHOME\js\samples\flexi
.
A flexible spending account (FSA)/гибко расходуемый счёт это счёт, на котором служащие могут хранить доллары предоплаты, используемые для медицинских расходов. Служащие обычно подписываются на этот план через администратора плана и выбирают сумму в долларах, которую они хотят хранить на своих счетах. Если служащий осуществляет затраты на медицинские цели, он отправляет запрос, который, если одобрен, вызывает снятие суммы со счёта и перевод её служащему.
Приложение flexi
предоставляет поддержку обслуживания
FSA. В этом приложении администратор имеет следующие
опции:
Для служащего имеются следующие опции:
Рисунок 22.2 показывает две основные части flexi
.
Они реализуют клиента и сервис CORBA.
flexi
Клиент CORBA это приложение на серверном JavaScript, известное как flexi
.
Это приложение реализует пользовательские интерфейсы администратора и служащего,
описанные ранее. Оно соединяется с объектом FSA-Admin (описанном далее) в
отдельном процессе или даже на отдельном компьютере. Приложение затем использует
этот и другие объекты, возвращаемые из FSA-Admin, для выполнения большинства своих операций.
Сервер CORBA это отдельное Java-приложение, работающее из оболочки/shell. Оно
содержит реализации всех интерфейсов, определённых в IDL-файле Flexi.idl
.
Это приложение под названием FlexiServer
реализует основную
функциональность системы FSA. После старта это приложение создаёт экземпляр
объекта, реализующий интерфейс ::FSA::Admin
, и регистрирует его под
именем "FSA-Admin." Клиенты этого сервиса (такие как приложение flexi
на JavaScript) получают доступ к этому объекту, разрешая сначала своё имя.
Клиенты используют этот объект для создания других объектов и для получения
удалённых ссылок на них.
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
работает в фоновом режиме, ожидая запросов на обслуживание.
Вы обязаны стартовать FlexiServer
до старта flexi
,
поскольку стартовая страница flexi
пытается соединиться с FlexiServer
.
Добавьте $NSHOME\js\samples\flexi
в CLASSPATH
Вашего web-сервера.
О том, как это сделать, см. "Установка LiveConnect".
Используя Application Manager, установите приложение flexi
JavaScript,
как описано в разделе "Установка Нового Приложения". Параметры, устанавливаемые
Вами для flexi
, показаны в следующей таблице.
Установка | Значение |
---|---|
flexi | |
$NSHOME\js\samples\flexi\flexi.web | |
fsa.html | |
start.html | |
client-cookie |
Чтобы стартовать flexi
, Вы можете запустить его из Application Manager
или ввести следующий URL:
http://server-name/flexi
Страница по умолчанию позволяет пользователю идентифицировать себя как администратора или как служащего. Чтобы быстрее прочувствовать то, как работает это приложение, следуйте этому сценарию:
Система может обрабатывать только один запрос служащего в единицу времени. После удаления запроса может быть отправлен новый запрос.
В таблице показаны первичные файлы и директории для flexi
.
Просмотрите эти файлы, чтобы добиться полной ясности в вопросах работы приложения. Здесь обсуждаются лишь некоторые детали.
Функция 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.
Файл 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.
Код во 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:
В этих альтернативных вариантах CORBA-клиент и CORBA-сервер оба работают в одном процессе web-сервера.
С этой точки зрения, если CORBA-клиент не является приложением JavaScript, первый вариант пригоден для тех же целей, что и в случае, когда CORBA-сервер запущен как отдельный процесс.
Однако второй вариант, создающий распределённый объект в приложении JavaScript, реально делает это приложение сервисом CORBA. Рисунок 22.3 иллюстрирует эти альтернативы.
Ещё раз: среды выполнения 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. Все Права Зарезервированы.