Как Организовать Взаимодействие Процессов В Oracle Bpm

Трудно представить полностью изолированный процесс, т.е.

выполнение задач без необходимости обращения к внешним источникам информации и в большинстве случаев процесс BPMN представляет собой оркестровку таких вызовов.

Более того, он может получать доступ к службам интеграции приложений, другим процессам BPMN или BPEL как синхронно, так и асинхронно.

Множество реальных проблем требуют от архитекторов и разработчиков серьёзного подхода к вопросу организации взаимодействия решения с «внешним» миром, и здесь дело не ограничивается исключительно интеграционным подходом, важно сохранить сам контекст таких связей.

Oracle BPM предлагает механизмы взаимодействия, которые способны поддерживать сложную коммуникационную среду разрозненных приложений и процессов, где, например, одновременно выполняющиеся рабочие потоки могут свободно «общаться» друг с другом по мере их продвижения.

Что.

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

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

Процессы BPMN и BPEL могут выступать в качестве модулей, позволяя переносить многократно используемую логику выполнения в отдельные компоненты и взаимодействовать с ними посредством предусмотренных механизмов взаимодействия.

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

Такое межкомпонентное взаимодействие известно под короткой аббревиатурой IPC (Inter Process Communication), которая объединяет различные методы обмена сообщениями и синхронизации данных.

Давайте рассмотрим пример такого взаимодействия.

В Oracle BPM межпроцессные коммуникации объединены в понятие «Разговор», которое используется для определения сценария взаимодействия между участниками общения.

Более того, в качестве участников могут выступать различные компоненты решения, такие как процессы BPMN или BPEL, Human Tasks, Business Rules, внешние по отношению к процессу сервисы.

Существуют различные типы диалогов, которые определяют интерфейс для «связи» вашего процесса с другими процессами или службами; это может быть собственный интерфейс или доступен по умолчанию.

Подробную информацию об этом можно найти в соответствующая документация Oracle .

В нашей демонстрации мы ограничимся обменом данными между двумя процессами, поэтому в нашем случае мы будем использовать интерфейс по умолчанию для межпроцессного взаимодействия: 1. Первый процесс является основным, эмулирует этапы обработки заявки; 2. Второй процесс - вспомогательный, эмулирует запрос дополнительной информации по приложению, который может занять некоторое время и результаты проверки могут понадобиться основному процессу не сразу, а на одном из этапов выполнения.

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

Итак, давайте запустим среду JDeveloper и откроем ранее созданный предыдущая статья Приложение «Образцы».

Повторите шаги, чтобы создать его, если у вас его нет. Создадим 2-й процесс, который будет эмулировать работу некоего фонового процесса, эмулирующего активность проверки данных в приложении: 1. Кликните правой кнопкой мыши по проекту «PubSubPr», выберите опцию «Новый» и из галереи выберите шаблон для создания нового процесса «Процесс BPMN 2.0»; 2. В открывшемся окне «Мастера» в качестве имени указать «BackgroundProcess», в качестве типа процесса указать «Асинхронный сервис» (процесс с асинхронным интерфейсом взаимодействия); 3. В качестве входного аргумента процесса (Input) укажите переменную с именем «reqProcess» в качестве типа, укажите QuoteRequest, доступный из публичного примера xsd схемы Quote. Демо-версия предложения по продажам :

Как организовать взаимодействие процессов в Oracle BPM

4. В качестве выходного аргумента процесса (Output) укажите переменную с именем «checkResult» и укажите тип переменной Boolean; 5. Нажимаем «Готово», на этом этапы создания процесса завершены, далее мы создадим в нем необходимые активности; 6. Создайте переменную процесса checkResult с типом Boolean:

Как организовать взаимодействие процессов в Oracle BPM

7. Прежде всего, эмулируем выполнение какой-то трудоемкой деятельности; для этого перенесем в процесс активность «Таймер» из палитры компонентов процесса раздела «Перехват событий»; 8. В открывшемся диалоговом окне оставляем название активности по умолчанию и сразу переходим на вкладку «Реализация», здесь указываем период ожидания равный 1 минуте, как на картинке ниже:

Как организовать взаимодействие процессов в Oracle BPM

9. Опять же, чтобы эмулировать результат выполнения какого-либо действия, переместите действие «Скрипт» из палитры компонентов на диаграмму процесса и в открывшемся окне «Мастера» оставьте имя по умолчанию и перейдите в раздел «Внедрение».

Здесь мы инициализируем переменную процесса значением «true», используя «Ассоциации данных»:

Как организовать взаимодействие процессов в Oracle BPM

10. Чтобы процесс возвращал ожидаемое значение вызвавшей его стороне, настроим отображение данных активности «Завершение» процесса:

Как организовать взаимодействие процессов в Oracle BPM

На этом создание вспомогательного процесса завершено.

Теперь внесем необходимые изменения в основной процесс и настроим взаимодействие со вспомогательным.

За основу основного процесса возьмем уже существующий в проекте «PubSubPr» процесс — «Процесс» и выполним последовательно следующие шаги: 1. Измените тип запуска процесса на «Сообщение», определите новый интерфейс для обмена сообщениями и укажите в качестве аргумента переменную quoteRequest с типом «QuoteRequest» и укажите «start» в качестве имени операции:

Как организовать взаимодействие процессов в Oracle BPM

2. Настройте сопоставление данных переменной аргумента с переменной процесса:

Как организовать взаимодействие процессов в Oracle BPM

3. Теперь создадим т.н.

«Разговор», который мы в дальнейшем будем использовать для взаимодействия со вспомогательным процессом, в структуре процесса кликаем правой кнопкой мыши по узлу «Разговор» и выбираем «новый».

4. В открывшемся окне даем имя «Процесс_BackgroundProcess» и в качестве типа взаимодействия указываем «Вызов процесса», после чего у нас есть возможность выбрать процесс, который необходимо вызвать, указываем «BackgroundProcess»:

Как организовать взаимодействие процессов в Oracle BPM

5. Переносим активность «ThrowEvent» в процесс, который будет вызывать наш вспомогательный процесс и в качестве «Разговора» указывать вновь созданный «Process_BackgroundProcess», а в качестве вызываемого узла указывать «Start»:

Как организовать взаимодействие процессов в Oracle BPM

Затем укажем отображение данных:

Как организовать взаимодействие процессов в Oracle BPM

6. Теперь передаем процессу активность «CatchEvent», достигнув которой процесс будет ждать результата вспомогательного процесса, в качестве качества «Разговор» указываем «Process_BackgroundProcess», в качестве вызываемого узла указываем «Конец»:

Как организовать взаимодействие процессов в Oracle BPM

После завершения действий скопируйте результат процесса в переменную процесса checkResult (если она отсутствует, создайте ее):

Как организовать взаимодействие процессов в Oracle BPM

7. Далее необходимо немного доработать саму схему процесса для эмуляции действий в ней, внести изменения согласно схеме ниже (обратите внимание, что все активности в процессе помечены как «черновики», за это отвечает соответствующий флаг активности).

это – «Черновик»).



Как организовать взаимодействие процессов в Oracle BPM

Для «условной» ветви, ведущей к задаче «ReviewTask» (выделена красным), укажите условие перехода:

Как организовать взаимодействие процессов в Oracle BPM

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

Давайте развернем его на сервере приложений Weblogic, интегрированном в JDeveloper. Для этого кликаем правой кнопкой мыши по нашему проекту «PubSubPr» и выбираем опцию «Выполнить»:

Как организовать взаимодействие процессов в Oracle BPM

После того, как наше приложение будет развернуто на сервере веб-логики, интегрированном в JDeveloper, мы можем начать тестирование.

Откроем консоль мониторинга системы Enterprise Manager по адресу localhost:7101/em, откроем развернутое приложение — PubSubPr и выберем для тестирования веб-сервис Process.service:

Как организовать взаимодействие процессов в Oracle BPM

Затем проверим историю запуска экземпляров процесса:

Как организовать взаимодействие процессов в Oracle BPM

Проверим историю выполнения завершенного экземпляра процесса:

Как организовать взаимодействие процессов в Oracle BPM

Здесь видно, что в момент прохождения токена процесса активности «ThrowEvent» (в нашем случае время выполнения активности «13:50:14») процесс «BackgroundProcess» (время начала «13:50:15») был асинхронно вызывается:

Как организовать взаимодействие процессов в Oracle BPM

Затем, выполнив несколько шагов, наш основной процесс «Процесс» ждал 1 минуту, пока «BackgroundProcess» вернет ответ в действии «CatchEvent», после чего продолжил выполнение.

Мы также можем визуально увидеть диаграмму взаимодействия процессов на этапе разработки процесса в JDeveloper. Он доступен на диаграмме BPMN нашей основной модели процесса во вкладке «Совместная работа»:

Как организовать взаимодействие процессов в Oracle BPM

Теги: #bpm #разговор #события #асинхронный вызов #oracle

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.