Практический подход к JMS-интеграции с продуктом IBM Business Process Manager

В статье описывается реализация UCA-агента (Undercover Agent) на базе технологии JMS (Java™ Message Service) для продукта IBM Business Process Manager V7.5 с целью передачи JMS-сообщений непосредственно в компонент Event Manager продукта Business Process Manager без какого-либо специального конфигурирования. Этот подход обеспечивает элегантную реализацию асинхронного метода для вызова бизнес-процесса в продукте Process Center.

Шарад Чандра, старший консультант по WebSphere, IBM

Шарад Чандра (Sharad Chandra) – фотографияШарад Чандра (Sharad Chandra) работает старшим консультантом по WebSphere в IBM Software Group. Имеет 8-летний опыт в области BPM- и SOA-технологий, а также в разработке сложных решений для заказчиков с использованием BPM-технологий и ПО промежуточного уровня.



Сатиш Балакришнан, ИТ-специалист, IBM

Фото Сатиша БалакришнанаСатиш Балакришнан (Sateesh Balakrishnan) работает ИТ-специалистом в группе IBM Software Services for WebSphere (ISSW). Имеет более чем 10-летний опыт работы и в настоящее время занимается BPM и BRMS, специализируясь на WebSphere Lombardi и WebSphere ILOG. До этого работал над инфраструктурой приложений с особым акцентом на WebSphere Application Server, перенос приложений J2EE и диагностику производительности, а также настройку WebSphere Application Server. Решал разные задачи в IBM, включая проектирование и разработку решений на базе J2EE. Интересуется системами BPM и BRMS.



25.04.2013

Введение

JMS (Java ™ Message Service) — это технология обмена сообщениями, которая поддерживает асинхронное функционирование Java-приложений, а также может использоваться для интеграции гетерогенных платформ. Например, при необходимости интеграции стороннего приложения с продуктом IBM Business Process Manager V7.5 обычная методика реализации выглядит следующим образом: сначала на сервере приложений создается JMS-провайдер (шина интеграции сервисов, фабрика соединений очереди, сама очередь и т.д.), а затем в продукте Business Process Manager создается интеграционный JMS-сервис для связывания с ранее сконфигурированным провайдером с целью отправки и получения сообщений. В данной статье рассматривается сценарий JMS-интеграции с продуктом Business Process Manager V7.5 посредством использования существующей инфраструктуры обмена сообщениями и компонента Event Manager продукта Process Server. Хотя этот метод реализации относительно прост, он обеспечивает надлежащую основу для разработки более сложных решений.

Компонент Event Manager продукта Process Server реагирует на внешние события. Event Manager ставит в очередь входящие сообщения и инициирует соответствующий UCA-агент. На рис. 1 показано, каким образом Event Manager получает и обрабатывает входящие запросы. Event Manager использует UCA-агент для определения местоположения сервиса, ассоциированного с событием. Таким образом, если вы хотите вызвать тот или иной сервис при получении события типа "входящее сообщение", или желаете вызвать сервис как результат события, которое происходит на регулярной основе, то вам следует создать UCA-агент.

Рисунок 1. Функционирование компонента Event Manager
Event Manager execution

The download provided with the article contains two code samples, one for IBM BPM V7.5 and one for BPM V8.

Роль UCA-агента

UCA-агент создает своего рода "мост" между внешними системами и определениями бизнес-процессов (BPD). Такие UCA-агенты позволяют управлять входящими и исходящими коммуникациями с внешними системами. UCA-агент прослушивает события от внешних систем – посредством сообщений или по установленному графику. Если вы хотите отправить сообщение компоненту JMS Listener (прослушиватель JMS), то на этот случай для компонента Event Manager установлена определенная структура XML-сообщения, которую должно иметь сообщение, получаемое им от внешней системы. UCA отвечает за инициирование события Start Message Event или Intermediate Message Event, которое содержится в BPD-определении.

С UCA-агентом ассоциированы следующие очереди:

  • Async Queue: Асинхронная очередь; обеспечивает возможность одновременного исполнения заданий Event Manager.
  • SYNC_QUEUE_1: Синхронная очередь; принудительно завершает текущее задание, чтобы могло запуститься следующее задание. По умолчанию доступны три синхронные очереди.
  • SYNC_QUEUE_2: Синхронная очередь; принудительно завершает текущее задание, чтобы могло запуститься следующее задание. По умолчанию доступны три синхронные очереди.
  • SYNC_QUEUE_3: Синхронная очередь; принудительно завершает текущее задание, чтобы могло запуститься следующее задание. По умолчанию доступны три синхронные очереди.

