Решение некоторых популярных задач обработки данных с помощью 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 ). • Сохраните все изменения. • Создайте новую схему данных, которой будет оперировать сервис маршрутизации, назначение которого обогащение данных. Исходный 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 , можно реализовать наиболее популярные шаблоны проектирования. |