понедельник, 16 сентября 2013 г.

Возможности Oracle SOA Suite для интеграции унаследованных приложений

В данной заметке мы рассмотрим возможности, которые предоставляет Oracle SOA Suite для подключения унаследованных приложений к сервисно-ориентированной инфраструктуре предприятия.

Прежде всего стоит оговориться, что под унаследованными приложениями мы будем понимать приложения, которые не предоставляют возможности подключения с помощью стандартного механизма интеграции - Web Service'ов и в то же время не являются хорошо известными и широко используемыми корпоративными приложениями, т.е. к ним не существует стандартных адаптеров. Таким образом такие лидеры рынка как SAP, OeBS, JDEdwards и Siebel не попадают под наше определение унаследованных приложений.

Теперь можно рассмотреть конкретные механизмы интеграции, предлагаемые стеком продуктов Oracle Fusion Middleware. Для Oracle SOA Suite данными механизмами являются технологические адаптеры.


Технологические адаптеры Oracle SOA Suite реализованы по спецификации J2EE Connector Architecture, что обеспечивает единые принципы разработки, а так же упрощает администрирование. К тому же использование открытой спецификации позволяет сторонним разработчикам реализовывать свои адаптеры. Замечательный пример реализации дополнительного адаптера и его интеграции в JDeveloper - адаптера к SSH - приведен в презентации наших соотечественников Дмитрия Нефедкина и Дмитрия Володина Building Custom JCA Adapters To Integrate 3rd Party Solutions to Oracle FMW.

Однако рассмотрим все же стандартные адаптеры, поставляемые вместе с Oracle SOA Suite.


DB Adapter

Адаптер для подключения к базам данных, DB Adapter. Используется для получения и/или изменения информации в базах данных, работающих под СУБД различных производителей. Незаменимый адаптер при подключении к унаследованным системам, построенным по двузвенной архитектуре - данные, бизнес-логика и API для доступа к бизнес-логике находятся в базе данных. Сам Oracle SOA Suite при этом выступает клиентом к базе данных, таким же как приложение на Delphi или Oracle Forms. Данный адаптер позволяет выполнять следующие операции:

  • вызывать хранимые процедуры;

  • осуществлять последовательный опрос (полинг) таблиц и представлений с целью обнаружения изменений;

  • осуществлять стандартные запросы к базе данных: выбор, вставку, обновление, вставку-обновление и удаление записей;

  • осуществлять произвольные запросы к базе данных.


Подробнее ознакомиться с настройкой адаптера для вызова хранимых процедур можно в заметке Практический пример построения сервиса на Oracle Service Bus. Хороший обзор всех основных возможностей данного адаптера приведен так же в главе 7 Communicating with the Database книги Oracle Service Bus 11g Development Coockbook.

JMS Adapter

Java Message Service (JMS) является стандартным способом обмена сообщениями между приложениями, построенными на базе платформы Java EE. В состав Oracle SOA Suite входит адаптер, позволяющий отправлять сообщения в JMS-очередь, считывать сообщения из очереди, а так же выполнять операции вида "запрос-ответ" с помощью JMS, при этом данные операции могут выполняться как синхронно, например с помощью операции Invoke в BPEL, так и асинхронно, путем отправки сообщения в очередь запросов и последующего отложенного считывания сообщения из очереди ответов.


Адаптером поддерживаются следующие типы сообщений:
- текстовые, в частности обмен с помощью XML;
- байтовые;
- пары ключ значение (MapMessages).

JMS-адаптер как и DB-адаптер поддерживает транзакции. Подробнее про настройку транзакционного взаимодействия посредством JMS-адаптера можно прочитать в заметке Транзакционное чтение из JMS-очереди в Oracle SOA Suite, а про использование MapMessages - в заметке Формирование MapMessage с помощью JMS-адаптера Oracle SOA Suite.

AQ Adapter

Адаптер, предназначенный для обмена сообщениями посредством подсистемы Oracle Advanced Queuing - очередей сообщений, реализуемых СУБД Oracle. Использование данного адаптера совместно с AQ-очередями является хорошей заменой DB-адаптеру, осуществляющему полинг таблиц событий с целью захвата изменений данных в унаследованном приложении.

