Решение некоторых популярных задач обработки данных с помощью Oracle ESB . Часть 3.Источник: oracle Дмитрий Севостьянов, Oracle СНГ
Автор: Дмитрий Севостьянов, Oracle СНГДанной статьей продолжается серия публикаций, в которых будет продемонстрированно - как, применяя продукт Oracle Enterprise Service Bus , можно реализовать наиболее популярные шаблоны проектирования. К статьям прилагается архив, где находятся заготовки проектов для реализации их в Oracle JDeveloper . В третьей статье рассматривается реализация шаблона message translator , который позволяет получить исходящие документы в нестандартных (не XML) форматах. Постановка задачи. Есть входная очередь, необходимо преобразовать XML -документ по заданному XSLT -шаблону и поместить его в выходную очередь. Входные сообщения так же как и в предыдущих статьях описываются XSD -схемой Account . xsd , которая включает в себя схемы, описывающие разнородные объекты предметной области ( Currency . xsd , Customer . xsd , Address . xsd ) Реализация. Создание проекта Oracle ESB . • Создаем проект Scenario 03- xslt в рабочей области ESB - Samples типа ESB Project . • Поместим схемы, описывающие объекты предметной области в созданный проект ( Account . xsd , Address . xsd , Currency . xsd , Customer . xsd ) • Создаем собственную "Систему", называем ее " ESB - samples " Однако следует учесть, что система с подобным именем уже существует на сервере ESB . Для этого необходимо открыть файл "ESB_Samples.esbsys" любым текстовым редактором и заменить идентификатор системы, сгенерированный JDeveloper на уже существующий (из проекта Scenario 01- split ) • Создаем собственную "Группу", называем ее "03 Scenario - message _ translator " • Сохраните все изменения Для облегчения отладки проекта, будем работать с файловыми адаптерами. • Создаем файловый адаптер с именем AccountServiceFile, относящийся к системе/группе ESB-samples.03Scenario-message_ translator , принимающий входные сообщения. Адаптер конфигурируется кнопкой "Configure Adapter Service" • Соглашаемся с именем адаптера на первом шаге конфигурирования, выбираем тип операции " Read " на втором шаге конфигурирования. • Задаем тип поиска каталога со входными сообщениями через логическое имя и даем логическому имени имя " sourcePath " • Выбираем шаблон поиска " File Wildcards " файла в каталоге, содержащем входные сообщения, и устанавливаем шаблон поиска " *. xml " • Устанавливаем частоту времени просмотра каталога и возраст создания файла в 1 секунду • Указываем схему, с которой будет работать наш файловый адаптер, нажав кнопку " Browse " (Схемы находятся в проекте, после шага 2 ) • Конфигурирование файлового адаптера завершено • Вместе с файловым адаптером (на самом деле с любым адаптером, работающим на получение данных) создается сервис маршрутизации, именованный аналогично, но имеющий в качестве суффикса "_ RS ". Этот адаптер используется для приведения модели данных к внутрисистемной модели. В нашем случае мы будем использовать такую модель данных, которую предоставил нам адаптер. • Сохраните все изменения • Конфигурируем логические имена для файловых адаптеров. Откройте файловый адаптер AccountServiceFile (сделав двойной щелчок мышью на изображении шестеренки в файловом адаптере . Раскройте список свойств адаптера, нажав символ "+" около надписи Endpoing properties . Добавьте новое свойство Введите значение свойства " sourcePath ", например " e:\esb-samples\s3-msg_trans\input " для Windows или "/tmp/esb-samples/s3/input " для Unix. Если вы разрабатываете проект под Windows , но разворачивать его будете на Unix , то всегда можно поменять значение свойства через ESBConsole • Сохраните все изменения • Создаем основной сервис маршрутизации " XSLTRoutingService ", отвечающий за XSLT -преобразование входного документа в выходной по заданному XSL -шаблону. Генерируем WSDL из существующей XSD -схемы (Схема Account , элемент Operation ) • Конфигурируем сервис маршрутизации для работы с ответным сообщением. Для генерации схемы выходного сообщения необходимо определить свой собственный формат данных. • Создаем свой собственный формат, основанный на типе данных CSV ( Comma separated value ) • В качестве шаблона указываем файл NativeDataFormat . txt , состоящего из двух строк: NativeTabulatorFormat justExample • В качестве разделителя полей указываем табуляцию ( Tab) На основе заданного нами шаблона NativeDataFormat.txt JDeveloper создал схему данных NativeDataFormat_1.xsd . • Сохраните все изменения • Создаем выходной файловый адаптер " OutputFileService ", сохраняющий данные в файл. • В качестве схемы данных указываем созданную нами схему NativeDataFormat _1. xsd • Сохраните все изменения • Конфигурируем свойство, задающее логический путь к каталогу для адаптера (Установите свойство outputPath в значение E :\ esb - samples \ s 3- msg _ trans ) • Связываем выход сервиса маршрутизации XSLTRoutingService с файловым адаптером OutputFileService . ( Откройте XSLTRoutingService двойным щелчком мыши ) В качестве целевой операции указываем операцию Write файлового адаптера. • Сохраните все изменения • Связываем сервис маршрутизации AccountServiceFile_RS с сервисом маршрутизации XSLTRoutingService . ( Откройте AccountServiceFile_RS двойным щелчком мыши ) • Сохраните все изменения • Вы должны увидеть следующую картинку в рабочей области • Создаем XSL-шаблон преобразования входного документа в выходной, для чего откройте XSL-редактор, сделав двойной щелчок мыши по значку XSL-преобразования в сервисе маршрутизации XSLTRoutingService . • Выберите пункт "Create New Mapper File) • В открывшемся визуальном редакторе создайте следующее преобразование. Для этого из панели компонентов (Component Palette) из раздела строковых функций (String Fuctions) перетащите на среднюю часть рабочей области функцию concat. Соедините левый и правый край пиктограммы функции с соответствующими полями (как показано на рисунке) • Настройку функции преобразования можно посмотреть, сделав двойной щелчок на пиктограмме функции • Сохраните все изменения • Проект должен принять вид, как показано на рисунке. • Разверните проект на сервере Итог. В результате мы получили развернытый на сервере проект, реализующий шаблон message translator . В следующей статье будут рассмотрено решение задачи обогащения потока данных стандартными средствами Oracle ESB для (шаблон c ontent enricher ). |