|
|
|||||||||||||||||||||||||||||
|
Интеграция корпоративных приложений. Подход OracleИсточник: КомпьютерПресс, #6'2001 Глеб Ладыженский
Оглавление
В этой статье я попытался описать основы нового, быстро развивающегося направления - так называемой интеграции корпоративных приложений (Enterprise Architecture Integration, EAI). Интерес к этому направлению возник, когда стало ясно, что рост решений для внутренней автоматизации компаний постепенно выходит на «плато стабильности» - прежде всего за счет появления большого числа разномасштабных готовых решений в области ERP (Enterprise Resource Planning - информационная система, предназначенная для планирования и управления ресурсами предприятий). Достижение высокой производительности труда за счет внутренней автоматизации не гарантирует высокой эффективности работы компании в целом. Внутренне хорошо организованная и эффективная компания, применяющая современные методы автоматизации, тем не менее может очень много терять из-за архаичных способов взаимодействия с внешним миром и прежде всего с другими компаниями - партнерами, поставщиками и т.д. Похоже, что основной упор в разработке новых информационных технологий в следующие 5-10 лет будет сделан именно в области интеграции бизнесов, точнее, в области интеграции корпоративных приложений. Нужно быть готовыми к этому идейно и технологически. Данная статья посвящена программной инфраструктуре EAI. Очевидно, что помимо промышленных реляционных баз данных, поддерживающих XML-данные, в качестве ее основы можно было бы использовать традиционные средства ПО промежуточного слоя - собственно, в работающих системах передачи XML-документов они и применяются. Построение такой инфраструктуры является сложной задачей, и для ее решения необходимо иметь хотя бы элементарные знания по технологии обработки XML-документов. Стратегии хранения XML-документов в базе данных Oracle
Существуют три стратегии хранения XML-документов в базе данных Oracle:
Хранение XML-документов в базе в виде неделимых объектов целесообразно в том случае, когда их содержание статично и, что существенно, любое обновление документа сводится к его перезаписи в базе данных. Типичные примеры таких документов - статьи, книги, технические руководства, контракты и т.д. В общем, это обычные документы в традиционном значении этого слова, и хранятся они в базе данных целиком и извлекаются из нее также целиком. Oracle умеет хранить документы такого типа в различных форматах (MS Word, WordPerfect, Acrobat и т.д.), а также организовывать по ним эффективный изощренный поиск, в том числе с использованием морфологии русского языка. В плане особенностей хранения и обработки XML-документы ничем не отличаются от документов других форматов, и сервер Oracle хранит их как большие объекты, не делая никакого различия между ними и, например, документами в формате MS Word. Если документ структурно корректен и содержит элементы, которые могут обновляться и вообще использоваться по отдельности, а не как единое целое, то такой документ можно назвать датацентрическим. Обычно такие документы включают один или несколько элементов со сложной структурой. Примерами могут служить бланки заказов, финансовые счета и т.д., то есть документы на базе сложных форм. Сервер Oracle8i предоставляет адекватные структуры для хранения и обработки элементов сложных документов. Речь идет об объектах в базе данных Oracle, конкретно - о типах, ссылках и коллекциях (collections). Возможны два варианта отображения структурированных XML-документов в объектно-реляционные структуры базы данных Oracle:
Будучи сохраненными в объектно-реляционной базе данных, элементы документа становятся объектом различных операций, таких как выборка, обновление и т.д., осуществляемых с помощью утверждений языка SQL. Собственно процедура отображения документа в объектно-реляционную базу данных, равно как и различные поисковые операции над данными - элементами документа, занесенными в базу данных, выполняются программой XML SQL Utility (о ней подробнее будет рассказано ниже). Если документ структурирован, но его структура в целом не соответствует схеме, поддерживающей (underlaying) базы данных, необходимо преобразовать документ в нужный формат до его записи в базу данных. Эту процедуру можно проделать с помощью механизма стилей. Наконец, если необходимо обрабатывать документы смешанных типов, когда имеются как структурированные, так и неструктурированные данные в формате XML, рассматриваемые тем не менее как единый документ, можно использовать представления Oracle. Они позволяют конструировать объекты «на лету», комбинируя данные, которые хранятся в различном виде. Таким образом, структурированные данные (такие, например, как данные о сотрудниках, заказчиках и т.д.) можно хранить в одной точке с использованием объектно-реляционных таблиц, а неструктурированные данные (например, описания и комментарии) - как данные типа CLOB. Если необходимо обновить данные в целом, можно попросту создать структуру из различных «кусочков» данных с использованием конструктора типов в операторе SELECT, примененном к view. XML SQL Utility (будет описана ниже) даст возможность поиска сконструированных данных в view как отдельного XML-документа. Поддержка XML в Oracle XML Developer’s Kit
Прежде всего следует рассказать об инструментарии, необходимом для программирования процессов обмена электронными документами. Корпорация Oracle поставляет набор компонентов, утилит и интерфейсов для организации работы с XML-документами. Этот набор называется XML Developer’s Kit (XDK). Он существует в пяти вариациях: XDK for Java, XDK for JavaBeans, XDK for C, XDK for C++, XDK for PL/SQL. XDK включает в себя следующие компоненты:
Более подробно перечисленные компоненты будут рассмотрены ниже. Программы-анализаторы и XSLT-процессоры
В рамках XML Parsers Oracle поставляет набор программ-анализаторов XML-документов для Java, C, C++ и PL/SQL (рис. 1). Каждый из них представляет собой отдельно устанавливаемый компонент, который анализирует (разбирает) XML-документ (или DTD) таким образом, что далее с ним (документом) может продолжить работу некоторая программа. Программы-анализаторы обеспечивают генерацию интерфейсов прикладного программирования в одном из двух вариантов: DOM (Document Object Model) или SAX (Simple API for XML). Кроме того, программы-анализаторы поддерживают механизм XML Namespace (спецификация W3C XML Namespaces 1.0), обеспечивают проверку структурной и синтаксической корректности XML-документов. Интерфейс прикладного программирования для доступа к XML-документам может быть в двух вариациях: основанный на событиях (спецификация SAX 1.0) и основанный на древовидных структурах (W3C DOM 1.0). Программа-анализатор строит в собственном пространстве памяти некоторую (древовидную или событийную) структуру, позволяющую оперировать ею любой программе с конкретными целями, например с целью преобразования структуры документа. Доступ к этой структуре осуществляется с помощью DOM- или SAX-интерфейса. Таким образом, программа, которая должна поработать с XML-документом, должна вызвать предварительно программу-анализатор, получить с ее помощью требуемую структуру и затем оперировать ее элементами посредством использования интерфейса DOM или SAX таким способом, который зависит от типа используемой программы-анализатора. Так, имея дело с C++- или Java-анализатором, мы будем использовать методы соответствующих классов; для C это будут функции некоторой библиотеки и т.д. Вторая версия программ-анализаторов XML-документов включает специальную утилиту для преобразований XML-данных с использованием механизма стилей. Это так называемый XSL Transformation (XSLT) Processor, или, для краткости, XSLT-процессор (рис. 2). Используя его, мы получаем возможность трансформации документов различных форматов, например XML в XML, в HTML или любой иной текстовый формат. Рис. 2. Схема XSL-преобразований XSLT-процессоры соответствуют спецификациям W3C XSL Transform Proposed Recommendation 1.0 и Xpath Proposed Recommendation 1.0. Доступны библиотеки для Java, C, C++, PL/SQL.
Цель XML Class Generators - создание программных единиц (классов) на основе данных, предоставляемых DTD. Типичная задача обмена документами - обмен XML-данными между двумя приложениями. Было бы правильно, если бы оба эти приложения работали на основе DTD, единообразно и исчерпывающе определяющих рабочий XML-документ. Однако сам по себе DTD неудобен для этой цели. Возникает идея сгенерировать на базе DTD, имеющего очевидно классовую структуру, интерфейс прикладного программирования на основе Java-классов. Тогда наши приложения могли бы пользоваться этим сгенерированным API для непосредственной и, что важнее, стандартной работы с документом. Эта идея и положена в основу генератора классов для DTD. Данный генератор создает исходные файлы из XML DTD. Это полезно, когда приложение хочет послать XML-сообщение другому приложению, опираясь на согласованный DTD. Используя эти классы, Java-приложение может конструировать, проверять и печатать XML-документы, совместимые с входным DTD. Генератор классов работает в связке с программой-анализатором XML для Java, который разбирает DTD и передает разобранный документ генератору классов (рис. 3). Рис. 3. Генератор классов для Java В рамках XDK доступны генераторы классов для Java и C++.
Эта утилита представляет собой набор классов Java, которые выполняют следующие функции:
Как показано на рис. 4, XML SQL Utility обрабатывает SQL-запросы и возвращает результат как XML-документ.
Рис. 4. Логика работы XML SQL Utility Структура результирующего XML-документа опирается на структуру базы данных, которая возвращает результат запроса. Колонки таблицы базы данных отображаются в элементы верхнего уровня; скалярные значения - в элементы с текстом; объектные типы - в элементы с атрибутами, возникающими как подчиненные элементы; коллекции - в списки элементов. XML SQL Utility используется и для записи XML-данных в таблицы базы данных, причем в качестве сервера баз данных используется Oracle8i. Помещение XML-документа в базу данных под управлением Oracle8i сохраняет структуру документа. Имена элементов преобразуются в имена столбцов таблицы; элементы документа, содержащие только текст, - в скалярные столбцы; элементы, содержащие вложенные элементы, - в типы объектов; списки элементов преобразуются в коллекции. Неструктурированные данные, такие как текстовые комментарии или описания, не могут быть преобразованы к хранимым в базах данных типам и должны быть сохранены как CLOB.
XSQL Servlet представляет собой сервлет (в терминологии JavaSoft). Чтобы объяснить термин, необходимо уточнить некоторые понятия. Сервис - реализация серверной части какого-либо протокола прикладного уровня, такого как HTTP, FTP и т.п. Сервер - процесс (в смысле операционной системы), содержащий виртуальную Java-машину, в которую загружены классы, обеспечивающие работу одного или нескольких сервисов. Сервлет - это класс, стандартным образом расширяющий функциональность какого-либо сервиса. XSQL Servlet предназначен для обработки SQL-запросов и поставки пользователю результирующих наборов данных в виде XML-документов. Этот процессор реализован как сервлет Java, берет в качестве входного XML-файл, содержащий встроенный SQL-запрос, и использует программу-анализатор XML-документов. XSQL Servlet можно использовать совместно с любым Web-сервером, который поддерживает сервлеты Java. На рис. 5 показана схема работы пользователя с данными с применением сервлетов. Цифрами на рисунке обозначена последовательность действий. Она выглядит следующим образом:
Таким образом, задав запрос в определенном формате и указав стиль результирующего документа, мы имеем возможность сгенерировать искомый документ на основе данных, находящихся в базе данных Oracle. По идее, это и есть необходимый компонент для автоматической генерации XML-документов по запросу, причем данные, включаемые в документ, берутся из базы данных Oracle.
|
|