Інтеграція корпоративних додатків. Підхід Oracle

Зміст



Введення



У цій статті я спробував описати основи нового, швидко розвивається напряму – так званої інтеграції корпоративних додатків (Enterprise Architecture Integration, EAI). Інтерес до цього напрямку виник, коли стало ясно, що зростання рішень для внутрішньої автоматизації компаній поступово виходить на «плато стабільності» – перш за все за рахунок появи великої кількості різномасштабних готових рішень в області ERP (Enterprise Resource Planning – інформаційна система, призначена для планування та управління ресурсами підприємств). Досягнення високої продуктивності праці за рахунок внутрішньої автоматизації не гарантує високої ефективності роботи компанії в цілому. Внутрішньо добре організована і ефективна компанія, яка застосовує сучасні методи автоматизації, тим не менш може дуже багато втрачати через архаїчних способів взаємодії з зовнішнім світом і насамперед з іншими компаніями – партнерами, постачальниками і т.д. Схоже, що основний акцент у розробці нових інформаційних технологій в наступні 5-10 років буде зроблено саме в області інтеграції бізнесів, точніше, в області інтеграції корпоративних додатків. Потрібно бути готовими до цього ідейно і технологічно.


Дана стаття присвячена програмній інфраструктурі EAI. Очевидно, що крім промислових реляційних баз даних, які підтримують XML-дані, в якості її основи можна було б використовувати традиційні кошти ПО проміжного шару – власне, в працюючих системах передачі XML-документів вони і застосовуються. Побудова такої інфраструктури є складним завданням, і для її вирішення необхідно мати хоча б елементарні знання з технології обробки XML-документів.


Стратегії зберігання XML-документів у базі даних Oracle



Існують три стратегії зберігання XML-документів у базі даних Oracle:



  1. Зберігання XML-документів (разом з тегами, тобто повністю) як окремих неподільних об'єктів. Документи зберігаються як дані типу CLOB або BLOB.
  2. Зберігання елементів XML-документів як даних (тобто власне даних, без тегів) в об'єктно-реляційному поданні; фактично в таблицях реляційної бази даних.
  3. Змішаний зберігання документів і даних з використанням уявлень (views).

Зберігання XML-документів у базі у вигляді неподільних об'єктів доцільно в тому випадку, коли їх зміст статично і, що суттєво, будь-яке оновлення документа зводиться до його перезапису в базі даних. Типові приклади таких документів – статті, книги, технічні керівництва, контракти і т.д. Загалом, це звичайні документи в традиційному значенні цього слова, і зберігаються вони у базі даних цілком і витягуються з неї також цілком.


Oracle вміє зберігати документи такого типу в різних форматах (MS Word, WordPerfect, Acrobat і т.д.), а також організовувати по ним ефективний витончений пошук, в тому числі з використанням морфології російської мови. У плані особливостей зберігання та обробки XML-документи нічим не відрізняються від документів інших форматів, і сервер Oracle зберігає їх як великі об'єкти, не роблячи жодної різниці між ними і, наприклад, документами у форматі MS Word.


Якщо документ структурно коректний і містить елементи, які можуть оновлюватися і взагалі використовуватися окремо, а не як єдине ціле, то такий документ можна назвати датацентріческім. Зазвичай такі документи включають один або кілька елементів зі складною структурою. Прикладами можуть служити бланки замовлень, фінансові рахунки і т.д., тобто документи на базі складних форм. Сервер Oracle8i надає адекватні структури для зберігання і обробки елементів складних документів. Мова йде про об'єкти в базі даних Oracle, конкретно – про типи, засланнях і колекціях (collections). Можливі два варіанти відображення структурованих XML-документів в об'єктно-реляційні структури бази даних Oracle:



  1. Зберігання атрибутів елементів XML-документів лише в таблицях бази даних і використання об'єктних уявлень для відтворення структури XML-документів.
  2. Зберігання структурованих елементів XML в об'єктних таблицях.

Будучи збереженими в об'єктно-реляційної бази даних, елементи документа стають об'єктом різних операцій, таких як вибірка, оновлення і т.д., здійснюваних за допомогою тверджень мови 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 включає в себе наступні компоненти:



  1. XML Parsers (Java, C, C++, PL/SQL).
  2. XSLT Processors.
  3. XML Class Generator (Java, C++).
  4. XML SQL Utility.
  5. XSQL Servlet.
  6. XML Scheme Processor.
  7. XML Transviewer Java Beans.

