Файл: Технология CORBA (АНАЛИЗ ТЕСТОВ И ТЕХНОЛОГИЯ CORBA ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 02.04.2023

Просмотров: 259

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Вертикальные инструменты предназначены для поддержки определенных сегментов рынка: финансовая деятельность, промышленное производство, медицина и др.

В настоящее время разрабатываются следующие спецификации:

1) Инструменты обработки изображений. Укажите доступ к графическим данным и обмен ими. Роль этой службы заключается в поддержке приложений конечных пользователей для верификации, обработки, визуализации и хранения графических данных.

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

3) Интегрированные автоматизированные производственные инструменты. Позволяет интегрировать бизнес-функции предприятия с компьютерами. Объединенные функции могут также включать управление процессами разработки, контроль качества, финансовые и маркетинговые операции.

4) Распределенные инструменты эмуляции процесса. Сервисы данной спецификации должны служить основой для быстрого построения и эксплуатации эмулируемой модели.

5) Инструменты информатизации в газовой и нефтяной отраслях. Данная предметная область характеризуется большим объемом данных и высокой сложностью алгоритмов.

6) Бухгалтерское оборудование. Включает все виды коммерческих операций: обмен валюты, управление платежами, управление продажами и т.д.

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

Таким образом, подводя итог первой главе данной курсовой работы, можно сделать вывод о том, что CORBA - это набор спецификаций, вытекающих из максимально широкого обсуждения накопленных реальных проблем, в котором участвуют как разработчики, так и потребители технологий. В результате такого обсуждения создается документ, который предлагает решение вопросов на уровне существующих технологий и технологий в ближайшем будущем. Преимуществом опережающей разработки спецификации по сравнению с реализацией является возможность для независимых разработчиков создавать потенциально совместимые продукты, не ограничивая свободу выбора языков, операционной системы, аппаратных платформ, а также не диктуя выбор конкретного технологического решения.


Альтернативные подходы, наиболее ярко выраженные в политике Microsoft и Sun, не соответствуют современным тенденциям в развитии технологий, согласно которым диктат одного производителя (даже с лучшими намерениями) в целом создает больше проблем, чем решает. Речь идет не только о технологиях. Примером тому может служить операционная система Windows, в которой пользователей больше, чем в других странах мира вместе взятых, и большинство людей рассматривают это как вынужденный выбор.

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

Проблема с монопольными стандартами заключается в протекционистской политике владельца стандарта, которая проявляется и на других смежных рынках, в случае с Microsoft - это ОС. Расширение продвижения COM на платформе Windows делает перенос этого стандарта на другие платформы экономически невыгодным, вынуждая разработчика вступать в намеренно проигрышную конкуренцию с Microsoft.

CORBA - это концепция, а не ее реализация. Когда мы говорим "COM", мы понимаем его как набор специфических инструментов - элементов операционной системы, библиотек, утилит и т.д., которые являются частью того, что называется Microsoft Windows. Под термином "CORBA" понимается сложное и разработанное понятие, сформулированное на уровне специального языка описаний - IDL. Реализация этой концепции может сильно отличаться друг от друга по различным критериям, наиболее важным в том или ином случае. VisiBroker (разработки Visigenic/Borland/Inprise/Corel) и сервер приложений, BEA WebLogic, Iona Orbix, Oracle Application Server и "картриджи" Oracle, IBM BOSS - все эти продукты используют те или иные возможности CORBA.

Стандарт для CORBA относится к тому, что официально одобрено консорциумом OMG. Надо сказать, что это очень высокий уровень "легитимности", так как авторитет OMG в компьютерном мире чрезвычайно высок. OMG - некоммерческая организация, представляющая собой сообщество разработчиков программного обеспечения и заказчиков, объединивших свои усилия для создания спецификаций на данную технологию. В настоящее время OMG насчитывает более 800 членов, включая всех основных поставщиков программного обеспечения (и даже Microsoft в последнее время). Первая спецификация CORBA появилась в 1991 году. Новые функции официально считаются добавленными в CORBA на момент утверждения спецификации. Как правило, в разработке спецификации участвуют крупнейшие специалисты в данной области. Разработка реализации - задача конкретной фирмы. Обычно на это уходит много времени - от утверждения спецификации до появления высококачественного исполнения - иногда несколько лет. В настоящее время отображение языка IDL на 6 языков программирования - Ada, C, C, C++, Cobol, Java и Smalltalk - стандартизировано. Существуют также отображения в Pascal (точнее, Delphi), Perl, Python и некоторых других языках, но они не стандартизированы.


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

2. СОЗАДНИЕ CORBA ПРИЛОЖЕНИЯ В J++BUILDER

2.1 Написание интерфейса

Создание приложения CORBA на Java начинается с написания интерфейса для удаленного объекта с использованием языка описания интерфейса (Interface Definition Language, IDL).

Создадим файл hello.idl

module HelloApp

{

interface Hello

{

string sayHello();

oneway void 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.

2.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() 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, необходимо вызвать метод узкого класса 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 ...");

}

}

2.3 Создание клиента

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

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

  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";

helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));

System.out.println("Obtained a handle on server object: " +

helloImpl);

System.out.println(helloImpl.sayHello());

helloImpl.shutdown();

} catch (Exception e) {

System.out.println("ERROR : " + e) ;

e.printStackTrace(System.out);

}

}

}

2.4 Компиляция и запуск приложения

Файлы HelloServer.java and HelloClient.java, Hello.idl и папка HelloApp, созданная idkj.exe должны храниться в одной папке.

Для компиляции клиента и сервера надо в командной строке набрать

javac *.java HelloApp/*.java

javac.exe находится в …\jdk1.5.0\bin.

Среда Eclipse не позволяет запускать CORBA-приложения. Для запуска

1. Запустить службу orbd - Object Request Broker Daemon (…\jdk1.5.0\bin\orbd.exe). Это делается, чтобы мы смогли получить ссылку на службу имен.

start orbd -ORBInitialPort 1050

Параметр -ORBInitialPort– номер порта, на котором будет работать сервер имен.

2. Запуск сервера

start java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost

Указывается порт, на котором работает сервер имен. Параметр -ORBInitialHost указывает хост, на котором работает сервер имен.

3. Запуск клиента

java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

Указывается порт, на котором работает сервер имен. Параметр -ORBInitialHost указывает хост, на котором работает сервер имен.

Для удобства компиляции и запуска можно создать bat-файл:

idlj -fall Hello.idl

javac *.java HelloApp/*.java

start java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost

java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

ЗАКЛЮЧЕНИЕ

Следует отметить, что архитектура CORBA направлена на достижение поставленных целей - развитие прикладных систем: