Регистрация интерфейсов и реализаций
При запуске сервера последний информирует ORB о том, какие интерфейсы он реализует. Соответствующий код автоматически добавляется к CORBA-серверу, если он создается с помощью экспертов CORBA Data Module или Corba Object репозитария объектов Delphi 4.
Обычно CORBA-серверы запускаются вручную, как в рассмотренном ранее примере. Однако при необходимости можно организовать автоматический запуск сервера или создание серверных объектов только по запросу клиента. С этой целью используется сервис, который называется Object Activation Daemon (OAD).
Автоматический запуск сервера возможен обычно в том случае, когда, во-первых, имеется регистрационная база данных, содержащая сведения о доступных реализациях подобных серверов, о том, какие серверные объекты могут быть ими созданы и какие интерфейсы в них реализованы, и, во-вторых, когда данный сервер в этой базе данных зарегистрирован. Соответственно OAD может запустить сервер, если последний зарегистрирован в репозитарии реализаций (Implementation Repository), содержащем сведения о том, в каких приложениях реализованы те или иные объекты.
Если сведения о затребованном объекте есть в репозитарии реализаций, ORB обращается не к серверу, а к OAD, как если бы он был сервером. Когда клиент запрашивает объект, OAD перенаправляет запрос к настоящему серверу, запуская его, если в этом есть необходимость.
Регистрация в репозитарии интерфейсов
Для регистрации интерфейсов следует создать репозитарий интерфейсов, запустив соответствующий сервер. С этой целью можно использовать сохраненный ранее IDL-файл с описанием интерфейса.
Сервер репозитария интерфейсов запускается с помощью следующей команды:
irep [-console] IRname [file.idl]
Аргументы этой утилиты представлены ниже:
-console - запустить репозитарий интерфейсов как консольное приложение;
IRname - имя репозитария интерфейсов;
file.idl - IDL-файл для описания состава репозитария интерфейсов (необязательный параметр).
Зарегистрируем интерфейс созданного сервера. С этой целью воспользуемся созданным ранее IDL-файлом.
irep myrepos serv.idl
Когда сервер репозитария интерфейсов запущен, можно добавлять в репозитарий другие интерфейсы, выбирая опцию File|Load и выбирая новый IDL-файл. Можно также сохранить текущее содержимое репозитария интерфейсов в IDL-файле(опция File|Save). В этом случае при перезапуске сервера репозитария интерфейсов не потребуется вносить изменения в исходный IDL-файл (рис. 15).
Рис. 15. Сервер репозитария интерфейсов
Можно также регистрировать дополнительные интерфейсы с помощью утилиты idl2ir:
idl2ir [-ir IRname] {-replace} file.idl
Аргументы этой утилиты представлены ниже:
-ir IRname - имя репозитария интерфейсов (если оно не указано, интерфейс регистрируется во всех доступных репозитариях);
-replace - заменять описания методов новыми версиями;
file.idl - IDL-файл, содержащий описания регистрируемых интерфейсов.
Если сервер репозитария интерфейсов запущен, интерфейсы из него удалить нельзя. Для этого нужно остановить сервер репозитария, создать новый IDL-файл и снова запустить сервер, зарегистрировав созданный IDL-файл при запуске.
Регистрация в репозитарии реализаций с помощью Object Activation Daemon
Для регистрации интерфейсов сервера с помощью Object Activation Daemon (OAD) нужно запустить его где-нибудь в сети с помощью команды
oad [options]
Список опций можно узнать, запустив OAD с ключом /? .
Собственно регистрация интерфейсов произволдится с помощью утилиты oadutil.
oadutil reg [options]
где
-i <interface name> - имя IDL-файла
-r <repository id> - уникальный идентификатор интерфейса (например, 'IDL:serv/crb1Factory:1.0');
-o <object name>- имя серверного объекта, поддерживающего интерфейс;
-cpp <file name> - имя исполняемого файла сервера;
-host <host name> - имя компьютера, где функционирует OAD (необязательный параметр);
-d<reference data> - данные, передаваемые серверу при запуске(необязательный параметр);
-p<policy> - способ многопользовательского доступа (shared, unshared);
-a arg1 - аргументы командной строки сервера (необязательный параметр);
-e env1 - переменные среды, необходимые для функционирования сервера (необязательный параметр).
Пример:
oadutil reg -r IDL:serv/crb1Factory:1.0 -o crb1 -cpp Serv.exe -p unshared
В результате при успешной регистрации получим примерно следующее сообщение:
Completed registration of repository_id = IDL:serv/crb1Factory:1.0
object_name = crb1
reference data =
path_name = Serv.exe
activation_policy = UNSHARED_SERVER
args = NONE
env = NONE
for OAD on host 127.0.0.1
Можно также ликвидировать сведения о сервере с помощью команды:
oadutil unreg [options]
Здесь
-i <interface name> - имя IDL-файла;
-r <repository id> - уникальный идентификатор интерфейса (например, 'IDL:serv/crb1Factory:1.0');
-o <object name>- имя серверного объекта, поддерживающего интерфейс;
-host <host name> - имя компьютера, где функционирует OAD (необязательный параметр);
После регистрации при попытке запустить клиентское приложение будет инициирован запуск сервера. Если нужно, чтобы сервер выгружался из памяти, когда он становится больше не нужен ни одному клиенту, Object Activation Daemon должен быть запущен с ключом -k (kill process).
<< Назад |
Содержание |
Вперед >>