Решение некоторых популярных задач обработки данных с помощью Oracle ESB . Часть 4.

Источник: Oracle
Bладимир Энгельс & Дмитрий Севостьянов, Oracle СНГ

Автор: Bладимир Энгельс & Дмитрий Севостьянов, Oracle СНГ

Данной статьей продолжается серия публикаций, в которых будет продемонстрированно - как, применяя продукт Oracle Enterprise Service Bus , можно реализовать наиболее популярные шаблоны проектирования. К статьям прилагается архив, где находятся заготовки проектов для реализации их в Oracle JDeveloper .

В четвертой статье рассматривается реализация шаблона c ontent enricher , который позволяет стандартными средствами Oracle ESB решить задачу обогащения потока данных.

Здесь хотелось бы сразу отметить отличие шаблона c ontent enricher от шаблона aggregator , которые часто смешиваются. По определению шаблон c ontent enricher используется, когда необходимо пополнить исходное сообщение недостающими данными, путем обращения в другие информационные системы. Шаблон же aggregator подразумевает формирование окончательного результата путем комбинирования содержимого из нескольких связанных сообщений, поступающих на вход, и по которыем необходимо синхронизироваться.

Постановка задачи.

Есть единственная очередь сообщений ( MoneyInputServiceFile ), куда помещаются входные сообщения в форме XML -документов вида ( Money ). Сообщения содержат неполную информацию. Требуется дозаполнить атрибуты сообщения, которые не были установлены ранее (атрибут longName объекта Currency ).

Входные сообщения описываются XSD -схемой Money.xsd , которая включает в себя схемы, описывающие разнородные объекты предметной области ( Currency . xsd )

Реализация.

Создание проекта Oracle ESB .

•  Создаем проект Scenario04-cnt_enrich в рабочей области ESB-samples типа ESB Project.

•  Поместим схемы, описывающие объекты предметной области в созданный проект ( Account . xsd , Address . xsd , Currency . xsd , Customer . xsd )

•  Создаем собственную "Систему", называем ее " ESB - samples "

Однако следует учесть, что система с подобным именем уже существует на сервере ESB . Для этого необходимо открыть файл "ESB_Samples.esbsys" любым текстовым редактором и заменить идентификатор системы, сгенерированный JDeveloper на уже существующий (из проекта Scenario 01- split )

•  Создаем собственную "Группу", называем ее "04 Scenario - content _ enricher "

•  Сохраните все изменения

Для облегчения отладки проекта, будем работать с файловыми адаптерами.

•  Создаем файловый адаптер с именем MoneyInput ServiceFile , относящийся к системе/группе ESB-samples.04Scenario- content _ enricher , принимающий входные сообщения. Адаптер конфигурируется кнопкой " Configure Adapter Service "

•  Соглашаемся с именем адаптера на первом шаге конфигурирования, выбираем тип операции "Read" на втором шаге конфигурирования

•  Задаем тип поиска каталога со входными сообщениями через логическое имя и даем логическому имени имя " sourcePath "

•  Выбираем шаблон поиска " File Wildcards " файла в каталоге, содержащем входные сообщения, и устанавливаем шаблон поиска " *. xml "

•  Устанавливаем частоту времени просмотра каталога и возраст создания файла в 1 секунду

•  Указываем схему, с которой будет работать наш файловый адаптер, нажав кнопку " Browse " (Схемы находятся в проекте, после шага 2 )

•  Конфигурирование файлового адаптера завершено

•  Вместе с файловым адаптером (на самом деле с любым адаптером, работающим на получение данных) создается сервис маршрутизации, именованный аналогично, но имеющий в качестве суффикса "_ RS ". Этот адаптер используется для приведения модели данных к внутрисистемной модели. В нашем случае мы будем использовать такую модель данных, которую предоставил нам адаптер.

•  Сохраните все изменения

Конфигурируем логические имена для файловых адаптеров. Откройте файловый адаптер MoneyInput ServiceFile и установите свойство логического имени каталога, в котором будет производиться поиск входных документов.

•  Создайте сервис маршрутизации " ContentEnricher ". В качестве входной схемы укажите элемент Money схему Currency .

•  Сохраните все изменения

•  Создайте правило маршрутизации для сервисов маршрутизации MoneyInputServiceFile и ContentEnricher

Укажите в качестве целевой системы операцию execute сервиса ContentEnricher

•  Создайте адаптер связи с базой данных " GetCurrencyServiceDB ".

Сконфигурируйте адапетер базы данных для работы с соединением, ранее определенным в JDeveloper .

В качестве операций, которые выполняет адаптер выберите запрос к таблице " Select "

Импортируйте список таблиц, с которыми будет оперировать адаптер, нажав кнопку " Import Tables "

Укажите таблицу " CURRENCY " (создание и заполнение таблицы выполняется скриптом currency .sql из проекта data - model ).

