Придумал тест для 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 писать не буду, переключился на другие темы.