Архитектура создания распределенных приложений Common Object Request Broker Architecture (CORBA) появилась несколько лет назад, но до настоящего времени продукты на базе CORBA никак не были связаны с рынком (см. также статью М. Аншиной "Биография бизнес-объекта" в "Мире ПК", № 11/98, с. 54). Однако многокомпонентные системы, подогнанные под задачи заказчика, уже вытесняют пакеты инсталлируемых приложений. И что удивляться, если через пару лет спрос на CORBA-программистов значительно превысит спрос на специалистов по копанию в недрах операционной системы.

Пока на рынке CORBA превалирует ПО, созданное на Cu++. И все же медленно, но верно на первый план выходит технология Java, что обусловлено ее отличной переносимостью, поэтому мы опишем средства CORBA для языка Java.

Наиболее распространены два пакета создания приложений CORBA для Java. Один, Inprise VisiBroker 3.2 for Java, входит в состав популярного пакета Borland JBuilder 2 Client/Server Suite, а также существует как отдельный продукт. Другой пакет, OrbixWeb 3.0, выпускается компанией IONA Technologies. Оба продукта представляют собой комплекты утилит, библиотек и брокеров объектных запросов (ORB) — "информационных магистралей" для приложений на основе CORBA. Это, пожалуй, одни из немногих продуктов (не считая ОС UNIX), которые содержат не только среду выполнения, но и необходимые средства разработки.

Inprise VisiBroker 3.2

В настоящее время многие эксперты называют пакет VisiBroker негласным стандартом средств разработки CORBA-систем. Созданный компанией Visigenic Software, которая вошла в корпорацию Inprise, пакет VisiBroker перешел к Inprise по наследству.

В составе пакета собственный брокер объектных запросов (ORB) с адаптером объектов (Basic Object Adapter — BOA), с помощью которого объекты и приложения связываются и взаимодействуют друг с другом, имеются служба имен и событий (Naming and Event Services), набор утилит и proxy-сервер Gatekeeper.

Брокер объектных запросов

ORB в VisiBroker представляет собой набор из нескольких сотен классов, упакованных в архив формата JAR. Один только файл манифеста, в котором описаны имеющиеся в архиве классы, занимает более 60 Кбайт! Возможно, это даст вам представление, насколько сложен ORB. Брокер объектных запросов из поставки VisiBroker полностью соответствует спецификации CORBA 2.0. Программисты компании Visigenic должны были потратить уйму времени и сил, дабы создать продукт на основе спецификации в более 900 страниц. Но, надо сказать, брокер удался. ORB может быть развернут на различных платформах, чему в немалой степени способствует применение языка Java. Брокеры общаются между собой на языке протокола Internet Inter-ORB Protocol (IIOP) версии 1.1. Этот протокол является частным случаем протокола GIOP, принятого в качестве стандарта для коммуникации брокеров, и настроен на использование сетевого протокола TCP/IP. Благодаря IIOP обеспечивается обмен объектами, созданными с помощью систем разработки разных производителей, что очень важно для клиента.

Неотъемлемой частью ORB компании Inprise является адаптер объектов (BOA). Через BOA брокер общается с серверами, предоставляющими экземпляры объектов, т. е. BOA выполняет роль соединительного звена между клиентами, брокером объектных запросов и серверами CORBA.

Брокер ORB реализует специальные программные интерфейсы, называемые интерцепторами (interceptors). Поэтому CORBA-приложения могут легко перехватывать (откуда и идет название "интерцепторы") запросы и сообщения, курсирующие через ORB между объектами и клиентскими программами. Это, в свою очередь, дает массу преимуществ. К примеру, вы можете написать приложение, следящее за нагрузкой в системе и отслеживающее ошибки, возникающие в процессе ее функционирования. Интерцепторы расширяют ORB, становясь его составной частью, поэтому можно установить интерцепторы друг на друга, реализуя каскадную передачу информации. Этого более чем достаточно для тонкой "подгонки" брокера под любые проектные требования.

Заметим, что именно VisiBroker был выбран компанией Netscape в качестве штатного брокера для браузера Netscape Communicator и сервера Enterprise Server 3.2.

Компиляторы

Да, именно компиляторы, потому что их три! Один, idl2java, — стандартный компилятор CORBA, генерирующий все необходимые для создания распределенных приложений файлы по исходному тексту на языке определения интерфейсов (IDL). Среди получаемых файлов имеются скелеты (skeletons), заглушки (stubs), привязки (tie), операции (operations) и даже примеры реализации объектов.

Два других компилятора представляют собой составляющие части новой технологии Caffeine, позволяющей получать распределенные приложения, беря за основу уже откомпилированные интерфейсы Java, порожденные от прародителя всех объектов CORBA — интерфейса org.omg.CORBA.Object. Для автоматизированного получения скелетов и заглушек запускается компилятор java2iiop. Если же запустить еще один компилятор java2idl, то результатом его работы будет файл с исходным текстом на языке IDL. Его можно поместить в репозитарий интерфейсов, чтобы другие программы и объекты могли динамически получать информацию о вашем объекте. На основе IDL-файла можно сгенерировать базовые файлы распределенного приложения, используя для этого системы разработки CORBA-приложений от разных поставщиков или языки программирования, отличные от Java.

Утилиты

Пакет VisiBroker обладает полноценным набором утилит для управления процессом создания CORBA-приложений и их развертывания. Основная работа выполняется утилитой Smart Agent (osagent), отвечающей за поиск объектов для клиентских программ. Действия ее не видны, но без нее не могут функционировать многие другие утилиты VisiBroker. К примеру, на результаты работы Smart Agent опирается служба поиска экземпляров объектов (Location Service), представленная в виде еще одной утилиты — locserv.

Специальная утилита-демон Object Activation Daemon (oadj) отвечает за активацию серверов, соответствующих запросам клиентских программ. Когда ваша программа обратится к объекту, oadj постарается обнаружить сервер этого объекта, и, если информация о нем имеется в репозитарии реализаций (implementation repositary), будет произведен его автоматический запуск (активация). Утилита oadj — умная программа, поэтому она не станет запускать сервер, если он уже где-то "крутится". А для того чтобы зарегистрировать объект в репозитарии реализации, имеется утилита oadutil. С ее же помощью можно удалить объект из репозитария реализаций, а также посмотреть список всех зарегистрированных объектов.

Для управления специализированной базой данных под названием "репозитарий интерфейсов" используется утилита irep, представляющая собой специальный сервер, хранящий информацию об интерфейсах объектов, о различных типах данных и т. п. Утилита irep — комбинированная консольно-графическая программа. Если указать ключ в командной строке -console, то графический интерфейс спрячется и все управление будет производиться из консольного окна. Иначе команды отдаются через меню окна (рис. 1).

В свою очередь irep утилита idl2ir пополняет репозитарий новой информацией об интерфейсах и типах, беря ее из файлов, написанных на языке IDL — штатном языке CORBA.

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

Gatekeeper

В комплекте VisiBroker поставляется proxy-сервер Gatekeeper, позволяющий аплету-клиенту обращаться к объектам по сети даже в тех случаях, если соединение происходит через брандмауэр или браузер настроен на максимальную степень защиты. Аплеты могут устанавливать процедуры обратного вызова и соединяться с объектами посредством туннельного HTTP — способа связи, применяемого при невозможности соединения по протоколу IIOP по соображениям безопасности данных. К тому же Gatekeeper может служить в качестве простого Web-сервера.

Gatekeeper — очень сложный и многофункциональный продукт. Об этом свидетельствует объем руководства (56 страниц). Диалоговая панель настройки, доступная администратору или программисту при использовании специальной утилиты конфигурации Gatekeeper Configuration Manager (gkconfig), очень насыщена. Отсюда можно управлять туннелированием, защитой SSL, процедурами обратного вызова, портами и другими немаловажными параметрами (рис. 2).

В настоящий момент пакет Inprise VisiBroker переживает свой технологический расцвет. Будучи весьма надежной системой, VisiBroker весьма хорошо продается, вокруг него формируется инфраструктура из различных дополнений и расширений, позволяющих выстраивать немыслимые распределенные информационные системы. Уже сейчас можно приобрести транзакционное расширение VisiBroker ITS, систему защиты VisiBroker SSL и выполненный как графическое приложение менеджер VisiBroker Manager, значительно упрощающий разработку, развертывание и обслуживание построенных на базе VisiBroker распределенных приложений.

Среди компаний, использующих в своих корпоративных и пользовательских продуктах Inprise VisiBroker, такие известные имена, как Netscape, Oracle, Novell, Sybase и Hitachi.

IONA Technologies OrbixWeb 3.0

OrbixWeb — весьма зрелая система, появившаяся, по меркам CORBA, очень давно и соответствующая спецификации CORBA 2.0.