Все эти очереди инициализируются в момент запуска сервера.

Шаг 1. Создание процесса

Приложение процесса, используемое в этой статье, представляет собой простой сервис для обслуживания пользователя, реализованный как управляющий элемент типа Coach (см. рис. 2), Этот элемент отображает данные, полученные посредством события сообщения, которое сконфигурировано для взаимодействия с UCA-агентом.

Рисунок 2. Элемент типа Coach для отображения принятых данных
Coach to display received data

На рис. 3 показаны входные данные, который описываемый процесс получает и публикует в соответствующем элементе Coach.

Рисунок 3. Входные данные для процесса
Input data for the process

Шаг 2. Создание сервиса-обработчика событий

Сервис обработчика событий представляет собой сервис General System Service, являющийся основой UCA-агентам. Этот сервис получает данные от внешнего "инициатора" и через UCA-агент направляет их в BPD-процесс. Для этого сервиса необходимо в явном виде описать выходные данные и отобразить их на входные данные, в противном случае выходные данные будут иметь значение null. Заданные для этого сервиса данные должны совпадать с входными данными, которые требуются BPD-процессу. Для задания вышеуказанного сервиса выполните следующие шаги.

  1. Выберите пункт General System Service (см. рис. 4), и присвойте сервису имя ComplexUCAService.
    Рисунок 4. Создание UCA-сервиса
    Create a UCA service
  2. На вкладке Variable опишите входные и выходные данные, которые требуются BPD-процессу (см. рис. 5).
    Рисунок 5. Создание входных (Input) и выходных (Output) параметров для UCA-сервиса
    Create Input and Output parameters for the UCA service
  3. Добавьте серверный скрипт и свяжите его с входом и с выходом. Присвойте этому скрипту имя Input -OutputMapping. В свойстве Implementation компонента отобразите входные данные на выходную переменную явным образом (см. рис. 6).
    Рисунок 6. Отображение ввода-вывода для UCA-сервиса
    Input-Output mapping for the UCA service

Создание UCA-агента

Чтобы к UCA-агенту можно было обратиться, необходимо сначала его создать. Чтобы создать UCA-агент и ассоциировать его с сервисом General System Service выполните следующие шаги.

  1. В представлении Designer выберите знак "+" рядом со строкой Implementation, а затем выберите строку Undercover Agent (см. рис. 7).
    Рисунок 7. Создание UCA-агента
    Create a UCA
  2. В диалоговом окне New Undercover Agent задайте следующую информацию (см. рис. 6), а затем нажмите на Finish.
    • Name: Укажите имя нового UCA-агента.
    • Schedule Type: Выберите из списка опцию On Event.
    • Attached Service: Нажмите на Select и выберите сервис, который следует вызывать при получении события. В данном случае выберите сервис ComplexUCAService.
    Рисунок 8. Конфигурирование UCA-агента
    Configure the UCA
  3. После того как UCA-агент будет создан, появится диалоговое окно для конфигурирования свойств этого UCA-агента (см. рис. 9). В этом окне вам необходимо ассоциировать UCA-агент с только что созданным сервисом. Не забудьте поставить флажок в окошке Enabled, чтобы активировать исполнение сервиса при поступлении события. В случае отсутствия этого флажка компонент Event Manager не будет выполнять UCA-агент при получении внешнего сообщения. Обратите внимание, что компонент Event Manager может показывать, что он исполняет UCA-агент, однако при отсутствии флажка Enabled реального исполнения не происходит.

    В разделе Parameter Mapping поставьте флажок Use Default, чтобы использовать значение по умолчанию для входной переменной в подключенном сервисе. Если входная переменная подключенного сервиса не имеет значения по умолчанию, этот флажок снят. В большинстве случаев требуемые значения включены в событие входящего сообщения, поэтому никаких действий в этом окне не требуется.

    Рисунок 9. Ассоциирование UCA-сервиса с UCA-агентом
    Associate the UCA service with the UCA

Отправка сообщения в Event Manager

Чтобы вызвать BPD-процесс посредством отсылки данных приложения через UCA-агент, необходимо инкапсулировать данные в заранее заданную XML-структуру с элементом eventmsg в качестве root, как показано в следующем листинге.

String data="<eventmsg><event processApp="JMSTA" snapshot="JMSTASNAPSHOT" 
ucaname="complexBOUCA">complexBOUCA</event>
<parameters>
   <parameter>
      <key>ucacomplexInput</key>
      <value>
         <customerID>"+customerID+"</customerID>
         <name>"+name+"</name>
         <address>"+address+"</address>
         <surname>"+surname+"</surname>
         <city>"+city+"</city>
         <state>"+state+"</state>
         <country>"+country+"</country>
      </value>
    </parameter>
  </parameters>