Подобно JMS-адаптеру AQ-адаптер поддерживает операции: считывание из очереди (Dequeue), запись в очередь и асинхронное взаимодействие вида "запрос-ответ" (Enqueue/Dequeue).


MQ Adapter

Одной из самых распространенных в мире реализаций программного обеспечения промежуточного слоя, основанного на обмене сообщениями (Message Oriented Middleware, (MOM)) является IBM WebSphere MQ (MQ Series). Естественно, что Oracle SOA Suite содержит адаптер, позволяющий подключаться к данной реализации очередей.

MQ Adapter позволяет реализовать следующие операции: запись сообщения в очередь (Put), в том числе синхронное считывание из очереди (Get), синхронная/асинхронная отправка сообщения в очередь запросов и считывание ответа из очереди ответов (Send Message to MQ and Get Reply/Reports), синхронное/асинхронное считывание сообщения из очереди и запись в другую очередь (Get Message from MQ and Send Reply/Reports).


К достоинствам адаптера следует отнести встроенную поддержку родных IBM'овских форматов: CICS и IMS при считывании данных.


А так же поддержку массовых операций - записи одновременно в несколько очередей при выполнении операции Put.


File Adapter и FTP Adapter

Часто бывает так, что интегрироваться приходится с очень старыми системами, которые не содержат вообще никаких точек подключения и позволяют лишь обмениваться файлами. К счастью в состав Oracle SOA Suite входит довольно мощный файловый адаптер, позволяющий реализовать такую интеграцию.

Файловый адаптер поддерживает следующие операции: асинхронное считывание файлов (Read File), по сути - полинг директории на диске, запись файла (Write File), синхронное считывание файла (Synchronous Read File), позволяет по команде считать содержимое выбранного файла, а так же получение списка файлов в одном или нескольких каталогах (List Files).


Одним из преимуществ файлового адаптера Oracle SOA Suite является т.н. Native Format Builder, доступный при нажатии на "шестеренку" на странице Messages мастера настройки адаптера.


Native Format Builder позволяет построить XSD-представление файла на основе его формата. Поддерживаются следующие типы форматов:

- поля переменной длины, разделенные специальными символами (Delimited);
- поля фиксированной длины (Fixed Length);
- сложные типы (записи, которые могут включать в себя несколько различных типов);
- XML, описанный с помощью DTD;
- Cobol Copybook.


В качестве информации для настройки первых трех форматов служит пример имеющегося файла, что очень удобно. Уж пример используемого при интеграции файла смежники - разработчики или администраторы подключаемой системы - точно должны предоставить.


FTP-адаптер реализует функциональность аналогичную файловому адаптеру за тем исключением, что операции будут выполняться над удаленной файловой системой. Так же на странице выбора операции данный адаптер позволяет указать режим обмена: бинарный или текстовый.


HTTP Binding

Для интеграции с приложением, имеющим RESTful API можно использовать HTTP Binding. Данный адаптер позволяет как сделать разрабатываемый композит доступным по протоколу HTTP (режим Service, при этом можно выбрать реализуемый шаблон обмена сообщениями: однонаправленный обмен или "запрос-ответ"), так и наоборот - подключиться в композите к существующему сервису (режим Reference).


Данный адаптер поддерживает как GET, так и POST HTTP-запросы, при этом для POST-запросов можно выбрать представление содержимого: или url-encoded, или XML.

EJB Service

Технология Enterprise Java Beans является стандартом в мире Java EE для построения компонентов, реализующих бизнес-логику. В состав Oracle SOA Suite входит адаптер, позволяющий использовать композитное приложение как EJB, а так же наоборот - подключать EJB-компоненты к композитному приложению. При этом все взаимодействие осуществляется в рамках распределенных транзакций, тем самым обеспечивая согласованность изменения данных при интеграции приложений.


Заключение