Більш докладно перераховані компоненти будуть розглянуті нижче.


Програми-аналізатори і 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-документів.

 
Рис. 1. Аналізатори 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-класів



Мета 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 + +.


XML SQL Utility



Ця утиліта являє собою набір класів Java, які виконують такі функції:



Як показано на рис. 4, XML SQL Utility обробляє SQL-запити і повертає результат як XML-документ.

 

Рис. 4. Логіка роботи XML SQL Utility


Структура результуючого XML-документа спирається на структуру бази даних, яка повертає результат запиту. Колонки таблиці бази даних відображаються в елементи верхнього рівня; скалярні значення – в елементи з текстом; об'єктні типи – в елементи з атрибутами, що виникають як підлеглі елементи; колекції – до списків елементів.


XML SQL Utility використовується і для запису даних XML в таблиці бази даних, причому в якості сервера баз даних використовується Oracle8i.


Приміщення XML-документа в базу даних під управлінням Oracle8i зберігає структуру документа. Імена елементів перетворюються на імена стовпців таблиці; елементи документа, які містять лише текст, – у скалярні стовпці; елементи, що містять вкладені елементи, – в типи об'єктів; списки елементів перетворюються в колекції. Неструктуровані дані, такі як текстові коментарі або опису, не можуть бути перетворені до збереженим в базах даних типах і повинні бути збережені як CLOB.


XSQL Servlet



XSQL Servlet представляє собою сервлет (у термінології JavaSoft). Щоб пояснити термін, необхідно уточнити деякі поняття.


Сервіс – реалізація серверної частини будь-якого протоколу прикладного рівня, такого як HTTP, FTP і т.п.


Сервер – процес (в сенсі операційної системи), що містить віртуальну Java-машину, в яку завантажені класи, що забезпечують роботу одного або декількох сервісів.


Сервлет – це клас, стандартним чином розширює функціональність якого-небудь сервісу.


XSQL Servlet призначений для обробки SQL-запитів і постачання користувачу результуючих наборів даних у вигляді XML-документів. Цей процесор реалізований як сервлет Java, бере в якості вхідного XML-файл, містить вбудований SQL-запит, і використовує програму-аналізатор XML-документів.


XSQL Servlet можна використовувати спільно з будь-яким Web-сервером, який підтримує сервлети Java. На рис. 5 показано схема роботи користувача з даними із застосуванням сервлетів.


Цифрами на малюнку позначена послідовність дій. Вона виглядає таким чином:



  1. Користувач, працюючи з навігатором, вводить URL, який інтерпретується і передається через Java Web Server компоненту XSQL Servlet. URL містить ім'я XSQL-файлу (з розширенням. Xsql) і, можливо, деякі параметри, такі як значення та ім'я стилю. У той же час користувач може викликати XSQL Servlet і з командного рядка.
  2. Сервлет передає XSQL-файл програмі-аналізатору XML-документів (XML Parser for Java), яка, у свою чергу, розбирає XML і надає програмний інтерфейс для доступу до документа.
  3. Процесор сторінок (page processor), один з компонентів сервлета, використовує згенерований API для передачі XML-параметрів і запитів на мові SQL (які містяться між тегами <tag> </ tag>) компоненту XML SQL Utility. Процесор сторінок також передає будь-які оператори XLS-процесингу XSLT-процесору.
  4. Компонент XML SQL Utility направляє SQL-запит до запитуваної базі даних під управлінням Oracle8i, сервер баз даних повертає результуючий набір даних компоненту XML SQL Utility
  5. Компонент XML SQL Utility повертає результат запиту XSLT-процесору у вигляді тексту на мові XML. Цей текст поміщається на те місце у вихідному файлі, яке було позначено тегом <query>.
  6. Якщо це необхідно, результат запиту і будь-які інші XML-дані трансформуються XSLT-процесором з використанням заданих стилів. Дані можуть бути перетворені в HTML або будь-які інші формати, визначені стилем. XSLT-процесор може вибірково застосовувати різні стилі, маючи на увазі тип клієнта, який зробив вихідний URL-запит.
  7. Нарешті, XSLT-процесор повертає сформований документ навігатора, і той відображає його для користувача.

Таким чином, задавши запит в певному форматі та вказавши стиль результуючого документа, ми маємо можливість згенерувати шуканий документ на основі даних, які знаходяться в базі даних Oracle. За ідеєю, це і є необхідний компонент для автоматичної генерації XML-документів за запитом, причому дані, що включаються до документа, беруться з бази даних Oracle.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*