Файл: Технология 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 Создание клиента
Перейдем к написанию кода для клиента.
Основные шаги написания клиентского приложения
- Создание и инициализация ORB
- Получение контекста службы имен (NamingContext)
- Нахождение удаленного объекта
- Вызов метода sayHello.
- Вызов метода 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 направлена на достижение поставленных целей - развитие прикладных систем: