Интеграция SCA-MQ с использованием MQ-связываний

Функциональность MQ Bindings в WebSphere Integration Developer V6.0.2 упрощает взаимодействие между SCA- и MQ-приложениями, а также облегчает чтение и запись родных MQ-сообщений в (из) SCA-приложения.

Бенедикт Фернандес, старший консультант по управлению, IBM Software Services for WebSphere, Systems Documentation, Inc. (SDI)

Бенедикт Фернандес (Benedict Fernandes) работает старшим консультантом по управлению в IBM Software Services for WebSphere в Research Triangle Park, NC. Получил степень магистра по информационным сетям в Carnegie Mellon University, степень магистра по вычислительной технике в De La Salle University и степень магистра наук в BITS-Pilani, India. Связаться с ним можно по адресу bxf@us.ibm.com.



29.08.2008

Введение

SCA-приложения (Service Component Architecture) обычно разрабатываются для функционального интегрирования существующих корпоративных ресурсов. Многие имеющиеся традиционные (старые) приложения основаны на технологиях обмена сообщениями, такими как IBM® WebSphere® MQ. Функциональность MQ Bindings, представленная в WebSphere Integration Developer V6.0.2, упрощает взаимодействие между SCA- и MQ-приложениями, а также облегчает чтение и запись родных MQ-сообщений в (из) SCA-приложения. В данной статье рассматривается функциональность MQ Bindings, а затем демонстрируется, как создать готовое решение, основанное на традиционных SCA- и MQ-приложениях.

Основные концепции

SCA-приложения размещаются в контейнероподобной абстракции WebSphere Integration Developer, называемой SCA-модулем, который обычно содержит бизнес-объекты (Business Objects - BO), интерфейсы, операции экспорт и импорт:

  • Бизнес-объекты - это определяемые пользователем типы данных, представляемые внутренне как XML в формате Service Data Object (SDO).
  • Интерфейсы представляют клиентский контракт и указывают входы и выходы из сервиса.
  • Операции экспорт и импорт являются SCA-абстракциями, позволяющими SCA-приложению взаимодействовать с внешним миром.

Для того чтобы SCA-компонент взаимодействовал с приложениями, основанными на системе обмена сообщениями, через очереди сообщений, его операции экспорт и импорт должны быть настроены с использованием связываний системы обмена сообщениями SCA. SCA поддерживает три типа связываний системы обмена сообщениями:

  • JMS-связывание (Java Messaging Service). Обычно применяется "чистыми" Java-клиентами, например, такими, которые используют провайдер WebSphere системы обмена сообщениями по умолчанию.
  • MQ JMS-связывание. Обычно применяется JMS-клиентами, использующими в качестве провайдера системы обмена сообщениями WebSphere MQ.
  • MQ-связывание. Обычно используется "чистыми" MQ-клиентами, называемыми также традиционными (legacy) MQ-клиентами.

В данной статье рассматривается использование MQ-связывания.

Связывание Export - MQ используется, когда нужно, чтобы ваш компонент был доступен в асинхронном режиме из клиента системы обмена сообщениями WebSphere MQ. Связывание Import - MQ используется, когда нужно обратиться к WebSphere MQ Messaging Provider из компонента.

Связывание данных (data binding) является еще одним важным понятием. Основной функцией класса Data Binding является соединение форматов данных, которое определенным образом соответствует схеме входного или выходного сообщения. В данном случае наш класс Data Binding преобразует данные, передаваемые в родном формате из системы обмена сообщениями в SDO-объект (Service Data Object) SCA-приложения и наоборот для ответного сообщения. Класс Data Binding реализует предопределенный интерфейс и настраивается как часть операций экспорт или импорт на границах SCA-приложения. Он обычно создает и заполняет также экземпляры бизнес-объекта. В настоящее время WebSphere Integration Developer и WebSphere Process Server поддерживают только Java в качестве языка реализации классов Data Binding.

Сценарий приложения от начала до конца

Рисунок 1
Рисунок 1
  1. Клиент системы обмена сообщениями MQ помещает сообщение в локальную MQ-очередь EXPORTQ. Программа RFHUTIL используется в качестве как производителя, так и потребителя сообщений.
  2. Прибытие сообщения в EXPORTQ заставляет SCA Export, настроенный с MQ Messaging Bindings, принять сообщение и активизировать BPEL-процесс.
  3. Класс Data Binding читает MQ-сообщение, анализирует его и заполняет этими данными бизнес-объект предварительно определенного типа.
  4. Как часть этой обработки BPEL активизирует асинхронный MQ-сервис.
  5. SCA Import, настроенный с MQ Messaging Bindings, сериализует бизнес-объект в виде XML-строки и помещает его в локальную MQ-очередь, называемую IMPORTQ.
  6. Потребляющее MQ-приложение, в данном случае RFHUTIL, может затем потребить сообщение.

Данные

Этот пример использует однородное (flat) текстовое сообщение фиксированной длины в 70 байт со следующей структурой:

Рисунок 2
Рисунок 2

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

В следующих разделах в пошаговом режиме рассматривается реализация описанного выше сценария. Чтобы помочь лучше понять общую структуру и последовательность задач, ниже перечислены эти шаги:

  • Создать MQ-ресурсы WebSphere: менеджер очереди и очереди
    • Создать WebSphere менеджер MQ-очереди
    • Создать WebSphere MQ-очереди
    • Создать основанное на WebSphere Process Server бизнес-приложение - реализовать бизнес-логику BPEL
    • Создать BI-модуль (контейнер для всех SCA-артефактов)
    • Создать бизнес-объекты
    • Создать интерфейсы сервиса
    • Создать BPEL-процесс
    • Создать связанные с системой обмена сообщениями SCA-артефакты: экспорт, импорт, связывание данных
    • Создать класс Data Binding
    • Создать экспорт системы обмена сообщениями SCA
    • Создать импорт системы обмена сообщениями SCA
  • Протестировать приложение с начала до конца
  • Использовать RFHUtil для передачи и слежения за сообщениями

Создание MQ-ресурсов WebSphere

К MQ-ресурсам, необходимым для этого примера, относятся менеджер MQ-очереди QMGR900 с портом прослушивания 1490 и две локальные MQ-очереди EXPORTQ и IMPORTQ. Используйте программу WebSphere MQ Explorer для создания необходимых MQ-ресурсов. После создания локальных очередей EXPORTQ и IMPORTQ WebSphere MQ Explorer должен выглядеть примерно так:

Рисунок 3
Рисунок 3

Если вам нужны подробные инструкции по созданию MQ-ресурсов, просмотрите файл <download_root>/MQBindings/docs/MQResourcesSetup.doc, который можно загрузить ниже.

Создание BPEL-приложения WebSphere Process Server

Из перспективы Business Integration создайте новый модуль для размещения артефактов, необходимых для данного приложения. Для переключения в перспективу Business Integration выберите Window => Open Perspective => Business Integration. В окне Business Integration щелкните правой кнопкой мыши на канве и выберите New => Module. В панели New Module введите MQBindings в поле Module Name и нажмите кнопку Finish.

В перспективе Business Integration разверните MQBindings, щелкните правой кнопкой мыши на Data Types и выберите New => Business Object. Создайте бизнес-объект ProcessBO в папке /com/ibm/issw, как показано ниже, и нажмите кнопку Finish:

Рисунок 4
Рисунок 4

При этом откроется редактор Business Object Editor. Нажмите кнопку Add Attribute для создания одного атрибута String под названием orderString:

Рисунок 5
Рисунок 5

Это поле будет содержать все входящее сообщение WebSphere MQ в виде строки фиксированной длины. Входящее сообщение могло бы иметь другой формат. Нажмите Ctrl+S для сохранения изменений.

Повторите описанные выше действия для создания дополнительного бизнес-объекта ServiceXBO в этой же папке /com/ibm/issw, также как делали это для бизнес-объекта ProcessBO. Вот необходимые атрибуты для ServiceXBO:

Рисунок 6
Рисунок 6

Нажмите Ctrl+S для сохранения изменений. Теперь, после создания Business Objects, можно создать интерфейсы сервисов, которые будут использоваться BPEL-процессом. В навигационном дереве разверните MQBindings => New => Interfaces. Щелкните правой кнопкой мыши на Interfaces для запуска панели New Interface. Введите имя интерфейса и соответствующую ему папку/пакет, как показано ниже, и нажмите кнопку Finish:

Рисунок 7
Рисунок 7

В редакторе Interface Editor добавьте однонаправленную операцию processOrder. Измените поле name на orderInput и выберите ассоциированный с ним тип ProcessBO, как показано ниже. Нажмите Ctrl+S для сохранения изменений:

Рисунок 8
Рисунок 8

Создайте новый интерфейс сервиса под названием ServiceXInterface в папке com/ibm/issw, аналогично тому, как это делали на предыдущем шаге. В редакторе Interface Editor добавьте однонаправленную операцию updateInventory. Измените поле name на orderInput и выберите ассоциированный с ним тип ServiceXBO. Нажмите Ctrl+S для сохранения изменений:

Рисунок 9
Рисунок 9

Теперь можно создать BPEL-процесс, который будет обрабатывать входящее сообщение и помещать его в очередь исходящих сообщений. В перспективе Business Integration создайте новый бизнес-процесс: разверните MQBindings => Business Logic, щелкните правой кнопкой мыши на Process и выберите New => Business Process.

Создайте новый BPEL-процесс под названием OrderProcess в папке com/ibm/issw, как показано ниже, а затем нажмите кнопку Next:

Рисунок 10
Рисунок 10

Выберите Select an existing Interface и нажмите кнопку Browse для поиска и выбора OrderProcessInterface. Операция processOrder выбирается автоматически. Нажмите кнопку Finish.

В редакторе Business Process Editor добавьте Java-сниппет: выберите действие Snippet и измените имя Java-сниппета по умолчанию на Log Input. В окне Properties View перейдите в закладку Details и выберите Java в качестве типа реализации. Если появится диалоговое окно Question, нажмите кнопку Yes. В текстовой области введите следующую строку кода:

System.out.println("The Input Order Record is ==> " + OrderInput);

Полученный BPEL должен выглядеть примерно так:

Рисунок 11
Рисунок 11

Аналогично, добавьте еще один узел Java-сниппет и измените его имя на Prepare Service Call. Скопируйте исходный код для этого Java-сниппета из предоставленного текстового файла <download_root>/MQBindings/code/PrepareServiceCallX-codeSnippet.txt.

Для обработки появляющихся ошибок компиляции щелкните правой кнопкой мыши внутри окна Snippet и выберите Source => Organize Imports. Для исправления ошибок компиляции выберите следующие пакеты: commonj.sdo.DataObject, com.ibm.websphere.sca.sdo.DataFactory.

Фрагмент кода использует временную переменную ServiceXBO, которая хранит входные данные для активизации ServiceX. Фрагмент использует базовую технику управления Java-строками для извлечения релевантных данных из оригинального входящего сообщения, а затем заполняет BO, который является специфичным для ServiceX:

Рисунок 12
Рисунок 12

Для исправления оставшихся ошибок компиляции создайте временную переменную theServiceXBO и ассоциируйте ее с подходящим типом данных. В окне BPEL Editor outline нажмите знак + в разделе Variables и назовите переменную theServiceXBO:

Рисунок 13
Рисунок 13

В окне Properties проверьте, что theServiceXBO появляется как ассоциированный тип данных. Полученный BPEL должен выглядеть примерно так:

Рисунок 14
Рисунок 14

Затем добавьте действие Invoke в BPEL-процесс и переименуйте его для ясности в Invoke ServiceX. Действие Invoke должно быть настроено на активизацию или вызов сервиса. Необходимо настроить соответствующий интерфейс активизируемого сервиса, также называемый Reference Partner. Для этого перетащите ServiceXInterface из окна Navigation на канву BPEL Process Editor:

Рисунок 15
Рисунок 15

Описанное выше действие "перетащи и отпусти" должно привести к тому, что ServiceXInterface будет добавлен в раздел Reference Partners.

В окне Properties выберите закладку Details, затем нажмите кнопку Browse и выберите ServiceXInterface. Убедитесь, что в качестве запрашиваемой операции выбран updateInventory. Отметьте флажок Use Data Type Variables и выберите временную переменную theServiceXBO. Полученная конфигурация должна выглядеть примерно так:

Рисунок 16
Рисунок 16

