Обзор статей журнала DBMS, vol.10, N 4, April 1997 (11.06.97)
С. Кузнецов, ЦИТ
Tackling Toolsets
Robin Schumacher, senior DBA and developer with Louisville Gas and Electric
E-mail: robins@ka.net, Home page: www.ka.net/robins
На выбор средств разработки приложений влияют две категории
соображений. Первая категория относится к виду платформы, для
которой будет проводиться разработка. Можно выделить следующие
виды платформ.
Настольные платформы: однопользовательские (или используемые
небольшими группами пользователей) системы, в которых не
обязательно используется сервер баз данных. Примером может
служить система Microsoft Access, с помощью которой лаборант
может сохранять результаты своих экспериментов.
Корпоративные платформы: приложения масштаба рабочей группы или
всей компании, которые почти всегда опираются на использование
связи с одной или несколькими базами данных. Примером такого
приложения может быть больничная система регистрации, которая
используется как регистрирующим персоналом, так и другими
служащими больницы.
Internet: базирующиеся на Internet или Intranet Web-приложения,
которые могут быть статическими или обращаться к СУБД с запросами
данных. Статическое Web-приложение может служить для
распространения рекламы корпорации и, возможно, для сбора заявок
на получение более подробной информации. Динамическое, связанное
с базой данных Web-приложение может, например, дать возможность
врачу получить данные о пациенте из базы данных больницы с
помощью Web-браузера.
Вторая категория соображений относится к типу программирования,
который навязывается самим средством разработки:
3GL. К этому типу относятся средства, основанные на использовании
систем программирования языков C, C++ и чистого диалекта Java.
Очевидно, что они требуют более детального программирования, чем
средства быстрой разработки приложений (Rapid Application
Development - RAD). С другой стороны, приложения, разработанные с
использованием 3GL, обычно быстрее выполняются.
4GL или средства визуальной разработки. Многие из этих средств
производят откомпилированный машинный код и обеспечивают более
простую связь с базами данных посредством средств 3GL, позволяя
производить разработку приложений в стиле RAD (Rapid Application
Development - быстрая разработка приложений). Достаточно
взглянуть на Delphi (Borland) или PowerBuilder (Powersoft), чтобы
оценить, насколько использование 4GL облегчает создание
приложений баз данных с графическим интерфейсом (GUI - Graphical
User Interface) по сравнению с применением С++.
Средства разработки, основанные на использовании браузеров.
В области разработки приложений наблюдается сдвиг от классических
исполняемых приложений к приложениям, базирующихся на браузерах,
в которых используются HTML-страницы, компоненты и встроенные
скрипты. Примером средства, создающего основанные на браузерах
приложения, является HAHTSite. В отличие от клиент-серверных
приложений, в приложениях, основанных на использовании браузеров,
используется модель HTML в дополнение к модели непосредственно
исполняемых приложений.
При наличии небольшой компании можно обойтись использованием
настольных платформ. Однако, если имеется большая, динамичная
организация, может потребоваться разработка, охватывающая все три
платформы: настольные, корпоративные и Internet. Тогда нужно
подыскать подходящего поставщика. Возникает вопрос: Насколько
много нужно знать, чтобы добиться того, что нужно? Похоже, что
наиболее оптимальное решение дают 4GL. Если же прикладная область
ориентирована на использование Internet, то требуется применение
3GL, основанных на языке Java.
Многое число приложений ориентировано на использование одним или
небольшим числом пользователей. С этим связана тенденция к
расширению круга мобильных (mobile - не привязанных к конкретному
месту) или удаленных пользователей. Многие из средств,
поддерживающих этот стиль разработки, обеспечивают полную среду
разработки (IDE - Interactive Development Environment), связь с
базами данных, а также возможности GUI, генерации отчетов и связь
с Internet. К наиболее распространенным средствам относятся
Microsoft Access и Borland Visual dBase. Для эффективной
разработки подобных приложений разумно использовать продукты 4GL,
многие из которых являются Basic-подобными. Редко требуются более
тонкие возможности таких 3GL, как C или C++. Для построения
солидной настольной системы может понадобиться умение работать с
языком SQL, а при использовании некоторых средств разработки -
конкретных диалектов языков баз данных.
В последние несколько лет популярным средством разработки
настольных прикладных систем являлся продукт Microsoft Access, в
то время как более старые средства семейства Xbase и Paradox
(теперь принадлежит компании Corel Corp.) до некоторой степени
утратили свои позиции. Рынок настольных систем также является
областью распространения Visual Basic и PowerBuilder Desktop
Edition (Powersoft). При ориентации на разработку именно
настольных систем трудно конкурировать с Microsoft Access.
Наличие хорошей реляционной СУБД, интегрированной со средствами
разработки графических пользовательских интерфейсов и генерации
отчетов, дает возможность как новичкам, так и профессионалам
производить работоспособные и выразительные приложения. Access
развивается в сторону сопряжения с Web-системами. В Access 97
добавлен новый тип данных "hyperlink", значения которого можно
использовать для связи с узлами Internet. Разработчики могут
встраивать связи в базу данных и предоставлять пользователям
возможность выбора в многообразии Сети. При выборе связи
вызывается браузер, назначенный ей по умолчанию, и отображается
Web-страница. Основным недостатком настольных систем является то,
что они недостаточно хорошо масштабируются. Можно привести массу
примеров, когда люди с использованием Microsoft Access пытались
разработать среднюю или большую систему уровня отдела или
корпорации и потерпели неудачу.
При переходе к разработки корпоративных приложений приходится
сталкиваться с возрастающей сложностью и другими проблемами,
которые нехарактерны на более мелких приложений. Например,
однопользовательские системы часто создаются одним разработчиком,
в то время как корпоративные приложения обычно разрабатываются
коллективом. Следовательно, требуется поддержка коллективного
труда, в том числе, управление версиями. Необходимо также
учитывать, что корпоративные системы обычно связаны с серверами
баз данных с помощью сети, в то время как настольные приложения,
как правило, работают с базами данных, хранящимися в том же
компьютере.
Для того, чтобы правильно выбрать средство разработки
корпоративной информационной системы, следует оценить потребности
корпорации, возможности ее персонала и составить список
необходимых качеств средств разработки. Следует начать с того,
что большинство компаний не связывают свою активность только с
одним поставщиком СУБД. Поэтому выбираемое средство разработки
должно быть в состоянии работать с набором наиболее популярных
серверов баз данных. Обычно доступ к базам данных производится
либо на основе собственных драйверов поставщика, либо на базе
ODBC. Собственные драйверы обычно обладают лучшими
характеристиками и скорости, и надежности. Примером продукта, в
котором используются собственные драйверы, является Team
Developer компании Centura Software Corp., который поддерживает
связь со многими популярными реляционными СУБД. Это не означает,
что подход ODBC плох; в некоторых случаях без специальных функций
ODBC просто невозможно обойтись. Просто это другой уровень, через
который должно пройти приложение, чтобы достичь данных. Примером
средства разработки, основанным исключительно на ODBC, является
Visual Basic. Некоторые средства поддерживают оба способа
доступа; примеры - Magic (Magic Software Enterprises Inc.),
PowerBuilder и Developer/2000 (Oracle Corp.). Другим важным для
некоторых компаний соображений является возможность средства
разработки производить кросс-платформенные приложения. Могут ли,
например, использовать одно и то же корпоративное приложение
пользователи NT и Macintosh? При создании кросс-платформенных
систем следует избегать использования специальных возможностей,
которые не поддерживаются на каждой платформе (например, OLE).
Примерами средств разработки, которые близки к удовлетворению
подобных требований, являются JAM (JYACC, www.prolitics.com),
Magic, Passport IntrPrise (Passport Corp.), Unify (Unify). Однако
нужно иметь в виду, что кросс-платформенные средства разработки
не дешевы.
Примерно год тому назад возможность разделения приложений
являлась требованием к любому хорошему средству разработки в
архитектуре "клиент-сервер". В настоящее время большее внимание
уделяется разделению Web-приложений. Web-серверы и другие
программы, выполняемые в Web-узле, составляют дополнительное
звено в добавок к браузерам клиента, базе данных и даже другим
серверам, таким как серверы приложений категории реляционных или
многомерных OLAP. После появления DCOM использование
многозвенных приложений будет нарастать. В сообществе Internet
увеличивается интерес к распределенным архитектурам, основанным
на подходе CORBA. Недостатком n-звенной архитектуры является то,
что возрастает число потенциально сбойных узлов, и увеличивается
трафик сети. Тем не менее, если этот подход устраивает, рынок
предлагает основательные средства: Dynastry, Forte, Allegris
(новый продукт компании Intersosv Inc.) и PowerBuilder 5.0.
Некоторые компании предлагают несколько средств для построения
n-звенного приложения. Например, может использоваться Delphi при
разработке логики приложения на основе Borland C++ с
применением Borland C++ Toolkit.
Реально, очень много зависит от возможностей персонала вашей
компании. Можно пользоваться двумя разными способами выбора
средств разработки. Во-первых, можно не обращать внимание на
возможности персонала. Второй подход подразумевает строгий учет
сильных и слабых качеств разработчиков и выбор средства, освоение
которого по силам корпорации. Часто эти соображения приводят к
выбору средств 3GL или 4GL. Большая часть коммерческого
программного обеспечения написана на языках C или C++, и
использование этих языков оправдано при наличии достаточно
квалифицированных разработчиков. При ориентации на использование
3GL следует обратить внимание на такие продукты как Microsoft
Visual C++, Borland C++ и Watcom C++ (последний из перечисленных
продуктов принадлежит Sybase Inc.). Для доступа к базам данных
можно использовать dbtools.h++ от компании Rogue Wave Software
Inc.
Следующий шаг на пути выбора средств разработки должен включать
перечень требований к объектной ориентированности
(Object-Oriented Approach - OO). От разработчика требуется не так
много времени, чтобы понять принципы наследования, полиморфизма и
инкапсуляции. Вместе с тем, применение этих принципов позволит
получить более "чистый" код за более короткое время. Средства
уровня 4GL (например, PowerBuilder), как правило, поддерживают
этот метод разработки приложений. Тем не менее, для полезного
использования подхода OO требуется его основательное понимание.
Возможно, проще использовать основанные на графических
интерфейсах средства 4GL, чем 3GL (например, Delphi или Team
Developer компании Centura).
Большинство современных средств разработки одновременно
поддерживает возможность создания Web-приложений. В частности,
Developer/2000 (Oracle) и Internet Developer's Toolkit
(Powersoft) обеспечивают такие возможности. С использованием
Web.PB можно конструировать распределенные приложения на основе
PowerBuilder, обеспечивающие доступ к базам данных на основе
стандартных браузеров. Но это дорого стоит (базовый комплект - от
$2,500 до $5,000); при этом нужно учитывать потребность в
приобретении сопутствующих продуктов (библиотеки классов,
драйверы ODBC, средства управления версиями и т.д.).
Если корпорации требуются статические Web-страницы, можно
пользоваться любимым редактором текстов с последующей его
конвертацией в формат HTML. Например, можно пользоваться
редактором Microsoft Word при поддержке Doc-To-Help (Wextech
Systems Inc.) или продуктов RoboHelp и WinHelp (Blue Sky Software
Corp.). Для создания простых форм для связи с базами данных можно
использовать Microsoft FrontPage 97. Для создания динамических
Web-приложений в настоящее время нет законченных инструментальных
средств, однако компания Symantec Corp. успешно продвигается на
пути к объявлению полной среды Java-программирования. Компания
Microsoft со своим продуктом Visual J++ тоже движется в этом
направлении.
Inside DCOM
Mark Roy, a principal consultant at Semaphore, E-mail: mroy@sema4usa.com
Alan Ewald, a software architect at NobleNet Inc. E-mail: aewald@noblenet.com
На основе спецификации CORBA, разработанной Object Management
Group, выпущен ряд программных продуктов, которые поддерживают
распределенную объектную обработку. Теперь профессионалы в
области программного обеспечения должны серьезно заинтересоваться
другой распределенной объектной архитектурой, созданной в
компании Microsoft Corp. и получившей название Distributed COM,
или DCOM. DCOM является расширением компонентной объектной модели
(Component Object Model - COM), которая в течение многих лет
входила как составная часть в операционные системы семейства
Windows и на основе которой были разработаны OLE и ActiveX. COM
позволяет разработчикам использовать в качестве абстракции
интерфейсы компонентов и обеспечивает бинарные (заранее
откомпилированные) класса, реализующие эти интерфейсы.
Поддерживается строгая инкапсуляция объектов, так что из
клиентского приложения можно вызвать только те функции, которые
определены в интерфейсе объекта. Стандарт бинарной
интероперабельности COM стимулирует независимую разработку
программных компонентов и их распространение в бинарной форме.
DCOM расширяет COM для использования в сетевой среде с
применением удаленных вызовов методов, средств безопасности,
масштабирования и прозрачности местоположения объектов. Поскольку
возможности DCOM становятся доступными на платформах, отличных от
Windows NT и Windows 95, компании могут создавать программное
обеспечение с использованием существующей инфрастуктуры с
доступом к унаследованным (legacy) приложениям и базам данных.
В COM интерфейс определяет поведение или возможности программного
компонента в виде набора методов и свойств. Каждый объект COM
должен поддерживать по меньшей мере один интерфейс (с именем
IUnknown), но может одновременно поддерживать и несколько
интерфейсов. Для описания интерфейсов компонентов используется
язык определения интерфейсов компании Microsoft (Microsoft's
Interface Definition Language - MIDL), объектно-ориентированное
расширение DCE RPC IDL. Имеется компилятор MIDL, который
генерирует код прокси (proxy) и стабов (stub) на языках Си и
Си++. Сгенерированный код прокси поддерживает на стороне клиента
интерфейс прикладного программирования (Application Programming
Interface - API), к объектам, реализующим соответствующий
интерфейс. Объекты-стабы декодируют поступающие заявки клиентов и
доставляют их нужному объекту на стороне сервера. Внутреннее
взаимодействие прокси и стаба с целью обмена заявками и ответами
реализуется с помощью соответствующих библиотек времени
выполнения. Программное обеспечение COM оптимизирует
взаимодействие процессов, если они сосуществуют в одном процессе.
Каждому интерфейсу сопоставляется уникальный идентификатор
(Interface Identifier - IID), устраняющий потенциально возможные
коллизии имен. На наличии IID основана также модель управления
версиями. Каждый объект COM должен поддерживать по меньшей мере
один стандартный интерфейс IUnknown, в котором обеспечиваются
базовые строительные блоки для управления жизненным циклом
объекта и возможности постепенного эволюционирования интерфейсов
объекта. Метод QueryInterface интерфейса IUnknown используется
клиентами для определения того, поддерживается ли данным объектом
интерфейс с идентификатором IID. Со временем объект может начать
поддерживать новые интерфейсы или новые версии существующих
интерфейсов. Существующие клиенты могут продолжать поддерживать
ранние версии интерфейсов, а новые клиенты могут узнать о
существовании новых версий интерфейсов путем вызова метода
QueryInterface. Этот метод возвращает указатель интерфейса,
ссылающийся на структуру данных, организованную в соответствии со
стандартом двоичной интероперабельности COM.
Интерфейсов самих по себе недостаточно для построения полных
COM-приложений. Класс COM - это тело исходного текста, которое,
помимо прочего, является реализацией одного или нескольких
COM-интерфейсов. Класс обеспечивает реальные функции для любого
метода интерфейса, представленные на любом поддерживаемом языке
программирования. Каждый COM-класс обладает уникальным
идентификатором, называемом CLSID. Для взаимодействия с
компонентом приложение-клиент должно знать (или быть в состоянии
узнать) по меньшей мере один CLSID и IID интерфейса, который
поддерживается этим классом. С использованием этой информации
клиент может запросить COM создать объект и вернуть
соответствующий указатель интерфейса.
Один или несколько классов могут быть упакованы в сервер с
использованием одного из нескольких доступных средств. COM-сервер
может быть упакован как динамическая библиотека связи (Dynamic
Link Library), которая загружается в процесс клиента при первом
доступе к серверу. Такой сервер называется внутрипроцессным. К
категории внутрипроцессных серверов относится сервер управления
ActiveX. COM-сервер может быть упакован в виде отдельной
выполняемой программы. Серверы этого типа могут выполняться в той
же машине, что и клиент, или в удаленной машине, доступной
посредством DCOM. Такие серверы называются внепроцессными. Код
клиента для взаимодействия с различными видами COM-серверов один
и тот же. Клиентские приложения взаимодействуют с объектами COM
на основе указателей интерфейсов. Инкапсуляция, обеспечиваемая
COM, гарантирует, что клиент не зависим от всех деталей
реализации объекта COM.
Каждый COM-объект является экземпляром COM-класса. Каждый
COM-класс ассоциируется с другим COM-классом, называемом фабрикой
классов, задача которой состоит в создании экземпляров классов
COM. Фабрика обычно поддерживает стандартный интерфейс,
определенный в модели COM и называемый IClassFactory. При наличии
известного CLSID и описания ассоциированного с ним COM-сервера
служба поддержки времени выполнения COM может найти фабрику для
этого CLSID. После создания COM-объекта COM использует
стандартный протокол для отслеживания существующих ссылок на
объект и распознавания ситуаций, в которых объект может быть
уничтожен. Когда счетчик числа ссылок становится равным нулю,
предполагается, что больше никто из клиентов не ссылается на
объект, и его можно уничтожить. Любой из методов, возвращающих
указатель на интерфейс, должен вызвать метод AddRef, чтобы
оповестить COM о наличии новой ссылки на объект. Клиенты,
использующие указатели на объекты, должны вызвать метод Release
до того, как прекратить доступ к объекту через существующий
указатель.
В центре архитектуры COM находится интероперабельность
компонентов. В документации COM определен стандарт бинарных
вызовов, в котором определено расположение данных в стеке для
всех вызовов методов. В DCOM этот стандарт расширен за счет
спецификации сетевого протокола интероперабельности. Бинарный
стандарт обеспечивает возможность использования готовых
компонентов без потребности доступа к исходным текстам. В этом
стандарте указатель на интерфейс определяется как ссылка на
таблицу функций. Для внутрипроцессных серверов таблица функций
содержит ссылки на реальные функции, реализующие объект. Для
внепроцессных серверов таблица функций ссылается на
прокси-функции.
Ключевым свойством архитектуры COM является прозрачность
упаковки. Разработчики могут распространять компоненты в виде DLL
или выполняемых программ. Клиентские приложения не должны
заботиться о том, что представляет из себя сервер. Клиент может
ограничить вид сервера, но не обязан делать это. Библиотека
COM определяет место расположения запрашиваемого класса и
устанавливает соединение между клиентом и сервером. COM
обеспечивает этот сервис путем опроса реализаций COM-классов с
тем, чтобы зарегистрировать в локальном режиме тип сервера и
место расположения его DLL или отдельно выполняемого кода.
Менеджер управления сервисами (Service Control Manager - SCM) COM
производит поиск CLSID в системе локальной регистрации и
предпринимает соответствующие действия для активизации сервера.
Разработчики не взаимодействуют с 4SCM напрямую. 0Библиотечные
функции COM используют 4ю 0т 4SCM при запросе создания объекта или
4установлении места расположения фабрики классов.
DCOM расширяет COM возможностями работы в сети. Во-первых, это
касается расширенных возможностей прозрачности местоположения;
объект может существовать где угодно в сети. Протокол "Object RPC
(ORPC)" DCOM расширяет RPC средствами указания типа объектного
указателя. Когда объект обращается к фабрике классов COM на
предмет создания удаленного объекта, локальный SCM контактирует с
SCM на удаленной машине. Локальный SCM обнаруживает
местоположение сервера и запускает его, а также возвращает
RPC-подключение к запрошенной фабрике классов. Для клиентского
приложения создается прокси фабрики классов, и создание объекта
продолжается так же, как в несетевом варианте. При наличии
соответствующих административных установок клиенты могут получить
доступ к объектам DCOM на удаленных машинах без потребности
специального сетевого программирования. Кроме того, клиенты могут
указать удаленный узел, к которому следует обратиться при
создании нового объекта DCOM.
На возможности масштабируемости распределенных объектных систем
влияют несколько факторов. Для достижения наивысшей
производительности на одной машине обычно требуется использование
многопотоковых (multithreaded) серверов. Это обеспечивает
эффективное применение мультипроцессорных машин. В DCOM
многопотоковый стиль доступен для использования сервера в любом
рассмотренном раньше режиме. При использовании модели
асинхронного выполнения программ, внедренной в Windows NT 4.0 и
получившей название "свободной многопотоковости" (free threading)
каждый вызов объекта может обслуживаться в отдельном потоке;
несколько вызовов одного объекта могут выполняться в разных
потоках. С помощью специальных примитивов можно запретить
многопотоковость для всех объектов, однако для приложений,
требующих особо высокой эффективности, требуется расплачиваться
повышенной сложностью.
DCOM обеспечивает поддержку нескольких уровней безопасности,
которые могут быть выбраны в соответствии с потребностями
разработчика и администратора. Один и тот же компонент может быть
использован в среде без требований безопасности и в среде с очень
строгими требованиями безопасности. Для каждого компонента
поддерживаются списки контроля доступа (Access Control Lists -
ACL). Чтобы соблюдать высокий уровень безопасности, можно
управлять ACL с помощью средства, называемого DCOMCNFG. С
использованием этого средства администратор может определить,
какие пользователи и группы имеют доступ к конкретным объектным
серверам на данной машине. Дополнительный уровень безопасности
указывает на возможность запуска сервера. По умолчанию только
администратор может запускать удаленные объекты DCOM. Более
тонкая безопасность достигается путем явного добавления
соответствующего кода к методам объектов.
Одной из проблем разработчиков распределенных приложений является
создание серверов, которые могут распознать исчезновение своих
клиентов. Типичное решение состоит в использовании служебных
сообщений, подтверждающих, что процесс-партнер все еще жив. В
мире распределенных объектов такой подход существенно нагружает
сетевой трафик. Для оптимизации в DCOM используются сообщения на
межмашинном уровне: независимо от числа клиентских процессов на
одной машине и серверных компонентов на удаленной машине
посылается одно служебное сообщение. Если клиент исчезает, DCOM
распознает это событие и вызывает метод Release через указатель
интерфейса соответствующего сервера. Дополнительная оптимизация
состоит во включении служебных сообщений в обычные
сообщения-заявки. Кроме того, в DCOM реализован компонент Object
Exporter, который следит за объектами и объектными ссылками,
полученными из других машин.
Управление и конфигурирование крупномасштабных распределенных
сред остается сложной задачей. DCOM поддерживает средства для
облегчения этой работы, но она все еще не является тривиальной.
Каждый распространяемый компонент должен быть зарегистрирован на
индивидуальных клиентских машинах и на одной или нескольких
серверных машин. При возрастании числа компьютеров и компонентов
менеджеры сети сталкиваются с проблемой балансировки загрузки
сети клиентскими заявками. В DCOM нет встроенной поддержки
балансировки. Если приложение не производит динамическую
балансировку, менеджер сети должен статически конфигурировать
среду так, чтобы указанные клиентские машины использовали
конкретный сервер. При перемещении компонента на другую
машину-сервер все ссылки на старую машину должны быть изменены.
DCOM является составной частью Windows NT 4.0; производится
окончательное бета-тестирование для среды Windows 95. Можно
переписать версию Developer Beta RC2 с Web-сервера компании
Microsoft и испытать ее самостоятельно. Бета-версия DCOM для
платформы Solaris доступна от компании Software AG. В течение
1997 г. ожидается появление версий продукта для платформ IBM MVS,
OS/400, AIX, HP-UX, Digital UNIX, OpenVMS, Linux и UnixWare
компании SCO.
DCOM применяется в двух новых технологиях компании Microsoft.
Во-первых, это Directory Services, которые должны появиться в
Windows NT 5.0 и обеспечить масштабируемое хранилище указателей
на объекты и информации, касающейся безопасности. Вторая
технология применяется в Microsoft Transsaction Server, который
начали поставлять в начале 1997 г. Кроме того, COM и DCOM
применяются для обеспечения доступа к базам данных. Стандарт
компании Microsoft OLE DB специфицирует способы
интероперабельности баз данных и доступа к ним со стороны
приложений.
Координаты компании: Microsoft Corp., www.microsoft.com
Обзор подготовлен С.Кузнецовым, Центр Информационных Технологий, 11 июня 1997 года