Содержание


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

Comments

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
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
Coach to display received data

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

Рисунок 3. Входные данные для процесса
Input data for the                     process
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
    Create a UCA service
  2. На вкладке Variable опишите входные и выходные данные, которые требуются BPD-процессу (см. рис. 5).
    Рисунок 5. Создание входных (Input) и выходных (Output) параметров для UCA-сервиса
    Create Input and                     Output parameters for the UCA service
    Create Input and Output parameters for the UCA service
  3. Добавьте серверный скрипт и свяжите его с входом и с выходом. Присвойте этому скрипту имя Input -OutputMapping. В свойстве Implementation компонента отобразите входные данные на выходную переменную явным образом (см. рис. 6).
    Рисунок 6. Отображение ввода-вывода для UCA-сервиса
    Input-Output mapping                     for the UCA service
    Input-Output mapping for the UCA service

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

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

  1. В представлении Designer выберите знак "+" рядом со строкой Implementation, а затем выберите строку Undercover Agent (см. рис. 7).
    Рисунок 7. Создание UCA-агента
    Create a 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
    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
    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
    Create a message event
  2. Ассоциируйте это событие сообщения с UCA-агентом complexBOUCA, который вы задали ранее (см. рис. 11).
    Рисунок 11. Конфигурирование события сообщения
    Configure the message                     event
    Configure the message event

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

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

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

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

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

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

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

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

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

Рисунок 15. Сообщение в журнале systemout.log
Message in 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.

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

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


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

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