На седьмом шаге конфигурирования адаптера

добавьте параметр currency _ id , нажав на кнопку " Add …",

и измените SQL , добавив условие WHERE в SQL выражение, нажав кнопку " Edit …"

Результат должен выглядеть следующим образом

Конфигурирование адаптера завершено. Одновременно с создание WSDL описания адаптера будет создана и XML -схема, описывающая входные и выходные документы, с которыми работает адаптер ( GetCurrencyServiceDB. xsd ).

•  Сохраните все изменения.

•  Создайте новую схему данных, которой будет оперировать сервис маршрутизации, назначение которого обогащение данных.
Для этого создайте новую xsd схему, импортируйте в нее схему Currency и создайте новый тип ComplexMoneType , а на его основе новый элемент complexMoney .

Исходный XML -текст схемы приведен ниже

<?xml version="1.0" encoding="windows-1251" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns="http://www.oracle.com/data-model/complex-money"

targetNamespace="http://www.oracle.com/data-model/complex-money"

elementFormDefault="qualified"

xmlns:curr="http://www.oracle.com/data-model/currency">

<xsd:import schemaLocation="Currency.xsd"

namespace="http://www.oracle.com/data-model/currency"/>

<xsd:complexType name="ComplexMoneyType">

<xsd:sequence maxOccurs="2" minOccurs="2">

<xsd:element ref="curr:Money"/>

</xsd:sequence>

</xsd:complexType>

<xsd:element name="complexMoney" type="ComplexMoneyType">

<xsd:annotation>

<xsd:documentation>

A sample element

</xsd:documentation>

</xsd:annotation>

</xsd:element>

</xsd:schema>

•  Создайте сервис маршрутизации " GetCurrencyService ".

В качестве схемы входной данных укажите элемент Money схемы Currency .

В качестве выходной схемы данных кажите элемент complexMoney схемы enrichment .

Создайте правило маршрутизации для сервиса маршрутизации GetCurrencyService , в качестве целевой системы укажите операцию " GetCurrencyServiceDBSelect_currency_id " адаптера GetCurrencyServiceDB .

Для успешной работы адаптера базы данных необходимо установить параметр " currency _ id " запроса. Этот атрибут присутствует во входном XML -документе в качестве элемента currencyId элемента Currency . Для присваивания значения атрибута параметру необходимо создать XSL -шаблон, выделяющии значение необходимого элемента входного документа и присваивающий его значение параметру запроса. Создается файл XSL -шаблона с помощью нажатия кнопки XSL -трансформации .

Соедините элемент inp 1: currencyId с элементом top : currency _ id .

Создайте XSL -шаблон приведения схемы данных ответа адаптера к канонической схеме данных проекта.

Визуальное представление показано ниже.

Итоговое правило маршрутизации должно выглядеть следующим образом:

•  Создайте сервис маршрутизации MoneyOutputRoutingService , назначение которого преобразование объекта complexMoney к объекту Money .

В качестве входной схемы данных укажите элемент complexMoney схемы enrichment . В качестве выходной схемы данных укажите элемент Money схемы Currency .

Создайте файловый адаптер MoneyOutputServiceFile для сохранения выходного XML -документа.

Сконфигурируйте адаптер.

В качестве выходной схемы данных укажите элемент Money схемы Currency .

Конфигурирование адаптера завершено.

Установите свойство outputPath для адаптера MoneyOutputServiceFile .

•  Создайте правило маршрутизации для сервиса MoneyOutputRoutingService , в качестве целевой системы укажите операцию Write адаптера MoneyOutputServiceFile .

•  Создайте XSL -шаблон преобразования данных объединения двух объектов complexMoney в один объект Money . Обратите внимание на формирование элемента longName .

•  Создайте правило маршрутизации ответа от сервиса GetCurrencyService

•  Создайте XSL -шаблон преобразования ответа от сервиса GetCurrencyService в объект comlexMoney для сервиса ContentEnricherRS . Обратите внимание на то, что в шаблоне присутсвует описание переменной ESBREQUEST .

В редакторе исходного кода добавьте строчку < xsl : copy - of select ="$ ESBREQUEST " /> . Эта строка помещает в XML-документ содержимое запроса, уходящего в сервис GetCurrencyService .

•  Сохраните все изменения.

•  Результирующая картинка проекта должна иметь следующий вид. Обратите внимание на то, что в сервисе ContentEnricher есть только одно XSL -преобразование.

•  Разверните проект на сервере.

Итог.

В результате мы получили развернытый на сервере проект, реализующий шаблон c ontent enricher .

Данная статья завершает серию публикаций, в которых было продемонстрированно - как, применяя продукт Oracle Enterprise Service Bus , можно реализовать наиболее популярные шаблоны проектирования.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=20061