</eventmsg>"

Обратите внимание, что вам необходима следующая информация для включения в XML-заголовок:

  • snapshot: Имя моментального снимка процесса; созданного с помощью Process Center.
  • ucaname: Имя UCA-агента; доступно в UCA-редакторе продукта Process Center.
  • processApp: Имя процесса; это имя предоставляется, когда вы создаете новое приложение процесса.
  • event: Имя события; в данном случае это complexBOUCA.
  • key : Имя входного объекта, заданного в UCA-сервисе.

В нашем сценарии для отправки какого-либо сообщения в Event Manager используется клиент сервлетного типа. Этот сервлет динамически форматирует сообщение в предписанный формат. Для доставки этого сообщения в UCA-сервис необходимо просмотреть очередь событий в обеспечивающем сервере WebSphere Application Server. Эта очередь событий имеет JNDI-интерфейс jms/eventqueue, как показано в следующем примере.
Queue ucaqueue=(Queue)ctx.lookup("jms/eventqueue");

Для получения дополнительной информации по структуре сообщения обратитесь к разделу Понимание структуры сообщения в Информационном центре по продукту Business Process Manager.


Задание события сообщения и ассоциирование его с UCA-агентом

Событие сообщения — это компонент, который реально взаимодействует с UCA-агентом с целью получения внешнего стимула для вызова BPD-процесса. Вам необходимо связать это событие с задачей процесса. Для этого выполните следующие шаги.

  1. Создайте BPD-процесс в инструменте Process Designer. Перетащите элемент Start Message Event на палитру и свяжите его с действием Submit Request с помощью направленной линии (см. рис. 10).
    Рисунок 10. Создание события сообщения
    Create a message event
  2. Ассоциируйте это событие сообщения с UCA-агентом complexBOUCA, который вы задали ранее (см. рис. 11).
    Рисунок 11. Конфигурирование события сообщения
    Configure the message event

Тестирование интеграционного решения

Прежде чем можно будет протестировать решение, необходимо представить процесс группе AllUsers (см. рис. 12). В противном случае этот процесс не будет вызван и не будет виден в Process Portal.

Рисунок 12. Представление процесса группе AllUsers
Expose the process to AllUsers

Чтобы протестировать все решение, мы создали простое клиентское приложение на базе JSP и развернули его в среде WebSphere Application Server. С помощью этого JSP-клиента, который можно загрузить вместе с данной статьей (см. рис. 13), вы сможете создать запрос, который отправляется сервлету. Сервлет помещает сообщение в очередь для последующего использования компонентом Event Manager.

Рисунок 13. Вызов JSP-клиента
Invoke a JSP client

После отправки сообщения посредством JSP-клиента вы сможете войти в компонент Process Portal как пользователь admin.В окне Inbox вы должны увидеть новый экземпляр процесса, который был создан в результате получения сообщения (см. рис. 14). Нажмите на зеленую пиктограмму Run у экземпляра этого процесса. Процесс будет запущен на исполнение, в результате чего вы увидите данные, полученные от клиента (см. рис. 14).

Рисунок 14. Результаты в представлении Process Portal
Results in Process Portal

Верификация результатов в JVM-журнале

После успешного инициирования UCA-агента вы сможете верифицировать успешность этого вызова с помощью JVM-журнала Business Process Manager (см. рис. 15).

Рисунок 15. Сообщение в журнале systemout.log
Message in systemout.log

(Версия рисунка 15 в более крупном масштабе.)


Заключение

В статье было описано, как инициировать процесс посредством отправки JMS-сообщения в компонент Event Manager продукта IBM Business Process Manager V7.5. При этом были последовательно рассмотрены этапы реализации компонента Event Manager и UCA-агента, а также описаны отношения между ними на этапе исполнения. Вы узнали, как интегрировать технологию JMS с продуктом Business Process Manager с помощью ассоциированного BPD-определения и используемой по умолчанию инфраструктуры обмена сообщениями продукта Process Center.

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

Благодарим за рецензирование данной статьи Скотта Симмонса и Харшу Бхушану.


Загрузка

ОписаниеИмяРазмер
Пример скриптаJMSUCATEST.zip9 КБ
Sample code for IBM BPM V7.5 and V8SampleCode.zip794 Б

Ресурсы

Комментарии

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=900621
ArticleTitle=Практический подход к JMS-интеграции с продуктом IBM Business Process Manager
publish-date=04252013