Лабораторная работа: Реализация почтового клиента и сервера на основе CORBA
Скелет (skeleton) – объект, работающий в адресном пространстве сервера. Получив запрос от клиента, он распаковывает его и передает серверу. Также скелет преобразует ответы сервера и передает их клиенту (заглушке).
Для того чтобы написать любое приложение CORBA используя технологию Java, необходимо иметь две вещи – это установленный пакет JDK1.5 и компилятор idlj (…\jdk1.5.0\bin\idlj.exe). JDK предоставляет набор классов для работы с CORBA объектами, а idlj производит отображение языка IDL в Java.
6.1 Создание простейшего CORBA-приложения
6.1.1 Написание интерфейса
Создание CORBA приложения на Java начинается с написания интерфейса для удаленного объекта, используя язык описания интерфейсов (Interface Definition Language, IDL).
Создадим файл hello.idl
module HelloApp{interface Hello{string sayHello();oneway void shutdown();};};Данный интерфейс описывает лишь два метода shutdown и sayHello . Причем, нам не важно, что делают эти методы, главное мы определяем, что они есть и определяем какие у них входные и выходные параметры.
Далее следует запустить компилятор IDL-to-Java idlj:
idlj – fall Hello.idl
В текущей директории появилась новая папка Hello App , в которой содержаться шесть java‑файлов. Каждый из них имеет свое назначение.
· HelloPOA.java java – абстрактный класс, который представляет собой ни что иное, как скелет сервера (skeleton) и обеспечивает функциональность сервера.
· _HelloStub.java – класс, реализующий заглушку (stub) клиента. Обеспечивает функциональность клиента.
· HelloHelper.java и HelloHolder.java – классы, предоставляющие вспомогательные функции для CORBA объектов.
· HelloOperations.java – класс, содержащий описание интерфейса hello на языке Java.
· Hello.java – класс – наследник HelloOperations, поддерживающий интерфейс org.omg.CORBA. Object.
6.1.2 Создание сервера
Теперь наша задача – написать класс, реализующий интерфейс hello . В нашем случае это будет HelloImpl . Обратите внимание, на то, что он является наследником класса HelloPOA . В HelloImpl реализованы методы, объявленные в Hello . idl .
Для упрощения задачи объявление методов можно взять из файла HelloOperations . java , сгенерированного jdlj .
class HelloImpl extends HelloPOA {private ORB orb; public void setORB (ORB orb_val) {orb = orb_val;} // implement sayHello() methodpublic String sayHello() {return ?\nHello world!!\n?;} // implement shutdown() methodpublic void shutdown() {orb.shutdown(false);}}
Следующим шагом будет создание собственно серверной части приложения. Это будет класс HelloServer.
В нем будет всего один метод – стандартная функция main.
Первое что мы делаем, создаем ORB. Затем создаем экземпляр класса удаленного объекта (HelloImpl) и регистрируем его в ORB. Дальше вызываем специальную службу имен (NameService) и регистрируем в ней имя удаленного объекта, чтобы клиент смог его найти.
Рассмотрим подробнее эти этапы.
1. Создание и инициализация ORB. Производится вызовом статического метода init класса ORB
ORB orb = ORB.init (args, null);
2. Создание экземпляра класса удаленного объекта и регистрация его в ORB
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
3. Получение контекста имен (NamingContext)
org.omg.CORBA. Object objRef = orb.resolve_initial_references («NameService»);
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);