Docsity
Docsity

Подготовься к экзаменам
Подготовься к экзаменам

Учись благодаря многочисленным ресурсам, которые есть на Docsity


Получи баллы для скачивания
Получи баллы для скачивания

Заработай баллы, помогая другим студентам, или приобретай их по тарифом Премиум


Руководства и советы
Руководства и советы

Реализация почтового клиента и сервера на основе CORBA лабораторная по информатике , Руководство, Проектов, Исследование из Информатика

Реализация почтового клиента и сервера на основе CORBA лабораторная по информатике

Вид: Руководство, Проектов, Исследование

2016/2017

Загружен 12.04.2017

refbank20509
refbank20509 🇷🇺

10 документы

1 / 17

Toggle sidebar

Сопутствующие документы


Частичный предварительный просмотр текста

Скачай Реализация почтового клиента и сервера на основе CORBA лабораторная по информатике и еще Руководство, Проектов, Исследование в формате PDF Информатика только на Docsity! Факультет «Информатика и системы управления» Методические указания к лабораторной работе по курсу «Распределенные системы обработки информации» "Реализация почтового клиента и сервера на основе CORBA" Москва, 2004 г. Цель работы 1. Познакомиться с технологией CORBA. 2. Познакомиться с языком IDL и описанием интерфейсов. 3. Освоить классы библиотеки org.omg. 4. Применить полученные знания на практике 1. Задание для домашней подготовки Ознакомиться с теоретическим материалом, представленным в приложениях к данным методическим указаниям и примерами программ. Ознакомиться с текстом задания к лабораторной работе, предложить размещение компонентов и функциональность, удовлетворяющую требованиям задания к лабораторной работе, и написать программу. 2. Задание к лабораторной работе Разработать почтовый клиент и сервер. Клиент – оконное приложение, которое будет позволять отсылать и получать с сервера сообщения. Идентификация клиентов на сервере, протокол передачи сообщений – на усмотрение студентов. Сервер может быть консольным приложением. Хранить сообщения можно в текстовом файле. Рекомендуется сделать сервер многопоточным. Для взаимодействия клиента и сервера использовать технологию CORBA. В качестве дополнения предлагается сервер или клиент реализовать не на Java. 6. Приложение 1. CORBA Технология CORBA (Common Object Request Broker Architecture) – это стандарт написания распределенных приложений, предложенный консорциумом OMG (Open Management Group). Создавая 0 0 4 F C RBAобъекты, мы можем, например, существенно уменьшить время решения задач, требующих выполнения большого объема вычислений. Это возможно благодаря размещению 0 0 4 F C RBAобъектов на разных машинах. Каждый удаленный объект решает определенную подзадачу, тем самым разгружает клиент от выполнения лишней работы. Основу CORBA составляет объектный брокер запросов (Object Request Broker). ORB управляет взаимодействием объектов в распределенной сетевой среде. IIOP (Internet Inter-ORB Protocol) – это специальный протокол взаимодействия между ORB. В адресном пространстве клиента функционирует специальный объект, называемый заглушкой (stub). Поучив запрос от клиента, он упаковывает параметры запроса в специальный формат и передает его серверу, а точнее скелету. Скелет (skeleton) – объект, работающий в адресном пространстве сервера. Получив запрос от клиента, он распаковывает его и передает серверу. Также скелет преобразует ответы сервера и передает их клиенту (заглушке). Для того чтобы написать любое приложение CORBA используя технологию Java, необходимо иметь две вещи – это установленный пакет JDK1.5 и компилятор idlj (…\jdk1.5.0\bin\idlj.exe). JDK предоставляет набор классов для работы с CORBA объектами, а idlj производит отображение языка IDL в Java. 6.1 Создание простейшего CORBA-приложения 6.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 В текущей директории появилась новая папка HelloApp, в которой содержаться шесть javaфайлов. Каждый из них имеет свое назначение. • HelloPOA.java java – абстрактный класс, который представляет собой ни что иное, как скелет сервера (skeleton) и обеспечивает функциональность сервера. • _HelloStub.java – класс, реализующий заглушку (stub) клиента. Обеспечивает функциональность клиента. • HelloHelper.java и HelloHolder.java – классы, предоставляющие вспомогательные функции для CORBA объектов. 5. Ожидание запросов от клиента orb.run(); Теперь сервер готов к работе. // HelloServer.java import HelloApp.*; import org.omg. CosNaming.*; import org.omg. CosNaming. NamingContextPackage.*; import org.omg.CORBA.*; import org.omg. PortableServer.*; import org.omg. PortableServer.POA; import java.util. Properties; class HelloImpl extends HelloPOA { private ORB orb; public void setORB (ORB orb_val) { orb = orb_val; } // implement sayHello() method public String sayHello() { return «\nHello world!!\n»; } // implement shutdown() method public void shutdown() { orb.shutdown(false); } } public class HelloServer { public static void main (String args[]) { try { // create and initialize the ORB ORB orb = ORB.init (args, null); // get reference to rootpoa & activate the POAManager POA rootpoa = POAHelper.narrow (orb.resolve_initial_references («RootPOA»)); rootpoa.the_POAManager().activate(); // create servant and register it with the ORB HelloImpl helloImpl = new HelloImpl(); helloImpl.setORB(orb); // get object reference from the servant org.omg.CORBA. Object ref = rootpoa.servant_to_reference(helloImpl); Hello href = HelloHelper.narrow(ref); // get the root naming context // NameService invokes the name service org.omg.CORBA. Object objRef = orb.resolve_initial_references («NameService»); // Use NamingContextExt which is part of the Interoperable // Naming Service (INS) specification. NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // bind the Object Reference in Naming String name = «Hello»; NameComponent path[] = ncRef.to_name(name); ncRef.rebind (path, href); System.out.println («HelloServer ready and waiting…»); // wait for invocations from clients orb.run(); } catch (Exception e) { System.err.println («ERROR:» + e); e.printStackTrace (System.out); } System.out.println («HelloServer Exiting…»); } } 2.. Создание клиента Перейдем к написанию кода для клиента. Основные шаги написания клиентского приложения 1. Создание и инициализация ORB 2. Получение контекста службы имен (NamingContext) 3. Нахождение удаленного объекта 4. Вызов метода sayHello. 5. Вызов метода shutdown. Как видно, первые два пункта совпадают с этапами создания серверного приложения, поэтому рассматривать их не будем. Третий пункт реализуется тоже достаточно просто. Создается объект NameComponent. Вызывается метод resolve (NameComponent[] path), который отыскивает по имени удаленный объект (стандартный CORBA 0 01 Eобъект). При помощи метода narrow (org.omg.CORBA. Object obj) класса helloHelper (сгенерированного idlj компилятором) получаем объектную ссылку на интерфейс hello. String name = «Hello»; helloImpl = HelloHelper.narrow (ncRef.resolve_str(name)); Теперь можно вызывать метод sayHello: System.out.println (helloImpl.sayHello()); Метод shutdown завершает работы сервера. helloImpl.shutdown(); //testClient.java import HelloApp.*; import org.omg. CosNaming.*; import org.omg. CosNaming. NamingContextPackage.*; import org.omg.CORBA.*; public class HelloClient 6.2 Язык IDL Язык OMG IDL (Interface Definition Language – Язык Описания Интерфейсов) представляет собой технологически независимый синтаксис для описания интерфейсов объектов. При описании программных архитектур, OMG IDL прекрасно используется в качестве универсальной нотации для определения границ объекта, определяющих его поведение по отношению к другим компонентам информационной системы. OMG IDL позволяет описывать интерфейсы, имеющие различные методы и атрибуты. Язык также поддерживает наследование интерфейсов, что необходимо для повторного использования объектов с возможностью их расширения или конкретизации. IDL является чисто декларативным языком, то есть он не содержит никакой реализации. IDL 0 01 Eспецификации могут быть откомпилированы (отображены) в заголовочные файлы и специальные прототипы серверов, которые могут использоваться непосредственно программистом. То есть IDL 0 01 Eопределенные методы могут быть написаны, а затем выполнены, на любом языке, для которого существует отображение из IDL. К таким языкам относятся C, C++, SmallTalk, Pascal, Java, Ada. С помощью IDL можно описать и атрибуты компоненты, и родительские классы которые, она наследует, и вызываемые исключения, и, наконец, методы, определяющие интерфейс, причем с описанием входных и выходных параметров. Структура CORBA IDL файла выглядит следующим образом: module <identifier> { <type declarations>; <constant declarations>; <exception declarations>; interface <identifier> [:<inheritance>] { <type declarations>; <constant declarations>; <attribute declarations>; <exception declarations>; [<op_type>]<identifier>(<parameters>) [raises exception] [context] . . [<op_type>]<identifier>(<parameters>) [raises exception] [context] . . } interface <identifier> [:<inheritance>] . . } Синтаксис языка IDL довольно объемный и не представляется возможным описать его в методическом пособии. Для реализации интерфейса почтового сервера можно дополнить Hello.idl module HelloApp { struct TMessage { string To; string From; string Message; }; typedef sequence<TMessage> TMessages; interface Hello { TMessages GetMessages (in string Name, out short count); oneway void Send (in string Client, in string Name, in string Message); string sayHello(); oneway void shutdown(); }; }; typedef sequence<TMessage> TMessages; – объявление типа динамический массив сообщений TMessage.
Docsity logo