48761 (Реализация почтового клиента и сервера на основе CORBA)

2016-07-28СтудИзба

Описание файла

Документ из архива "Реализация почтового клиента и сервера на основе CORBA", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48761"

Текст из документа "48761"

Факультет «Информатика и системы управления»

Методические указания к лабораторной работе

по курсу «Распределенные системы обработки информации»

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

Москва, 2004 г.

  1. Цель работы

  1. Познакомиться с технологией CORBA.

  2. Познакомиться с языком IDL и описанием интерфейсов.

  3. Освоить классы библиотеки org.omg.

  4. Применить полученные знания на практике

  1. Задание для домашней подготовки

Ознакомиться с теоретическим материалом, представленным в приложениях к данным методическим указаниям и примерами программ. Ознакомиться с текстом задания к лабораторной работе, предложить размещение компонентов и функциональность, удовлетворяющую требованиям задания к лабораторной работе, и написать программу.

  1. Задание к лабораторной работе

Разработать почтовый клиент и сервер. Клиент – оконное приложение, которое будет позволять отсылать и получать с сервера сообщения. Идентификация клиентов на сервере, протокол передачи сообщений – на усмотрение студентов.

Сервер может быть консольным приложением. Хранить сообщения можно в текстовом файле. Рекомендуется сделать сервер многопоточным.

Для взаимодействия клиента и сервера использовать технологию CORBA.

В качестве дополнения предлагается сервер или клиент реализовать не на Java.

  1. Содержание отчета



Отчет должен содержать:

  1. Постановку задачи, решаемой отлаженной программой.

  2. Руководство пользователя отлаженной программы, содержащее описание интерфейсов всех функций программы.

  3. Листинг программы с необходимыми комментариями.

  1. Контрольные вопросы



        1. Что такое CORBA?

        2. Что такое IDL? Для чего он нужен?

        3. Как осуществляется взаимодействие клиента и сервера в CORBA?

        4. Как передаются данные между ними?

        5. Для чего нужен сервер имен?

        6. Как запускается CORBA‑сервер?

  1. Литература



  1. Кен Арнольд, Джеймс Гослинг, Дэвид Холмс. Язык программирования Java™.

  2. Официальный сайт Java – http://java.sun.com/ (есть раздел на русском языке с учебником).

  3. Java™ 2 SDK, Standard Edition Documentation – http://java.sun.com/products/jdk/1.5/index.html.

  4. Джеймс Гослинг, Билл Джой, Гай Стил. Спецификация языка Java (The Java Language Specification – http://www.javasoft.com/docs/books/jls/). Перевод на русский язык – http://www.uni-vologda.ac.ru/java/jls/index.html

  5. Официальный сайт проекта Eclipse – http://www.eclipse.org/.

  1. Приложение 1. CORBA

Технология CORBA (Common Object Request Broker Architecture) – это стандарт написания распределенных приложений, предложенный консорциумом OMG (Open Management Group). Создавая CORBA‑объекты, мы можем, например, существенно уменьшить время решения задач, требующих выполнения большого объема вычислений. Это возможно благодаря размещению CORBA‑объектов на разных машинах. Каждый удаленный объект решает определенную подзадачу, тем самым разгружает клиент от выполнения лишней работы.

Основу 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.

    1. 6.1 Создание простейшего CORBA-приложения



      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 объектов.

  • HelloOperations.java – класс, содержащий описание интерфейса hello на языке Java.

  • Hello.java – класс – наследник HelloOperations, поддерживающий интерфейс org.omg.CORBA. Object.

      1. Создание сервера

Теперь наша задача – написать класс, реализующий интерфейс 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() method

public String sayHello() {

return «\nHello world!!\n»;

}

 // implement shutdown() method

public 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);

В первой строчке мы получаем объектую ссылку на службу имен (NameService). Но фактически это обыкновенный CORBA‑объект и для того, чтобы использовать его как контекст имен (NamingContext), необходимо вызвать метод narrow класса NamingContextHelper, который как бы конкретизирует данный CORBA‑объект.

4. Регистрация имени удаленного объекта (HelloImpl)

String name = «Hello»;

NameComponent path[] = ncRef.to_name(name);

ncRef.rebind (path, href);

Регистрация имени производится для того, чтобы клиент смог найти удаленный объект. Этой цели служит функция rebind (NameComponent[] nc, Object obj) интерфейса NamingContext.

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…»);

}

}

      1. Создание клиента

Перейдем к написанию кода для клиента.

Основные шаги написания клиентского приложения

  1. Создание и инициализация ORB

  2. Получение контекста службы имен (NamingContext)

  3. Нахождение удаленного объекта

  4. Вызов метода sayHello.

  5. Вызов метода shutdown.

Как видно, первые два пункта совпадают с этапами создания серверного приложения, поэтому рассматривать их не будем.

Третий пункт реализуется тоже достаточно просто. Создается объект NameComponent. Вызывается метод resolve (NameComponent[] path), который отыскивает по имени удаленный объект (стандартный CORBA‑объект). При помощи метода 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

{

static Hello helloImpl;

public static void main (String args[])

{

try {

 // create and initialize the ORB

ORB orb = ORB.init (args, null);

 // get the root naming context

org.omg.CORBA. Object objRef =

orb.resolve_initial_references («NameService»);

 // Use NamingContextExt instead of NamingContext. This is

 // part of the Interoperable naming Service.

NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

 // resolve the Object Reference in Naming

String name = «Hello»;

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее