Факториал 100 через рекурсию процесса в Camunda

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Придумал тест для BPM системы. Ну или забаву для BPM системы. Почему бы не посчитать факториал числа 100 рекурсией процесса в BPM системе? Предполагаю, что это хороший тест ядра BPM системы, выдержит ли ядро 100 вложенных вызовов процесса. И вернет ли результат из самого нижнего 100-го подпроцесса обратно в 1-й родительский процесс.

В Camunda это получилось.

Из рекламного буклета Camunda:

Разработан для обеспечения производительности: высокая пропускная способность, готовность к работе с кластерами и масштабируемость с очень легким (<3 МБ) механизмом выполнения моделей рабочих процессов BPMN.

Да, до тестирования Camunda, попробовал рекурсию процессов в двух других системах, правда не совсем BPM. Под рукой были две CRM системы, в которых есть дизайнер процессов.

В первой CRM/BPM системе нельзя вызвать в качестве подпроцесса этот же процесс, то есть рекурсия запрещена. Причем обмануть ограничение не удалось, создав две копии процесса, чтобы они друг друга вызывали. Система увидела, что в дизайне процесса из второго процесса вызывается снова первый, и выдала ошибку при попытке сохранить процесс.

Во второй CRM/BPM системе рекурсия запустилась, и факториал от 10 удалось посчитать, а вот для чисел выше 10, система зависала, зависший процесс приходилось убивать.

Итого, в Camunda в Modeler нарисовал процесс:

1. В начале процесса условием «Check Init» выполняется проверка, если параметры процесса еще не инициализированы, то выполняется инициализация.

2. Активность «Recursion Input» считывает входящие параметры.

3. Условием «Check End 1» проверяется количество рекурсий, если все рекурсии вызваны, то процесс завершается.

4. Активность «Call Self» собственно вызов самого себя, с передачей параметров в процесс, и получением параметров из процесса.

5. Условием «Check End 2» проверяется количество рекурсий, если все рекурсии вызваны, то создается задача, и выводится полученный из вызванного процесса результат.

6. Активность «Recursion Output» передает параметры из процесса.

Повозиться пришлось с типом получаемых на входе параметров, пришлось вместо Text поменять на Script, иначе экспоненциальная форма числа не проходила.

Отработавший процесс:

Подводя итог: Camunda это круто! )))

PS: к сожалению, больше про Camunda писать не буду, переключился на другие темы.

Источник: https://habr.com/ru/post/547016/


Интересные статьи

Интересные статьи

В этой статье расскажу, как работать через API с NSX Edge. Это решение от VMware выполняет для виртуального дата-центра функции маршрутизации, Firewall, NAT, DHCP, VPN и ...
Практически в любом проекте есть некая жесткая структура данных с перечислением (а чаще всего не одна), на которую нужно навешивать некие расширения: иконки в зависимости от типа или стат...
Один из ключевых сценариев работы в CRM это общение с клиентом в удобном для него канале. По почте, по телефону, по SMS или в мессенджере. Особенно выделяется WhatsApp — интеграцию с ...
К написанию данной концепции меня побудила проблема, с которой я сталкивался раз за разом, приходя на новый проект: за 5 лет коммерческой разработки мне постоянно "везло" приходить на п...
Приветствую вас, хабровчане! Как и обещал в конце прошлой статьи, я обратил свой взгляд на игровой движок. Правда мне больше приглянулся Godot. Почему? Тема для отдельной статьи размышления, а...