Распределенная обработка данных. Найханова Л.В. - 117 стр.

UptoLike

Составители: 

117
будем использовать CORBA IDL. Так как мы еще не создали никакого IDL-описания,
выберем опцию Add New IDL File. После нажатия на кнопку OK в окне редактора кода
появится пустая страница для ILD-описания, куда можно ввести описание интерфейса
нашего сервера.
interface b1
{
double fun1(in double x);
} ;
Далее следует скомпилировать IDL-файл. В действительности это не компиляция, а
кодогенерация, в результате которой мы получим два модуля, fun1_s.cpp and fun1_c.cpp,
содержащие stub-код и skeleton-код.
Stub-объект и skeleton-объект
Все способы взаимодействия между серверами функциональности и их клиентами
основаны на механизме вызовов удаленных процедур (RPC - Remote Procedure Calls) и
маршалинга, представляющего собой обмен пакетами данных между объектом внутри
клиента (stub-объектом) и объектом внутри сервера (skeleton-объектом). Skeleton-объект
является представителем клиента внутри адресного пространства сервера. Обращаясь к
нему, сервер "думает", что он имеет дело с локальным объектом. Stub-объект является
представителем сервера внутри адресного пространства клиентского приложения,
поэтому последнее также "думает", что вызывает методы локального объекта. В
действительности так оно и есть, однако вместо истинной реализации (в нашем случае -
вычисления значений функции) методы этого объекта осуществляют вызовы удаленных
процедур и обмен пакетами данных с сервером (рис. 4.5):
Рис. 4.5. Взаимодействие сервера и клиента
Теперь можно вспомнить о реализации нашей функции. Для этого выберем со
страницы Multitier репозитария объектов пиктограмму CORBA Object Implementation. В
диалоговой панели CORBA Object Implementation Wizard выберем имя интерфейса (b1), а
также определим имя модуля, содержащего реализацию, и имя класса CORBA-объектов.
В данном примере опишем объект, экземпляр которого создается в момент старта сервера,
так что сервер сразу же сможет принимать обращения клиентов (рис. 4.6).
Можно просмотреть изменения, внесенные в наше приложение этим экспертом. В
частности, имеет смысл внести в код реализации нашего метода строки, ответственные за
проведение расчетов (рис. 4.7).
Теперь можно скомпилировать проект и закрыть его. Перед созданием клиента мы
должны запустить VisiBroker Smart Agent - службу каталогов CORBA, позволяющую
осуществить доступ к CORBA-серверам. Теперь можно запустить наш сервер (желательно
отдельно от среды разработки).
После этого можно создавать клиентские приложения.
будем использовать CORBA IDL. Так как мы еще не создали никакого IDL-описания,
выберем опцию Add New IDL File. После нажатия на кнопку OK в окне редактора кода
появится пустая страница для ILD-описания, куда можно ввести описание интерфейса
нашего сервера.
     interface b1
     {
       double fun1(in double x);
       } ;
     Далее следует скомпилировать IDL-файл. В действительности это не компиляция, а
кодогенерация, в результате которой мы получим два модуля, fun1_s.cpp and fun1_c.cpp,
содержащие stub-код и skeleton-код.
Stub-объект и skeleton-объект
     Все способы взаимодействия между серверами функциональности и их клиентами
основаны на механизме вызовов удаленных процедур (RPC - Remote Procedure Calls) и
маршалинга, представляющего собой обмен пакетами данных между объектом внутри
клиента (stub-объектом) и объектом внутри сервера (skeleton-объектом). Skeleton-объект
является представителем клиента внутри адресного пространства сервера. Обращаясь к
нему, сервер "думает", что он имеет дело с локальным объектом. Stub-объект является
представителем сервера внутри адресного пространства клиентского приложения,
поэтому последнее также "думает", что вызывает методы локального объекта. В
действительности так оно и есть, однако вместо истинной реализации (в нашем случае -
вычисления значений функции) методы этого объекта осуществляют вызовы удаленных
процедур и обмен пакетами данных с сервером (рис. 4.5):




                        Рис. 4.5. Взаимодействие сервера и клиента

      Теперь можно вспомнить о реализации нашей функции. Для этого выберем со
страницы Multitier репозитария объектов пиктограмму CORBA Object Implementation. В
диалоговой панели CORBA Object Implementation Wizard выберем имя интерфейса (b1), а
также определим имя модуля, содержащего реализацию, и имя класса CORBA-объектов.
В данном примере опишем объект, экземпляр которого создается в момент старта сервера,
так что сервер сразу же сможет принимать обращения клиентов (рис. 4.6).
      Можно просмотреть изменения, внесенные в наше приложение этим экспертом. В
частности, имеет смысл внести в код реализации нашего метода строки, ответственные за
проведение расчетов (рис. 4.7).
      Теперь можно скомпилировать проект и закрыть его. Перед созданием клиента мы
должны запустить VisiBroker Smart Agent - службу каталогов CORBA, позволяющую
осуществить доступ к CORBA-серверам. Теперь можно запустить наш сервер (желательно
отдельно от среды разработки).
      После этого можно создавать клиентские приложения.




                                                                                   117