Внедрение OrbixWeb прошло весьма успешно и в Америке, и в Европе. Когда в Старом Свете ищут специалистов по CORBA, в первую очередь имеют в виду людей, обладающих опытом работы с OrbixWeb. В Соединенных Штатах эта система мирно уживается с таким монстром, каковым является Inprise VisiBroker, и различными более мелкими CORBA-изделиями.

Брокер объектных запросов

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

В пакете OrbixWeb применена очень гибкая модель потоков выполнения. Многие продукты используют потоки, порождаемые вызовами соответствующих функций операционной системы, а установив OrbixWeb, пользователь получает многопоточную среду без обращения к операционной системе. Такая развязка в итоге приводит к повышению производительности. К тому же есть возможность задавать такой базис запуска потоков, как "на каждый сервер", "на каждый объект" и даже "на каждый запрос". Количество потоков, выделяемых для обработки запросов и соединений, регулируется, что, впрочем, умеет делать и Inprise VisiBroker.

Брокер объектных запросов IONA OrbixWeb располагает инструментами, аналогичными интерцепторам в VisiBroker. Только здесь они называются фильтрами, получающими управление и при передаче объектного запроса и при посылке ответа на запрос, поэтому они идеально подходят для осуществления многих поточных операций, таких, например, как шифровка и сжатие данных.

Модель перехвата управления в OrbixWeb допускает еще одно расширение — загрузчик (loader). Получение запроса на загрузку какого-либо сервера вызывает его чтение с диска и запуск в некоем адресном пространстве. Загрузчик отслеживает этот процесс и вклинивается в него, чтобы выполнить необходимое действие. Типичное применение загрузчиков — сохранение и восстановление состояния объектов. Для программистов на Java это известный факт, примерно таким же образом действует сериализация в компонентах JavaBeans.

И наконец, OrbixWeb дает программисту прекрасную возможность создавать "умные proxy-объекты", т. е. расширять вручную операции, которые proxy-объекты обычно выполняют автоматически. Чаще всего это применяется для оптимизации распределенных систем, кэширования данных для снижения трафика в сети и повышения эффективности передачи запросов.

Несмотря на соответствие OrbixWeb 3.0 спецификациям Object Management Group, разработчики из IONA Technologies проявляют некоторую "самодеятельность", периодически добавляя в свою реализацию ORB собственные нестандартные расширения. К примеру, в книгах по CORBA часто рекомендуется получать и инициализировать адаптер объектов BOA через метод BOA_init брокера объектных запросов. После этого нужно проделать несколько шагов для экспорта объекта в распределенной системе. В OrbixWeb предложен другой способ. Он проще стандартного, и для него требуется меньше строк исходного текста. Иначе именуются и объекты в OrbixWeb, хотя они и не противоречат стилю, принятому в CORBA. Еще раз мы сталкиваемся с тем, что, приобретя даже очень хороший продукт, нужно быть готовым к его "подгонке" под запросы производства.

Компиляторы

В OrbixWeb используются два компилятора. Один из них, idl, предназначен для трансляции описаний интерфейсов и модулей, выполненных на языке IDL, в набор файлов, пригодных для трансляции любым компилятором Java. Компилятор idl очень удобен, к тому же обладает дюжиной полезных ключей. К примеру, можно определить генерацию исходных текстов, полностью совместимых с рекомендациями OMG, или задать альтернативный путь к каталогу, в который компилятор положит получаемые после трансляции файлы.

Компиляция уже готовых приложений производится программой owjavac. К слову, этот файл можно назвать компилятором лишь условно — это по сути оболочка вокруг стандартного компилятора Java из JDK. Даже большая часть опций командной строки повторена для удобства, так что привыкать к среде OrbixWeb разработчику не нужно — компилятор сам знает, что и где искать.

Утилиты

Утилит в OrbixWeb 3.0 — хоть пруд пруди. Значительная часть их выполнена в виде командных файлов, запускающих виртуальную машину Java с тем или иным классом. Так что OrbixWeb — это продукт, который можно демонстрировать как пример успешного внедрения технологии и языка Java.

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

Очень трудно конкурировать с OrbixWeb по части графических утилит. Взять, например, Configuration Tool. С помощью этого инструмента легко читать и изменять информацию о конфигурации CORBA-приложений, создаваемых с применением OrbixWeb (рис. 3).

Кроме того, в Configuration Tool интегрируется управление другими продуктами IONA, в частности OrbixNames.

Для управления репозитарием реализаций используется утилита Server Manager. С помощью ее удобного интерфейса вы сможете задать информацию о местоположении серверов CORBA, методе их активации и атрибутах доступа (рис. 4).