Мы рассмотрели стандартные средства интеграции с унаследованными системами, входящие в поставку Oracle SOA Suite. Приведенный в данной статье список конечно же не является исчерпывающим. Oracle предлагает более трехсот адаптеров для подключения к различным системам, в том числе и таким известным как SAP ERP, Oracle e-Business Suite, JDEdwards, Siebel CRM и Oracle Fusion Applications. Например у Сурового есть опыт подключения SAP ERP к Oracle SOA Suite с помощью соответствующего адаптера, причем SAP ERP являлся как источником, так и приемником сообщений. Впечатления довольно положительные.

Если брать в расчет только технологические адаптеры, то самым популярным безусловно является DB Adapter. Это связано как с историческими - очень много еще эксплуатируется систем, построенных по двузвенной архитектуре, - так и с практическими причинами: не все даже относительно современные системы имеют высокопроизводительный шлюз для приема и отправки сообщений, поэтому приходится реализовывать интеграцию через буферные таблицы.

Для подключения систем, которые не могут общаться с внешним миром никак иначе, чем публикуя и/или считывая файлы, приходится использовать файловый и FTP-адаптеры. При этом под невозможностью общаться иначе как следует понимать не столько ограничения самого программного обеспечения, сколько ограничения конкретного внедрения, когда сначала интеграция была не нужна, а затем такая необходимость появилась, но приглашать специалистов по системе дорого. Таким образом через FTP-адаптеры мы реализовывали подключение IBM FileNet к Oracle SOA Suite.

В крупных сервисно-ориентированных инфраструктурах, включающих в себя лидера рынка MOM - IBM WebSphere MQ - по понятным причинам используется MQ Adapter, правда в России я практически не видел, чтобы в качестве MOM использовался MQ, а в качестве средства интеграции при этом - продукты Oracle, однако, судя по презентациям, на Западе такие решения встречаются.

Понравилось сообщение - подпишитесь на блог и Twitter

12 комментариев:

Иван Сергеев комментирует...

Павел, добрый день,

Интересная статья.
Подскажите пожалуйста, как лучше интегрировать Lotus Notes (чтение информации с полей базы *.nsf) и Oracle RDBMS с использованием SOA Suite? Во многих презентациях написано про Application Adapter для Lotus, но нигде не могу его найти.

Pavel Samolisov комментирует...

Здравствуйте.

Я тоже если честно про адаптер для Lotus не знаю, в списке http://www.oracle.com/technetwork/testcontent/ds-adapterlibrary-134201.pdf он не помечен звездочкой, значит его предлагает кто-то из партнеров Oracle.

Что такое файлы *.nsf? Это какие-то бинарные данные?

Можно попробовать так: взять Spring Context (входит в SOA Suite, начиная с 11.1.1.2, если не ошибаюсь) и написать небольшое Java-приложение по работе с такими файлами, используя API Lotus'а. Данное приложение будет формировать XML-ки на основе *.nsf-файлов. С другой стороны интеграции будет находиться DB Adapter, работающий с Oracle Database. Между данными компонентами - Mediator или если нужна более сложная маршрутизация/оркестровка - BPEL или даже цепочка композитов.

Иван Сергеев комментирует...

Павел, благодарю за ответ.
Буду разбираться как это сделать.
Файлы nsf (Notes Storage Facility) - единый контейнер базы Lotus, в котором хранится вся метаинформация базы (формы документов, представления, скрипты, ACL и тд.) и данные.
Что посоветуете почитать про связку в Spring+Db Adapter (soa suite)?

Pavel Samolisov комментирует...

Материала на самом деле, думаю, не много. DbAdapter довольно хорошо документирован, здесь проблем быть не должно. Про использование Spring Framework совместно с SOA Suite я писал здесь: http://samolisov.blogspot.ru/2012/12/spring-framework-sca-oracle-weblogic.html В принципе его использование мало чем отличается от обычного.

Иван Сергеев комментирует...