Последним шагом создания BPEL-процесса является добавление простого узла Java-сниппета для регистрации сообщения exit (выход). Переименуйте его на Log Final. Выбрав узел Log Final, введите следующий Java-код:

System.out.println("Exiting OrderProcess Done -- BYE");

Окончательный BPEL-процесс должен выглядеть примерно так:

Рисунок 17
Рисунок 17

Создание SCA-артефактов, относящихся к системе обмена сообщениями

Для создания класса Data Binding перейдите в перспективу Java: выберите Window => Open Perspective => Other => Java => OK. В окне Package Explorer щелкните правой кнопкой мыши на com.ibm.issw и выберите New => Class. Заполните панель New Java Class, введя имя класса Data Binding: InventoryCustomDataBinding. Затем нажмите кнопку Finish.

На предыдущем шаге во время создания класса мы могли бы указать, что этот класс реализует класс MQBodyDataBinding. Но для простоты предоставляется отдельный файл с исходным кодом, содержащий полную реализацию класса MQ Data Binding. Откройте текстовый файл <download_root>/code/InventoryCustomDataBinding.java в текстовом редакторе и замените скелетную реализацию в вашей рабочей области (workspace) на предоставленную Java-реализацию. Указанные в классе MQBodyDataBinding методы должны появиться в окне outline. Просмотрите список операций импорта, чтобы узнать об используемых пакетах WebSphere Process Server. Нажмите Ctrl+S для сохранения изменений.

Рисунок 18
Рисунок 18

Вернитесь назад в перспективу Business Integration и в окне Navigation выберите MQBindings => Business Logic => Process => OrderProcess. Перетащите компонент OrderProcess на канву, как показано ниже:

Рисунок 19
Рисунок 19

Выберите компонент OrderProcess, щелкните правой кнопкой мыши и выберите Generate Export => Messaging Binding => MQ Binding.

Настройте сгенерированную MQ Export в панели MQ Export Binding. Имеется две главные категории требуемой конфигурационной информации: конфигурационная информация о WebSphere MQ и спецификация класса Data Binding. Информация о WebSphere MQ, например, имя менеджера очереди, хост, канал и порт, должна соответствовать настройкам менеджера очереди, указанным ранее. В рабочей среде ее можно получить у администратора WebSphere MQ. В данном примере, поскольку это однонаправленный коммуникационный поток, необходимо указать только Receive Destination Queue. Это очередь, которую внутренний SCA MDB-компонент будет прослушивать и доставлять сообщения ассоциированному CA-компоненту после активизации необязательно настроенного класса Data Binding.

В качестве последнего шага по настройке MQ Export необходимо заполнить свойства для раздела преобразования данных. Установите значение для Request SerializationType в User Supplied в ниспадающем меню. Затем нажмите кнопку Browse и выберите класс InventoryCustomBinding. Окончательная конфигурация должна выглядеть примерно так:

Рисунок 20
Рисунок 20

Нажмите кнопку OK для завершения настройки MQ Export. Созданная операция MQ Export появляется на сборочной диаграмме. Переименуйте MQ Export на OrderProcessExport:

Рисунок 21
Рисунок 21

Вспомните, что SCA-операции экспорт и импорт являются внешними точками доступа для SCA-приложения. На предыдущем шаге мы настроили SCA Export с MQ-связываниями системы обмена сообщениями, следовательно, разрешили приложению принимать сообщения (входящие) от MQ-клиентов. Теперь нужно настроить исходящий коммуникационный канал к MQ-клиенту.

В панели пиктограмм выберите Import, поместите на канву и переименуйте на ServiceXImport. Выбрав ServiceXImport, нажмите пиктограмму Interface, появляющуюся выше ее, для добавления нового интерфейса. В панели Add Interface выберите ServiceXInterface. Вспомните, что ServiceXInterface был настроен в самом начале после определения бизнес-объектов. Нажмите кнопку OK. Щелкните правой кнопкой мыши на компоненте ServiceXImport и выберите Generate Binding => Messaging Binding => MQ Binding.

Настройка MQ Import аналогична настройке MQ Export с двумя важными задачами: настройкой специфичной для MQ-транспорта информации и указанием информации, специфичной для преобразования данных.

