|
| |||||||||||||||||||||||||||||||
| PROGRESS V7 в ракурсе открытых системАвтор: Андрей ОреховИздание: СУБД №2, 1995
Материал этой статьи базируется на достаточно большом личном опыте работы автора с PROGRESS - наше первое знакомство состоялось еще в 1991 году, а также на тесных деловых отношениях с фирмой PROGRESS SOFTWARE - в начале 1993 года наша фирма стала одним из первых дилеров PROGRESS SOFTWARE в СНГ. Подробное освещение средств разработки и сервера БД PROGRESS может и должно явиться предметом отдельных статей, а сейчас мне хотелось бы остановиться на том, как в продуктах фирмы PROGRESS SOFTWARE реализуются принципы открытых систем. 1. Многоплатформность PROGRESSОдно из важнейших требований к открытой системе - ее переносимость на различные программно-аппаратные платформы. Так как PROGRESS построен на архитектуре "клиент/сервер", имеет смысл осветить аспекты переносимости клиента и сервера. 1.1. Сервер PROGRESS и его переносимостьСервер БД PROGRESS может функционировать на множестве платформ - практически всех коммерческих реализациях UNIX, VMS, DOS, Windows, Windows NT, NetWare, OS/2, AS/400 и др. Конкретная реализация сервера для разных платформ может быть самой различной - в средах UNIX и VMS это несколько параллельных процессов, использующих разделяемую память (shared memory) для связи между собой, для DOS/Windows/Novell - это один исполняемый модуль (exe или nlm), обрабатывающий запросы клиентов по очереди, на AS/400 используется встроенная в нее СУБД DB2/400 и т.п. В любом случае детали устройства сервера скрыты от клиента за единообразным интерфейсом, и приложения работают с разными серверами совершенно прозрачно, так что серверы на различных платформах отличаются друг от друга лишь производительностью и пределами масштабируемости. На всех перечисленных платформах в полной мере поддерживаются критичные для профессиональной СУБД механизмы блокировки на уровне записей, обработки транзакций и защиты целостности данных. 1.2. Переносимость "клиента"Средства разработки и исполнения приложений PROGRESS (т.е. "клиент") реализованы для всех платформ, для которых реализован сервер, за исключением, по понятным причинам, только Novell NetWare. Одной из ключевых возможностей PROGRESS является разделение выбора решений для сред разработки приложений и их выполнения. Пользователи могут выбрать среду разработки вне зависимости от платформы, на которой будут выполняться приложения. Если приводить конкретные примеры, то перенос банковской системы БИСквит, разработанной в среде DOS, на платформу UnixWare занял около недели. После системы устанавливали на HP 9000, NCR 3000, Sun, Motorola 88K за несколько часов. Основное средство разработки - язык четвертого поколения PROGRESS 4GL. Опытные разработчики отмечают способность языка PROGRESS поддерживать разработку ключевых приложений масштаба предприятия без необходимости использования языка более низкого уровня (Си, Паскаль, Кобол и др.) Язык PROGRESS 4GL является языком процедурного типа, ориентированным на работу с реляционными базами данных. Одной из характерных особенностей языка является его тесная связь со словарем данных PROGRESS и автоматическое наследование атрибутов объектов БД, описанных в словаре данных - форматов, меток, подсказок, способов визуализации и доменов для полей, триггеров для полей и таблиц и т.д. Язык обладает важным преимуществом - обилием разумных действий, предпринимаемых компилятором по умолчанию - в частности, задание диапазонов транзакций, уровней блокировок записей, автоматическая обработка разнообразных ошибок и нажатия клавиши "ОТМЕНА" (Escape). Конструкции для навигации связанных данных обеспечивают навигационный доступ к БД, а для работы с множествами записей язык PROGRESS включает в себя полный SQL, сертифицированный на соответствие стандарту ANSI SQL 1989 Level 2. Язык поддерживает концепции "событий" и "триггеров", что позволяет создавать настоящие "событийно-ориентированные" (event-driven) приложения, где поток управления определяется самим пользователем. Не являясь "каноническим" объектно-ориентированным языком, PROGRESS V7 тем не менее позволяет пользоваться практически всеми реальными преимуществами объектно-ориентированного программирования. В контексте переносимости важно также отметить, что PROGRESS предлагает единый язык для программирования приложений как в текстовых (DOS, ASCII терминалы), так и в графических (Windows, Motif) средах. Почти все возможности графического интерфейса переносимы на обычные текстовые терминалы, за исключением изображений и многооконности. Также, все программы, написанные для текстовых терминалов, могут быть перенесены в графические среды. Конечно, наивно думать, что программа, написанная десять лет назад для терминала VT52, будет эффективно работать и органично выглядеть сегодня в среде Windows после простой перекомпиляции. Но по крайней мере разработчику не нужно будет переписывать все свои программы заново, он может постепенно дорабатывать интерфейсную часть приложения, сохранив при этом большую часть исходных текстов без изменений. В отличие от некоторых многоплатформных сред разработки (Uniface, Magic, PRO-IV и др.), которые предлагают пользователю свою концепцию пользовательского интерфейса во всех поддерживаемых средах, PROGRESS-приложения в средах Windows и Motif полностью соответствуют сформировавшимся стандартам пользовательского интерфейса для этих сред, что позволяет любому пользователю, знакомому со средой, легко освоить PROGRESS-приложение для этой среды. Для текстовых сред типа DOS или UNIX с простыми терминалами трудно говорить о каких бы то ни было "стандартах" интерфейса, но язык PROGRESS достаточно гибок, чтобы удовлетворить практически любые требования. Наряду с языком PROGRESS предлагает и современные средства визуального программирования, такие как User Interface Builder (UIB). Построение приложений осуществляется путем выбора стандартных компонентов и шаблонов из библиотек, предоставляемых PROGRESS, и размещения их в рабочем поле UIB. Эти компоненты представляют собой не просто экранные примитивы, но и наборы триггеров (методов), связанных с ними, что позволяет строить не просто красивые интерфейсы, а полнофункциональные приложения. Отличительной особенностью UIB является то, что сам он полностью написан на языке PROGRESS 4GL, что, на мой взгляд, характеризует возможности языка лучше всяких слов, а также то, что он в результате своей работы генерирует код на PROGRESS 4GL, что гарантирует переносимость разрабатываемых приложений. Это позволяет, например, использовать UIB в среде Windows для разработки текстового приложения, ориентированного на эксплуатацию в среде UNIX, с возможностью запуска разрабатываемого приложения в DOS-окне и пошаговой его отладки с помощью графического отладчика PROGRESS. 1.3. Независимость от коммуникационной средыДля связи между клиентом и сервером может использоваться любой из списка транспортных протоколов, поддерживаемых PROGRESS: TCP/IP, SPX, NetBIOS, DecNET, SNA и др. Все протоколы совершенно прозрачны для приложений. Клиент и сервер могут исполняться и на одной машине, тогда они общаются между собой через разделяемую память (UNIX, VMS) или вообще реализованы в виде одного исполняемого модуля (DOS/Windows Single User). Интересно, что однопользовательский продукт для Windows позволяет одновременно запустить локальный сервер и несколько клиентов в отдельных окнах, что дает возможность эмулировать многопользовательский режим на автономной персональной ЭВМ при отладке. Клиент PROGRESS может работать с несколькими серверами одновременно (до 240), что способствует созданию распределенных баз данных. При выполнении транзакций в распределенной БД поддерживается механизм двухфазной фиксации, гарантирующий целостность распределенных данных. 2. Масштабируемость сервера PROGRESSPROGRESS позволяет весьма эффективно использовать вычислительные ресурсы ЭВМ, на которой он работает, и предоставляет ряд возможностей для тонкой настройки параметров сервера, включая асинхронные процессы записи буферов, возможность работы с многотомными БД, распределенными по нескольким физическим дискам и др. Однако иногда наступает момент, когда все возможности оптимизации исчерпаны и становится ясно, что ЭВМ сервера БД не в состоянии обеспечить требуемую производительность. В этом случае можно воспользоваться масштабируемостью сервера PROGRESS, либо безболезненно заменить ЭВМ сервера на более мощную, например, многопроцессорной архитектуры (SMP) вплоть до суперсервера CRAY (вертикальная масштабируемость), либо разбить большую БД на несколько меньших и разместить их на отдельных серверах, создав распределенную БД (горизонтальная масштабируемость). Наряду с масштабируемостью "вверх" очень важной является масштабируемость "вниз", т.е. способность СУБД довольствоваться скромными вычислительными ресурсами там, где нагрузки невелики. Нам, разработчикам банковских систем, пришлось столкнуться с тем, что даже у самых больших банков есть очень маленькие филиалы, установка в которых мощных вычислительных систем экономически не оправдана. PROGRESS позволяет использовать для исполнения приложений под управлением DOS клиентские машины с процессором 286 и памятью 1-2МБ. 3. Интеграция PROGRESS с продуктами других фирмИтак, комбинация СУБД и средств разработки PROGRESS предоставляет разработчику возможности разработки и исполнения приложений на самых разнообразных платформах, не прибегая к использованию продуктов третьих фирм. Тем не менее в ряде случаев может представлять интерес возможность доступа приложений PROGRESS к серверам БД других производителей, например для:
В соответствии с принципами открытости PROGRESS предоставляет возможности исполнения приложений PROGRESS совместно с серверами БД других производителей, а также доступа приложений, написанных не на PROGRESS, к своей БД. 3.1. Архитектура PROGRESS DataServerБлагодаря архитектуре "сервера данных" (DataServer) PROGRESS, приложения, написанные на PROGRESS, могут работать с поддерживаемыми базами данных без изменений. В этот список СУБД входят: Oracle, Sybase, Rdb, RMS, C-ISAM, DB2/400, все СУБД, использующие стандарт ODBC и др. PROGRESS добивается одинаковой функциональности на всех поддерживаемых СУБД вне зависимости от способности СУБД поддерживать необходимые функции. DataServer позволяет PROGRESS запускать одну и ту же программу, написанную на 4GL, совместно с любой поддерживаемой СУБД без необходимости учитывать конкретный диалект SQL или язык доступа к данным. PROGRESS берет на себя труд распознавания диалекта SQL, делая управление данными прозрачным для приложения. Таким образом, все СУБД ведут себя одинаково по отношению к приложению. Основными составляющими архитектуры DataServer являются: DataServer BackPlane, Data Dictionary и собственно DataServer.
Современные исследования ([2]) показывают, что одним из камней преткновения
при разработке приложений, переносимых между БД, может явиться использование
триггеров и хранимых процедур СУБД, для программирования которых разные
СУБД используют разные средства, а некоторые СУБД их вообще не поддерживают.
PROGRESS предлагает оригинальный подход к решению этой проблемы, позволяя
описывать триггеры БД в Data Dictionary, программировать их на языке PROGRESS
и исполнять на машине клиента. Таким образом, приложение PROGRESS может
иметь один набор триггеров и единообразно исполняться независимо от применяемой
СУБД, даже если эта СУБД вообще не поддерживает триггеров.
3.2. Интеграция с другими приложениями и средамиPROGRESS предоставляет также ряд интерфейсов, которые позволяют приложениям PROGRESS обмениваться информацией с другими приложениями и операционной системой. Одни интерфейсы позволяют объединять приложения PROGRESS c другими программными продуктами в единую интегрированную среду. Другие - позволяют обращаться непосредственно к системным библиотекам, например при написании интерфейсов для внешних устройств. Третьи обеспечивают доступ приложений, написанных не на PROGRESS, к СУБД PROGRESS. В настоящее время PROGRESS поддерживает следующие интерфейсы:
Ведется разработка поддержки для Integrated Database Application Programming Interface (IDAPI), Novell AppWare и др. 4. Интернационализация PROGRESSВозможности создания гетерогенных информационных систем, объединяющих разнообразные операционные среды, нельзя считать полностью реализованными, если не обеспечена гибкая работа с символьными кодировками. Как известно, в различных операционных средах традиционно используются различные способы кодирования символов кириллицы, несовместимые между собой: так, в DOS это кодировка 866 (также известная как альтернативная), в Windows - 1251, а в UNIX могут использоваться и КОИ-8, и ISO 8859-5 и та же 866. Работа PROGRESS с кодировками строится следующим образом: существует файл кодировок, содержащий таблицы сортировки, преобразования регистров, атрибутов (буква, цифра и т.д.) и преобразования между кодировками для нескольких десятков используемых в мире кодировок, включая четыре упомянутых для русского языка, а также двухбайтовые кодировки восточных иероглифических алфавитов. Если вы используете кодировку, не включенную в стандартный список (например, БЕСТА), то легко можете сами добавить к файлу кодировок необходимые таблицы и перекомпилировать его. При создании базы данных таблицы сортировки, соответствующие указанной кодировке, загружаются прямо в нее. Сервер работает в кодировке, указанной в базе данных, которую он обслуживает. Кодировки для клиента (отдельно для дисплея, принтера, файлов данных, файлов процедур) задаются параметрами при его запуске. Клиент автоматически преобразует символьные данные, получаемые от серверов, в так называемую "внутреннюю" кодировку и наоборот. Язык также предоставляет средства работы с кодировками - можно указать кодировку при открытии конкретного текстового файла/устройства ОС, а также преобразовать строку символов из одной кодировки в другую. Таким образом, с базой данных, расположенной на UNIX-машине и использующей кодировку КОИ-8, могут одновременно работать и терминалы в кодировке ISO 8859-5, и удаленные DOS- и Windows-клиенты в своих родных кодировках. Справедливо и обратное: любой клиент может без проблем интегрировать данные из нескольких разнородных баз с разными кодировками. Все системные сообщения PROGRESS вынесены в отдельный файл, и в комплект поставки PROGRESS входят несколько десятков версий этого файла, переведенных на разные языки, включая и русский. Использование того или иного файла сообщений задается переменной среды, таким образом каждый пользователь системы может выбрать себе язык системных сообщений независимо от других пользователей. PROGRESS идет еще дальше, предоставляя разработчикам средство Translation Manager, позволяющее максимально автоматизировать процесс ручного перевода пользовательского интерфейса готового приложения на различные языки, а также создавать приложения, способные общаться с пользователями на нескольких языках одновременно. Разработчик создает пользовательский интерфейс приложения на своем родном языке, не задумываясь о проблемах его интернационализации. Затем за дело берется профессиональный переводчик, который с помощью Translation Manager переводит все метки, подсказки, сообщения об ошибках, другими словами - все литералы в приложении на другой язык. Переведенные литералы сохраняются в отдельном сегменте объектного кода, соответствующем выбранному языку. Таких сегментов может быть сколько угодно, и при исполнении приложения каждый пользователь может выбрать язык интерфейса по своему вкусу. 5. ЗаключениеХотя изложенное ни в коей мере не претендует на полное описание всех возможностей PROGRESS, я надеюсь, что статья поможет читателям составить первое впечатление о продуктах фирмы PROGRESS SOFTWARE в контексте открытых систем. Буду рад предоставить всем желающим более подробную информацию, а имеющим доступ к Литература:
| |||||||||||||||||||||||||||||||
© 2009-2024 Акционерное общество
“Банковские Информационные Системы” |
115114, Москва, Шлюзовая набережная 6 стр 4, т.: +7(495) 780 3773, факс: (495) 780 3771, www.bis.ru, info@bis.ru.
191119, Санкт-Петербург, ул. Звенигородская, 22, литера А, т./ф: (812) 448 1879, info@spb.bis.ru. 440052, Пенза, ул. Бурмистрова 6а, офис 2. т.: (927) 365 3123, info@bis.ru. |