Опубликован: 18.03.2010 | Доступ: свободный | Студентов: 840 / 85 | Оценка: 4.48 / 4.33 | Длительность: 12:01:00
Лекция 2:

Технология CORBA

Структуры

Тип struct во время компиляции транслируется в класс Java с модификаторами final и public. Имя полученного класса совпадает с именем структуры. В классе объявляются переменные-члены для каждого объявленного в IDL поля структуры. Тип переменных-членов уже относится к языку Java и выясняется в процессе трансляции полей структуры. Так же внутри полученного класса декларируются два конструктора: один - по умолчанию, т. е. без параметров, и другой - конструктор инициализации с параметрами для инициализации переменных-членов. Некоторые компиляторы создают также метод toString (), возвращающий строку, в текстовой форме отражающую содержимое полей класса.

Например, объявлена следующая структура:

struct UserStructure
{any descriptor; Object reference;
};

После трансляции полученный класс UserStructure имеет следующий вид:

public final class UserStructure  
{
public org.omg.CORBA.Any descriptor; 
public org.omg.CORBA.Object reference; 
public UserStructure()   {   }
public UserStructure(org.omg.CORBA.Any __descriptor, org.omg.CORBA.Object reference)   
	{
	descriptor = __descriptor;
	reference = __reference;
	}
}
Последовательности и массивы

Последовательности не создают в процессе трансляции исходного текста какого-либо исходного текста, но значительно усложняют класс Helper и класс Holder. Класс Holder теперь содержит массив с именем value для хранения элементов последовательности, а в методах класса Holder идет проверка диапазона передаваемого массива на предмет выхода за границы. Например, при трансляции:

typedef sequence UserSequence;

вызывает генерацию следующего массива в Holder классе:

public byte[] value;

и несколько мест, где происходит проверка границ массива:

abstract public class UserSequenceHelper  
{
...
public static byte[]   read(org.omg.CORBA.portable.InputStream_input)   
	{
	if(_length3 > 128)   
		{
		throw new org.omg.CORBA.BAD_PARAM( "Sequence exceeded bound");
		}
	}
public static void write(org.omg.CORBA.portable.OutputStream output, byte[] value)   
	{
	if(value.length > 128) 
		{
		throw new org.omg.CORBA.BAD_PARAM( "Sequence exceeded bound");
		}
	}
}

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

public static void write(org.omg.CORBA.portable.OutputStream _output, byte[]   value)   
{
if(value.length != 128)   
	{
	throw new org.omg.CORBA.BAD_PARAM("Invalid array length");
	}
output.write octet array(value, 0, value.length);
}
Исключения

Поскольку исключения имеют схожее со структурой строение, любое исключение, описанное пользователем на IDL,транслируется в класс с модификатором final public, ведущим свою родословную от org.omg.CORBA.UserException. Системные исключения CORBA,наоборот, наследуются от исключения java.lang.RuntimeException, которое, как правило, не перехватывается. Сгенерированный класс содержит по переменной для каждого описанного в IDL поля и два конструктора: по умолчанию (без параметров) и инициализации. Следующий пример:

exception UserException  { string why;
octet errorCode;
};

показывает, как происходит трансляция исключения:

public final class UserException extends org.omg.CORBA.UserException  
{ 
public String why; 
public byte errorCode; 
public UserException() { super(); }
public UserException(String __why, byte __errorCode) 
	{ 
	super(); 
	why = __why;
	errorCode = __errorCode;
	}
}

В CORBA имеется ряд предопределенных системных исключений, каждое из которых косвенно наследует класс java.lang.RuntimeException через другой класс org.omg.CORBA.SystemException.

Псевдонимы типов (typedef)

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

Создание CORBA-систем

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

Инструменты и их конфигурирование

Среди наиболее популярных и доступных инструментов для создания CORBA -систем брокер для Java от Sun Microsystems,входящий в стандартную поставку Java, VisiBroker от Inprise/Borland, WebLogic.

Порядок действия при создании CORBA-системы

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

Добиться хороших результатов в создании программ на основе CORBA можно, придерживаясь определенного порядка действий:

  • объектно-ориентированный анализ и моделирование;
  • описание и трансляция объектов;
  • создание сервера;
  • создание клиента;
  • отладка объектов.
Объектно-ориентированный анализ и моделирование

CORBA - объектно-ориентированная технология, потому в первую очередь необходимо осуществить объектную декомпозицию и представить систему в виде взаимодействующих между собой классов. Чтобы модель была понятна и разработчикам, нужно задокументировать ее. Построить IDL -описания по UML -модели поможет пакет Rational Rose.

Разработайте порядок действий, в соответствии с которым будете создавать реализации объектов. Выделите в готовой модели атомарные объекты, не зависящие от других, они и станут кандидатами на первоочередное создание и отладку. Неплохо подумать и о размещении объектов в сети, согласуясь с топологией последней. В итоге образуется четкая последовательность инсталляции готового кода, определятся виртуальные домены.

Описание и трансляция интерфейсов

Готовая модель системы содержит классы, которые должны быть описаны с помощью языка IDL.Далее это описание можно транслировать с помощью IDL -компилятора в базовые исходные тексты на конкретном языке программирования (заглушки и скелетоны) или добавить IDL -описания в репозиторий интерфейсов.

Антон Зубеков
Антон Зубеков

Здравствуйте, подскажите пожалуйста где можно достать материалы по курсу Кросс-платформенные и многозвенные технологии, о которых говориться, к примеру, в Лекции 2. Пример "Служба мгновенных сообщений"