Павел, возможен ли такой вариант:
1. поднять на стороне сервера Lotus - WS (со своим WSDL, java class для обработки и передачи данных во вне);
2. в sca приложении реализовать для "Exposed Services" - wsLotus (URL на сервер Lotus) ==> "Components" - BPEL ==> "External References" - DB/AQ Adapter?

Подскажите пожалуйста, при использовании схемы на основе Spring "Exposed Services" остается пустым (не нужно вызывать внешние сервисы)?

Pavel Samolisov комментирует...

В принципе если вы на стороне Lotus поднимаете сервис, то вам уже и Spring не нужен, просто стартуете каким-то образом BPEL, он обращается к Lotus через WebService, захватывает данные, а затем через DB/AQ адаптер передает из в БД. Или я не так понял и на стороне Lotus есть клиент к веб-сервису, выставленному через SCA, который при появлении порции данных вызывает SOA Suite?

Exposed Services - это то, что выставляет композит, т.е. точки доступа к нему, если ваш композит хоть для чего-то используется, то это поле не может быть пустым. Если вся логика реализована в композите и ему не нужно вызывать другие сервисы, то пустой остается область External References, но в вашем случае там должен быть DB или AQ адаптер.

stepan kachan комментирует...
Этот комментарий был удален автором.
Pavel Samolisov комментирует...

По просьбе Степана написал заметку Event-Driven Architecture на Oracle SOA Suite 11g - компонент Event Delivery Network (EDN).

Иван Сергеев комментирует...

Можно ли вместо Spring framework использовать BPEL Java Embedding activity с соответствующим кодом обращения к Lotus Domino?

Pavel Samolisov комментирует...

Можно попробовать, конечно, вопрос только в размере кода. Обычно Java Embedding используется для вставки небольшого участка кода на 5-10 строк, иначе получившиеся процессы будет сложно отлаживать. Примером использования Java Embedding может быть преобразование в/из BASE64.

Иван Сергеев комментирует...

Павел, добрый день!

Последовал Вашей рекомендации и интеграцию сделал через Lotus Java API по протоколу DIIOP. Однако выяснелась одна особенность, при которой выгрузка полной базы из Lotus занимает порядко 5 минут, а хотелось бы чаще копировать базу Lotus в базу Oracle. Инкрементальное копирование занимает 5 сек, что является решением проблемы. Поэтому решил создать два композита: первый проверяет есть ли записи в таблице (select count (*) from table) и передает значение во второй композит, а второй, в зависимости от значение превого композита, производит запуска одного из двух Spring контейнеров (полная или инкрементальная запись в Oracle).
И на этом этапе возникла проблема в создании первого композита определяющего кол-во записей в таблице Oracle.
Делаю слдующее:
1. Создаю DB Adapter и выбираю Execute Pure SQL, добавляю в соотвествующее окно запрос (select count (*) from table), при этом создается xsd схема (Input - не определен, а Output - COUNT___ type:decimal);
2. Создаю xsd схему (Output_for_compos2 c одним параметром для передачи во второй композит) и создаю BPEL процесс на основе этой схемы;
3. Открываю редактор BPEL, добавляю Receive, который обращается к ParthnerLink(DB Adapter) и принимает от адаптера COUNT___;
4. Добавляю в конец процесса Invoke и передаю ему значение Output_for_compos2;
5. Добавляю Transform между Receive и Invoke и провожу преобразования (source:COUNT___ ---> target: Output_for_compos2).
Подскажите пожалуйста, что я делаю неправильно при создании первого композита, потому что выдается ошибка Error Parse XML.

Pavel Samolisov комментирует...

Иван, здравствуйте. Я не вижу полного сообщения об ошибке, поэтому мне трудно вам ответить. Но вообще такие ошибки в редакторах JDeveloper бывают. Можете выслать сгенерированный XSD на samolisov@gmail.com? Вообще имена параметров, сгенерированные адаптером, можно менять: COUNT__ заменить на просто COUNT или RECORDS_COUNT прямо в адаптере, это изменение отобразится и в XSD. Так же можете попробовать для определения второго композита использовать схему, сгенерированную для первого, тогда вам ничего не придется трансформировать.

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!