Введите свойства MQ Import, как показано ниже. В этом примере мы просто сериализуем бизнес-объект и посылаем его в настроенную выходную очередь, IMPORTQ в данном случае. Поэтому выберите Serialized as XML в качестве желаемого типа Request Serialization type и нажмите кнопку OK:

Рисунок 22
Рисунок 22

В закладке Assembly Diagram выберите связь от компонента OrderProcess и соедините его с ServiceXImport. Окончательная версия сборочной диаграммы со всеми соединенными компонентами должна выглядеть так:

Рисунок 23
Рисунок 23

Тестирование приложения с начала до конца

Теперь мы готовы развернуть приложение на сервере WebSphere Process Server. В закладке Servers щелкните правой кнопкой мыши на WebSphere Process Server V6 и выберите Add and remove projects. Для развертывания приложения нажмите кнопку MQBindingsApp, затем выберите Add => Finish и подождите, пока состояние сервера не изменится на Started. Как обычно, следите в Server Console за возможными ошибками запуска. Теперь все готово для тестирования приложения.

Для начала процесса тестирования используйте MQ-ресурсы, которые были созданы ранее. Мы будем использовать служебную программу RFHUTIL для чтения данных из текстового файла и передачи их в виде сообщения в локальную очередь EXPORTQ, управляемую менеджером очереди QMGR900. Прибытие сообщения в очередь EXPORTQ вызовет активацию BPEL-процесса для потребления сообщения. Во время выполнения BPEL-процесс будет активизировать асинхронный сервис, помещая другое сообщение в исходящую MQ-очередь IMPORTQ.

Запустите служебную программу RFHUTIL. Укажите менеджер очереди QMGR900 и очередь EXPORTQ, как отмечено цифрами 1 и 2 ниже. Затем нажмите кнопку Read File и укажите каталог, где вы разархивировали файл data.txt, предоставляемый с данной статьей. Нажмите кнопку Write Q для доставки сообщения в EXPORTQ:

Рисунок 24
Рисунок 24

Можно также следить за данными, просматривая содержимое закладки Data экрана RFHUTIL. Как пояснялось выше, помещение сообщения в очередь EXPORTQ приводит к потреблению этого сообщения BPEL-процессом, преобразованию и доставке его в очередь IMPORTQ. Каждый раз, когда вы помещаете сообщение в очередь EXPORTQ, число сообщений в очереди IMPORTQ должно увеличиваться на единицу. Для проверки глубины очереди IMPORTQ и EXPORTQ используйте WebSphere MQ Explorer: выберите Start => WebSphere MQ => WebSphere MQ Explorer и проверьте поле Current queue length, как показано ниже. Можно также проверять данные, просматривая содержимое закладки Data экрана RFHUTIL и сообщение с сериализованными XML-данными в IMPORTQ.

Рисунок 25
Рисунок 25

Можно исследовать содержимое сообщения в IMPORTQ, используя программу RFHUTIL, как указано ниже. Проверьте, что в качестве менеджера очереди выбран QMGR900, а в качестве текущей очереди выбран IMPORTQ. Нажмите кнопку Read Q для чтения сообщения из очереди. Это вызывает физическое удаление сообщения из IMPORTQ.

Рисунок 26
Рисунок 26

Для исследования реального содержимого сообщения выберите закладку Data и нажмите кнопку XML, поскольку SCA Import был настроен с параметром Serialize as XML, что приводит к преобразованию сообщения в XML в очереди назначения.

Рисунок 27
Рисунок 27

Заключение

В данной статье были рассмотрены концепции функциональности MQ Bindings WebSphere Integration Developer V6.0.2 и показаны реализация и артефакты, необходимые для интеграции SCA- и MQ-приложений.

Благодарности

Авторы хотели бы поблагодарить Питера Ксу (Peter Xu), Дебасиша Банерджи (Debasish Banerjee) и Роберта Дреллеса (Robert Drelles) за их ценные замечания.


Загрузка

ОписаниеИмяРазмер
Пример кодаMQBindingsArticleArtifacts.zip234 КБ

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=WebSphere
ArticleID=333765
ArticleTitle=Интеграция SCA-MQ с использованием MQ-связываний
publish-date=08292008