И еще с десяток всяких полезных программ вы найдете в каталоге, где установлен OrbixWeb. Имеется даже специальная утилита-ассистент v2tov3 для переноса приложений, выполненных для предыдущих версий OrbixWeb.

Все утилиты завязаны на так называемый демон OrbixWeb Daemon, выполняющий основную работу по соединению между клиентами и объектами. Здесь IONA Technologies даже предоставляет выбор: воспользоваться демоном командной строки или запустить новый демон Java Activator, созданный целиком на Java. Последний предлагает расширенный сервис. С помощью Activator каждый сервер CORBA может запускаться либо как поток выполнения в уже работающей виртуальной машине Java, либо как самостоятельная виртуальная машина.

Wonderwall

Wonderwall — это система защиты данных OrbixWeb, аналогичная серверу Gatekeeper из пакета Inprise VisiBroker. Wonderwall может быть использована как простой сервер маршрутизации запросов, передавая сообщения протокола IIOP от аплетов к серверу в интрасети. В более сложных случаях, где требуется повышенный уровень защиты, Wonderwall выступает в роли брандмауэра, фильтрующего запросы и протоколирующего весь трафик IIOP.

Как и продукт Gatekeeper, сервер Wonderwall может применять туннелированный HTTP для защищенного обращения к объектам.

В настоящее время известны различные коммерческие решения на OrbixWeb фирмы IONA Technologies для таких известных в мире бизнеса компаний, имена которых говорят сами за себя: Boeing, Credit Swiss, Nike, HongKong Telecom, Motorola Iridium, ELF, BHP, Chevron.

Проблема выбора

Выбрать подходящий продукт для построения распределенных приложений на базе CORBA очень и очень сложно. За OrbixWeb стоит большой опыт внедрения, за VisiBroker — самые последние новинки группы OMG, курирующей спецификации CORBA и другие документы на эту тему. Что касается недостатков, то у VisiBroker это некая сумбурность и отсутствие единой концепции в утилитах. Да и технология Caffeine — довольно спорная штука, к тому же работающая медленно. OrbixWeb требует времени для тонкой настройки и не всегда поспевает за спецификацией CORBA.

Рассматривая документацию, можно сказать, что у VisiBroker она пространнее и лучше подходит для новичка, тогда как технические описания OrbixWeb поменьше и ориентированы больше на знающего человека. К обоим продуктам вместе с бумажной документацией поставляются электронные ее варианты, выполненные в формате PDF.

Надо сказать, что если вы стремитесь к тому, чтобы ваши распределенные системы были самыми современными, вам наверняка подойдет VisiBroker. Зато гибкость настройки OrbixWeb множеством переменных среды и ключей реестра делает его лидером в тех случаях, когда распределенные приложения должны подгоняться индивидуально под заказчика, как хороший костюм. Что же касается JDK 1.2 и IDL2JAVA, то эти инструменты скорее подойдут тем, для кого важным фактором являются деньги, а проекты не отличаются сложностью.

И все же лучше потратить значительную сумму и приобрести вместе с VisiBroker и OrbixWeb техническую поддержку именитых фирм, которая, скорее всего, понадобится в процессе работы над проектами. Тем более что и Inprise, и IONA Technologies предоставляют пробные версии своих продуктов, испытав которые можно понять, что подойдет именно вам.


Sun Microsystems JDK 1.2 и IDL2JAVA

Несколько легкомысленно ставить Java Development Kit в один ряд с такими продуктами, как OrbixWeb и VisiBroker, настолько они неравнозначны. Однако надо учитывать, что JDK - средство бесплатное и, следовательно, распространяющееся очень быстро и многомиллионным тиражом, а это серьезно.

Пакет JDK 1.2 впервые за историю этого программного средства включает в себя классы, образующие брокер объектных запросов (ORB). Перевод из языка IDL в Java производится другим средством - компилятором IDL2JAVA, который, как и JDK, можно найти на сервере Web http://www.javasoft.com.

И все же появление бета-версии JDK 1.2 вызвало ряд проблем. Если вы пожелаете применять JDK 1.2 и другие CORBA-средства, вас ждет масса разочарований. Путем различных ухищрений, конечно, можно заставить их работать вместе. Однако если вы хотите стабильного выполнения распределенных приложений, по-видимому, придется дожидаться, пока компании Inprise и IONA Technologies выпустят следующие версии VisiBroker и OrbixWeb, ориентированные именно на последнюю версию Java Development Kit.