Основная работа по созданию и редактированию схем бизнес-процессов в системе Camunda производится средствами приложения Camunda Modeler. Это приложение является бесплатным и его можно просто скачать с сайта Camunda в любом из трех вариантов:
- под Windows (поддерживаются Windows 7/8/10, как 32-разрядные, так и 64-разрядные)
- MacOSX (версия 10.11 и более поздние)
- Ubuntu (версия 12.04 и более поздние). На других дистрибутивах Linux, таких, как Fedora и Debian, CamundaModeler тоже запускаться не отказывается. В CentOS 8 для запуска CamundaModeler потребовалась предварительная установка пакета libXScrnSaver-1.2.3-1.el8.x86_64.rpm.
Camunda Modeler не требует установки: в любой операционной системе достаточно разархивировать скачанный архив, а затем запустить ее при помощи соответствующего файла:
- в Windows— при помощи Camunda Modeler.exe;
- в Mac OS — при помощи Camunda Modeler.app;
- в Linux — при помощи файла camunda-modeler (для новичков в Linux — нужно перейти в каталог с этим файлом и выполнить команду ./camunda-modeler).
Под какой операционной системой вы бы не запустили Camunda Modeler, интерфейс и функциональные возможности этой программы будут одинаковы. Окно Camunda Modeler с простейшей диаграммой BPMN может выглядеть так, как представлено на рис.
Посмотрим на интерфейс Camunda Modeler внимательнее.
Вверху — обычное меню, при этом при помощи команды File | New File или аналогичной кнопки на панели инструментов у нас есть возможность создать диаграмму одного из четырех поддерживаемых типов:
- BPMN (Business Process Management Notation)— наиболее распространенный тип диаграмм, описывающий стандартизированные бизнес-процессы. В качестве примера можно, например, привести заведение нового поставщика у ритейлера со сбором необходимых документов или процесс утверждения заявки на кредит;
- CMMN (Case Management Model and Notation)— тип диаграммы для обработки кейсов (ситуаций). Стандарт CMMN во многом похож на BPMN (и отчасти взаимозаменяем). Обычно он используется тогда, когда на бизнес-процесс могут сильно влиять различные внешние факторы и нужен более гибкий подход (и с большим влиянием факторов внешней среды), чем в BPMN. В качестве примера можно привести, например, производственное предприятие, которое делает изделие под заказ. Это предприятие может принять один и тот же заказ от одного и того же заказчика, а может и не принять, если считает, что оборудование потребуется под более выгодные заказы. А может, наоборот, принять невыгодный заказ, чтобы установить отношения с важным заказчиком в надежде на получение более крупных заказов;
- DMN (Decision Making and Notation)— тип диаграммы (или таблицы), который используется для поддержки принятия решений. Можно считать этот тип диаграмм дополнением к BPMN, которое позволяет не перегружать диаграммы BPMN огромным количеством шлюзов. Представим, например, бизнес-процесс по одобрению кредитной заявки на потребительский кредит. В BPMN можно очень удобно нарисовать схему прохождения документов, но на этапе утверждения кредита кредитным инспектором ему нужно принять во внимание множество факторов: текущую кредитную нагрузку, кредитную нагрузку членов семьи, кредитную историю, уровень заработной платы, место работы и т.п. Если все эти факторы попытаться разместить при помощи шлюзов на диаграмме BPMN, то диаграмма выйдет очень сложной и перегруженной. Поэтому практичнее моменты, связанные с принятием решений, вынести в отдельную диаграмму или таблицу DMN.
CMMN и DMN — инструменты относительно новые и применяются на предприятиях редко, поэтому в большинстве случаев когда речь идет об описании бизнес-процессов, имеются ввиду именно диаграммы BPMN. Поэтому возможности Camunda мы будем рассматривать в основном применительно к BPMN.
Чтобы можно было рассмотреть возможности интерфейса Camunda, в меню File | New File выберем BPMN Diagram.
Диаграммы в Camunda Modeler можно просматривать в двух режимах: в обычном графическом режиме диаграммы и в режиме XML. Переключение между этими режимами производится при помощи ярлычков в нижнем левом углу (см. рис.)
Стандарт BPMN 2.0 описывает не только графические элементы для диаграмм BPMN, но и их представление в формате XML (хотя в разных редакторах диаграмм BPMN могут использоваться свои дополнительные элементы и атрибуты, которые другими редакторами будут игнорироваться). Поэтому, если у вас есть диаграммы BPMN, подготовленные в другом редакторе, в большинстве ситуаций их вполне возможно перенести в Camunda Modeler.
Иногда приходится вносить изменения вручную прямо в код XML для диаграммы, но это требуется нечасто (и, по возможности, конечно, нужно этого избегать).
На Панели инструментов обратим внимание на кнопку Deploy Current Diagram (Развернуть текущую диаграмму) — см. рис.
Эта кнопка позволяет поместить диаграмму на сервер Camunda (тестовый или производственный) прямо из Camunda Modeler. При нажатии на нее откроется окно, аналогичное представленному на рис.
Конечно, можно пойти и обходным путем: сохранить диаграмму в файле формата BPMN и уже потом выложить ее на сервер, но выгрузка напрямую обычно удобнее.
Диаграмму можно сохранить и в графических форматах PNG/JPEG/SVG, если, например, вам потребовалось распечатать схему сложного бизнес-процесса для обсуждения.
В левой части Camunda Modeler находится Палитра элементов (Elements palette) — см. рис.
Разработчики диаграмм BPMN обычно берут элементы из этой палитры, перетаскивают в область диаграммы (центральную область окна Camunda Modeler) и настраивают. Заметим, что элементов, на первый взгляд, в палитре существенно меньше, чем предусмотрено стандартом BPMN. Связано это с тем, что в палитре присутствует лишь базовый набор элементов: другие элементы получаются из базовых путем преобразования их в области диаграммы. Например, в нашей диаграмме преобразовать стартовое событие в событие-сообщение можно так, если щелкнуть по объекту стартового события, нажать в контекстном наборе фигур на гаечный ключ и в списке типов сообщений выбрать Message Start Event (см. рис.).
Из этого же контекстного набора фигур очень удобно выбрать следующий элемент бизнес-процесса, вместо того, чтобы перетягивать его из палитры и затем связывать.
Пользовательских элементов в Camunda Modeler не предусмотрено. Их функциональность можно реализовывать при помощи шаблонов элементов/связанных классов Java (про эти возможности будет рассказано в следующих разделах). Можно также воспользоваться бесплатной альтернативой Camunda Modeler, которая называется BPMN.IO и в которой пользовательские элементы предусмотрены изначально.
Мастерство создателя диаграмм BPMN во многом заключается в том, насколько правильно он выбирает и расставляет элементы палитры (а также настраивает их свойства). Про работу с элементами диаграмм BPMN будет рассказано в следующих разделах.
В центральной части окна Camunda Modeler расположена сама диаграмма. Реальные рабочие процессы могут очень большими по размеру и включать в себя большое количество элементов, поэтому для комфортной работы разработчику бизнес-процессов рекомендуется большой монитор (а лучше — несколько). Чуть упростить навигацию по диаграмме позволит мини-карта (Minimap), кнопка для включения которой расположена в правом верхнем углу окна диаграммы.
В правой части окна Camunda Modeler расположена Панель свойств (Properties Panel) — см. рис.
В этом окне производится настройка свойств как самого процесса BPMN, так и его элементов.
Обычная последовательность работы с процессами BPMN (CMMN, DMN) в Camunda Modeler выглядит следующим образом:
- Средствами Camunda Modeler создаем новый процесс (диаграмму BPMN) и настраиваем его свойства.
- Размещаем на этой диаграмме элементы, меняем типы, связываем элементы.
- Настраиваем свойства элементов (на этом этапе производится привязка программного кода и форм к элементам).
- Публикуем процесс на тестовом сервере и запускаем его для проверки работоспособности (из самого Camunda Modeler запустить процесс, увы, нельзя).
- Выявляем проблемы и вносим изменения в процесс. Чтобы не возникало ситуаций вида «починил одно — в результате отвалилось другое», очень рекомендуется использовать юнит-тесты.
- Публикуем окончательную версию процесса на производственном сервере, предоставляем пользователям разрешения на этот процесс и интерфейс для его запуска.
Все эти моменты будут рассмотрены в следующих разделах.
Camunda — это отличный бесплатный BPM-движок для автоматизации бизнес-процессов. В этой статье я расскажу как по шагам сделать первую заготовку проекта с использованием языка Kotlin и Camunda. Уровень сложности материала низкий — статья снабжена скриншотами и видеоверсией. Вам нужно просто пройти по инструкции.
Вот видеоверсия статьи, кому-то может быть удобнее:
Как вообще можно использовать Camunda
Camunda можно использовать в двух вариантах:
- Standalone-сервер — в этом случае вы ставите приложение с сервером отдельно и заливаете на него свои процессы с помощью .war-файлов. База общая, исполнители задач общие, админка общая.
Я разбирал такой вариант подробно на видео.
- Библиотека внутри приложения — в этом случае вы разрабатывает обычное Java-приложение (в нашем случае Kotlin), и в зависимостях указываете Camunda. База своя, задачи свои, админка своя, исполнители свои.
Первый вариант удобнее для эксплуатации — следить нужно только за одной базой и одной камундой, но создает проблему “шумных соседей” — если кто-то из коллег сделает кривой процесс, то лягут все.
Второй способ удобнее полной независимостью, но создает сложности в администрировании и управлении задачами. Какой вариант выбирать каждая компания сама решает, но я за второй: все проблемы решаются, а вот в первом с шумными соседями ничего не сделать. И это ОЧЕНЬ больно и неприятно на проде, когда вы начинаете падать из-за коллег.
Предварительная подготовка рабочего места
Для создания первого проекта на Camunda вам потребуется:
- Среда разработки — IntelliJ Idea (https://www.jetbrains.com/idea/download/#section=windows). В этой штуке мы будем программировать.
- Сама Java — https://java.com/ru/download/ . Эта штука позволит среде разработки понять, что мы написали и обьяснить компьютеру.
- Postgresql https://www.postgresql.org/download/windows/ . Это база данных, Camunda будет сохранять туда информацию о всём происходящем.
- Excamad — https://github.com/KotskinKotskin/camunda-excamad/releases . Это дополнительная админка, которая позволит нам лучше понимать что происходит в Camunda.
- Camunda modeler — https://camunda.com/products/modeler/ . Эта штука поможет нам создавать диаграммы в BPMN и решения в DMN.
Поставьте всё себе на компьютер,сложностей не должно возникнуть. Если возникли, то пишите в комментарии, разберемся.
Почему Kotlin и Spring(boot)
Вместо Java мы будем использовать язык Kotlin — это статически типизированный язык программирования, работающий поверх JVM. Он более лаконичный и безопасный, чем Java. И порог входа в него немного ниже, что в этом случае нам очень важно.
Еще мы будем использовать Spring — это набор библиотек для Java, которые делают жизнь проще. А Spring boot — это еще одна штука, которая делает жизнь разработчика со Spring еще проще 🙂 В ообщем, программерская магия, которая не имеет отношения к статье.
Создаем приложение
- Создаем приложение — воспользуемся сайтом https://start.spring.io/, он сформирует для нас структуру проекта и добавит нужные зависимости. Установите такие параметры:
- Скачиваем папку с приложением.
- Запускаем IDEA и откройте в ней папку с приложением:
В параметрах укажите что разрешаете авто-импорт зависимостей. - Создаем базу данных в postgres: запустите приложение PgAdmin, войдите в него с логином и паролем, которое указывали при установке.Подключитесь к локальному серверу и создайте базу camundabpmn2
- Указываем данные для подключения к базе в файле application.properties
logging.level.org.springframework.web=DEBUG spring.datasource.url=jdbc:postgresql://localhost/camundabpmn2 spring.datasource.username=postgres spring.datasource.password=mypassword spring.jpa.generate-ddl=true spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
Вы получили работающее приложение, давайте проверим что всё ок. Запустите его:Переходим по адресу в браузере http://localhost:8080. Если вы видите такую картину, то вы красавчик! У вас есть пустое работающее spring приложение.
Запускаем пустую Camunda
Для запуска камунды нам нужно добавить зависимости в файл pom.xml. В этом файле хранится информация о том, какие внешние библиотеки мы используем. Добавим много библиотек — для тестирования, логирования, саму Camunda, REST интерфейсы, работа c JSON. За что отвечает каждая из библиотек понятно из названия. В итоге раздел в pom.xml должен выглядеть так:
<dependencies> <dependency> <groupId>io.github.microutils</groupId> <artifactId>kotlin-logging</artifactId> <version>1.6.24</version> </dependency> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.camunda.bpm.extension.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-test</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.camunda.bpm.assert</groupId> <artifactId>camunda-bpm-assert</artifactId> <version>3.0.0-alpha1</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.camunda.bpm.assert</groupId> <artifactId>camunda-bpm-assert</artifactId> <version>3.0.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.camunda.spin</groupId> <artifactId>camunda-spin-dataformat-json-jackson</artifactId> <version>1.6.7</version> </dependency> <dependency> <groupId>org.camunda.spin</groupId> <artifactId>camunda-spin-core</artifactId> <version>1.6.7</version> </dependency> <dependency> <groupId>org.camunda.bpm</groupId> <artifactId>camunda-engine-plugin-spin</artifactId> <version>7.10.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-reflect</artifactId> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
Ждём, пока скачаются все зависимости (полоска в правом нижнем углу).
- В главный класс дописываем аннотацию @EnableProcessApplication
- Добавляем проект excamad в папку static, для того чтобы заработала моя дополнительная админка
- Запускаем приложение, перейдем по ссылке http://localhost:8080/. Если видим приглашение зарегистрироваться, делаем учетную запись demo/ demo
- Заходим по ссылке http://localhost:8080/index.html, видим котиков — значит excamad работает. В разделе settings пропишем http://localhost:8080/rest/
Если вы сделали всё правильно, то у вас готова чистая Camunda на Kotlin. Теперь её можно наполнять вашими бизнес-процессами, этим займемся в других статьях.
В итоге
Как вы видите, сделать подготовительную работу для последующей автоматизации на Camunda совсем не сложно. Проще, чем развернуть кластер IBM BPM. У вас получилось? Напишите о вашем опыте в статье.
Продолжение статьи.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
ТэгиCamunda
Вам так же понравится
Евгений Тришечкин
ведущий Java-разработчик ростовского офиса компании Usetech
Меня зовут Евгений Тришечкин, я ведущий Java разработчик ростовского офиса компании Usetech, и сегодня хочу поделиться с вами применением Camunda BPM в Java разработке.
В рамках статьи я расскажу об основных компонентах системы управления бизнес-процессами Camunda. Покажу развертывание системы, моделирование и деплой простого процесса. А также, на примере созданного процесса, проиллюстрирую взаимодействие Java/SpringBoot приложения с Camunda.
Давайте сначала разберемся с терминологией и выясним, что же такое BPM, BPMS и BPMN.
BPM (Business process management) — концепция управления организацией, рассматривающая бизнес-процессы как особые ресурсы предприятия, непрерывно адаптируемые к постоянным изменениям, и полагающаяся на такие принципы, как понятность и видимость бизнес-процессов в организации за счет их моделирования с использованием формальных нотаций, использования программного обеспечения моделирования, симуляции, мониторинга и анализа бизнес-процессов, возможность динамического перестроения моделей бизнес-процессов силами участников и средствами программных систем.
Другими словами, BPM отвечает на вопросы, где, когда, зачем, как и какая задача выполняется и кто отвечает за ее выполнение.
BPMS (Business Process Management System) – программное обеспечение, обеспечивающее прикладную реализацию концепции BPM.
BPMN (Business Process Modeling Notation) – нотация (система графических обозначений и их описание в формате XML) бизнес-процесса.
BPMS на рынке существует великое множество, включая лидеров рынка – Oracle или IBM. Из названия понятно, что эти системы очень мощные, сильные, дорогие и подходят далеко не каждой организации, а стоимость их внедрения может начинаться от 100.000 евро и выше. Понятно, что только крупные компании могут себе позволить внедрить такую систему.
- На мой взгляд небольшим компаниям стоит обратить внимание на другие системы, внедрение которых обойдется в меньшие деньги. Например, российская компания ELMA запустила свой собственный продукт ELMA BPM, написанный на стеке .NET и имеющий бесплатную версию. Цена на Enterprise версию также вполне демократичная, кроме того, на сайте можно найти обучающие курсы и много другой полезной информации.
- Из зарубежных вендоров с демократическими ценами или бесплатными версиями я бы выделил jBPM.
- И еще одна бесплатная BPM система Аctivity, которую в 2013 году форкнули и из которой получилась известная многим Camunda BPM.
Компания Camunda Services, которая является вендором Camunda BPM, долгое время занималась консультированием организаций в области управления бизнес-процессами, но в результате создала свой продукт и начала активно его развивать.
В сети есть разные сравнения Аctivity и Camunda и, по большей части, они в пользу последней, да и список компаний, использующих камунду достаточно обширный: Deutsche Bank, Goldman Sachs Group, Тинькофф банк, Сбер, Теле 2 и т.д.
Мы все понимаем, что бизнес-процесс должен быть максимально понятным. Моделирование процессов происходит с применением нотаций (нотации — это система графических обозначений и их описание в формате XML). Нотаций существует довольно много, но самая популярная из них, конечно, текущая версия BPMN 2.0 (2.0.2 – 2014 г), которая постепенно развивается и пополняется новыми элементами.
Рассмотрим пример бизнес-процесса, описанном нотацией BPMN:
Евгений Тришечкин
ведущий Java-разработчик ростовского офиса компании Usetech
Меня зовут Евгений Тришечкин, я ведущий Java разработчик ростовского офиса компании Usetech, и сегодня хочу поделиться с вами применением Camunda BPM в Java разработке.
В рамках статьи я расскажу об основных компонентах системы управления бизнес-процессами Camunda. Покажу развертывание системы, моделирование и деплой простого процесса. А также, на примере созданного процесса, проиллюстрирую взаимодействие Java/SpringBoot приложения с Camunda.
Давайте сначала разберемся с терминологией и выясним, что же такое BPM, BPMS и BPMN.
BPM (Business process management) — концепция управления организацией, рассматривающая бизнес-процессы как особые ресурсы предприятия, непрерывно адаптируемые к постоянным изменениям, и полагающаяся на такие принципы, как понятность и видимость бизнес-процессов в организации за счет их моделирования с использованием формальных нотаций, использования программного обеспечения моделирования, симуляции, мониторинга и анализа бизнес-процессов, возможность динамического перестроения моделей бизнес-процессов силами участников и средствами программных систем.
Другими словами, BPM отвечает на вопросы, где, когда, зачем, как и какая задача выполняется и кто отвечает за ее выполнение.
BPMS (Business Process Management System) – программное обеспечение, обеспечивающее прикладную реализацию концепции BPM.
BPMN (Business Process Modeling Notation) – нотация (система графических обозначений и их описание в формате XML) бизнес-процесса.
BPMS на рынке существует великое множество, включая лидеров рынка – Oracle или IBM. Из названия понятно, что эти системы очень мощные, сильные, дорогие и подходят далеко не каждой организации, а стоимость их внедрения может начинаться от 100.000 евро и выше. Понятно, что только крупные компании могут себе позволить внедрить такую систему.
- На мой взгляд небольшим компаниям стоит обратить внимание на другие системы, внедрение которых обойдется в меньшие деньги. Например, российская компания ELMA запустила свой собственный продукт ELMA BPM, написанный на стеке .NET и имеющий бесплатную версию. Цена на Enterprise версию также вполне демократичная, кроме того, на сайте можно найти обучающие курсы и много другой полезной информации.
- Из зарубежных вендоров с демократическими ценами или бесплатными версиями я бы выделил jBPM.
- И еще одна бесплатная BPM система Аctivity, которую в 2013 году форкнули и из которой получилась известная многим Camunda BPM.
Компания Camunda Services, которая является вендором Camunda BPM, долгое время занималась консультированием организаций в области управления бизнес-процессами, но в результате создала свой продукт и начала активно его развивать.
В сети есть разные сравнения Аctivity и Camunda и, по большей части, они в пользу последней, да и список компаний, использующих камунду достаточно обширный: Deutsche Bank, Goldman Sachs Group, Тинькофф банк, Сбер, Теле 2 и т.д.
Мы все понимаем, что бизнес-процесс должен быть максимально понятным. Моделирование процессов происходит с применением нотаций (нотации — это система графических обозначений и их описание в формате XML). Нотаций существует довольно много, но самая популярная из них, конечно, текущая версия BPMN 2.0 (2.0.2 – 2014 г), которая постепенно развивается и пополняется новыми элементами.
Рассмотрим пример бизнес-процесса, описанном нотацией BPMN:
На картинке изображен процесс регистрации нового пользователя на портале, в достаточно упрощенном формате.
Здесь нарисован пул процесса и отдельными линиями – дорожки процесса. Каждая дорожка — это отдельная роль бизнес-процессов. Верхняя — это инициатор процессов, посередине – портал и внизу – ответственный за исполнение бизнес-процессов.
Зеленый кружок — стартовые события процессов, красные кружки – конечные события процессов.
Прямоугольник — задачи (=таски), которые исполняются во время жизненного цикла бизнес-процесса.
Задачи со значком шестеренок — сервисные задачи, которые не требуют участия оператора.
Задачи со значком человечка – это те задачи, которые требуют участия человека.
Данная система создана для примера и сильно упрощена, в полноценных системах присутствуют и другие элементы, шлюзы, которые реализуют ветвление, есть перехватчики событий, таймеры, и многое другое.
- Платформа управления бизнес-процессами, реализующая стандарты BPMN (Business Process Model and Notation), DMN (Decision Model and Notation) и CMMN (Case Management Model and Notation).
- Community версия имеет открытый исходный код, лицензия Apache-2.0.
- Основана на технологическом стеке популярного языка программирования Java. Имеет интеграцию с Spring/Spring Boot.
DMN – это модель принятия решения, которая представляет собой таблицу входных значений и результирующего выходного значения. Полезна в таких задачах, как принятие решения. Допустим, нужно принять решения о выдаче кредита или открытии счета и именно в этой таблице DMN вы найдете множество вводных параметров и выходной параметр, то есть результат – выдавать кредит или нет.
Компоненты CAMUNDA BPM (Community)
Давайте подробнее рассмотрим компоненты комьюнити версии Camunda:
- Camunda Modeler – кросс-платформенное приложение с графическим интерфейсом, в котором бизнес-аналитик или архитектор процесса может моделировать иили редактировать схемы процессов. Поддерживает нотации BPMN 2.0, DMN 1.1, CMMN 1.1. Это отдельное кросс-платформенное приложение с графическим интерфейсом, в котором бизнес-аналитик или архитектор процесса может составлять иили редактировать схемы процессов.
- Camunda Tasklist — веб-приложение, через которое конечные пользователи могут зайти, посмотреть какие задачи на у них назначены и выполнить какие-то действия.
- Camunda Cockpit – веб-приложение, которое создано для операторов или владельцев бизнес-процессов, обеспечивающее мониторинг и управление бизнес-процессами
- Camunda Admin – веб-приложение, интерфейс администратора системы, в котором идет управление ролями, пользователя, группами и т.д.
- Центральная часть системы Camunda BPM – это движок, который управляет процессом в соответствии с нарисованными схемами и нотациями CMMN и тд, и преобразует их в код, а потом — исполняет.
- Обратите внимание, что над движком существует надстройка, которая реализует REST или Java API. REST/Java API — программный интерфейс системы, обеспечивающий взаимодействие как с внешними (REST), так и внутренними (Java) компонентами. Rest API достаточно обширный, удобный и позволяет реализовывать всякие кастомные приложения. Например, там можно написать свой таск-лист, но подробнее мы рассмотрим эту возможность чуть позже.
Компоненты Camunda BPM (Enterprise)
Enterprise версия – платная, договор, тех поддержка 247 и в техническом плане она получше комьюнити версии. Например, появляются:
Enterprise Cockpit — расширенная версия Camunda Cockpit, содержащая в себе дополнительные функции: развертывание описаний процессов, перезапуск экземпляров процессов, расширенный поиск по экземплярам процессов, миграция экземпляров процессов между версиями.
Camunda Optimize — оптимизация и улучшение бизнес-процессов, выявление «узких мест», отчеты и «тепловые карты» процессов, все это помогает улучшить, оптимизировать и модернизировать бизнес-процессы.
Пример тепловой карты процесса
Тепловая карта показывает относительную частоту выполнения той или иной задачи в процессе. Она помогает визуализировать результат и принять решение, какой участок более нагружен и за счет каких ресурсовдействий его можно разгрузить.
Способы развертывания Camunda BPM
Как я ранее писал, Camunda BPM написана на тех. стеке Java, поэтому у нее есть много способов развертывания.
Первый и самый простой – встроенная библиотека в приложении и именно его мы будем подробно разбирать.
Второй способ тоже подходит для Java приложений — сервис внутри сервера приложений или контейнера сервлетов («расшаренный» сервис), который могут использовать другие приложения, развернутые в контейнере.
Третий способ, если приложения написаны не на Java, развернуть Camunda как отдельно стоящий сервер и приложение будут с ним контактировать по Rest API удаленно.
Четвертый способ для высоконагруженных систем — кластерное развёртывание для высоконагруженных систем, когда есть общая база данных и несколько нод с камундой.
Практическая часть – пробуем Camunda своими руками
- Заходим на https://start.camunda.com/.
- Знакомимся с Initializr, который достаточно примитивный, но рабочий. В нем вводим — группу, артефакт, версию Сamunda, версию Java (она никак там не ограничивается, я пробовал java 135 — все нормально, проект сгенерировался). Хочу обратить ваше внимание, что другие языки программирования кроме Java, Scala, Kotlin, выбрать нельзя.
- Скачиваем и открываем сгенерированный проект.
Внутри мы видим один класс Application — @SpringBootApplication, как я и писал ранее, камунда хорошо интегрируется со SpringBoot. А также в проекте есть файл с настройками приложения и файл с описанием процесса в формате BPM.
Процесс состоит из следующих этапов: стартовое событие, пользовательская задача, конечное событие. Пользовательская задача, самая простая, выглядит так: пользователь открыл задачу, нажал – завершить задачу и процесс завершился.
Но давайте немного усложним задачу и внесем изменения в процесс. Процесс мы сделаем процессом регистрации пользователя на портале, тот пример, о котором мы говорили в начале статьи и к которому обещал вернуться. Для этого нам нужно изменить стартовое событие и добавить туда переменную «username», которая добавляется через Camunda Modeler (кросс-платформенное решение, скачивается с официального сайта, бесплатное)
В результате у нас получилось модифицировать стартовое событие. Дальше необходимо модифицировать пользовательскую задачу, тут же добавляем форму с именем пользователя. Причем имя пользователя мы делаем «read only», чтобы тот человек, который будет утверждать создание нового пользователя не мог изменить его имя. А также добавляем переменную «decision», которая позволяет утвердить или отклонить эту регистрацию.
Запускаем экземпляр процесса. Для запуска экземпляра процесса заходим в приложение Camunda Tasklist (веб-приложение, через которое конечные пользователи могут зайти, посмотреть какие задачи на них назначены и выполнить какие-то действия) и нажимаем «Запустить процесс».
Находим свой демо процесс, который мы создали и видим форму запуска процесса.
После этого появляется окошко для ввода имени пользователя (переменная username), заполняем его и запускаем процесс.
Процесс запущен, и мы видим, что на пользователя Demo упала задача. Задача, как и ожидается называлась отклонить или утвердить регистрацию. Выделяем ее и видим форму, которую мы создавали. Также мы видим имя пользователя, которое нельзя редактировать, а решение – можно. Завершаем задачу, нажав кнопку «Complete» и на этом процесс завершается.
Давайте добавим немного экшена в процесс и усложним задачу – создадим ветвления.
Для этого добавляем к существующему процессу — шлюз, который будет «ветвить» этот алгоритм:
- Если
decision
равенtrue
, тогда создать нового пользователя. - Если
decision
равенfalse
, то просто отправить уведомление о том, что пользователь не создан.
И также создаем конечное событие. В результате у нас появляются два сервисных таска: создать нового пользователя и отправить уведомление. Сервисные таски, как я уже писал ранее, это таски, которые не требуют участия оператора в их выполнении. Следовательно, в них должна быть заложена логика и здесь мы покажем простой способ взаимодействия с Java кодом.
Выделяем модуль или сервисный таск и в нем прописываем implementation, выбирая способ Delegate Expression и добавляем в Delegate Expression собственное имя. Собственно этот бин нам и нужно создать в коде.
Для этого создаем класс CreateNewUser
, помечаем его как компонент, чтобы спринг создал в контексте соответствующий бин, а этот класс должен имплементировать JavaDelegate
.
В JavaDelegate есть метод execute
, который и будет выполняться, когда поток выполнения придет в этот сервисный таск. На примере выше мы видим, что из переменной DelegateExecution
можно вытащить переменную процесса, то есть username, которую мы вводили при старте процесса. Если все пройдет успешно, то в логе мы увидим сообщение, что пользователь успешно зарегистрирован.
Аналогично поступим в другим сервисным таском – отправить уведомление.
Также пропишем Delegate Expression, добавляем ему имя бина «notifyUser» и создаем соответствующий компонент, реализующий JavaDelegate
в коде.
Внутри метода execute
мы возьмем переменную decision
, также через объект DelegateExecution
, и в зависимости от этой переменной вы увидите разные сообщения:
- если
decision
равенtrue
, то мы видим «, добро пожаловать на портал!» - если
decision
равенfalse
, то мы видим «, вам отказано в регистрации»
Вот этот способ через DelegateExecution
работает только в случае с Java приложениями.
Возникает вопрос: а что делать, если приложение не на Java или если Camunda развернута на отдельном сервер?
В этом случае выбираете способ имплементации не Delegate Expression, а External и просто указываете какой-то топик, куда будет отправлен месседж и, соответственно, через очереди будет делегироваться выполнение в ваш код.
Последний шаг – запустить все то, что мы создали. Вводим имя
Видим таск «утвердитьотклонить регистрацию». Допустим, мы отклоняем регистрацию. Тогда не ставим галочку в поле «Утвердить?» и нажимаем «Complete».
После этого переходим в логи и видим, что пользователю Дарт Вейдер отказано в регистрации
Если мы принимаем регистрацию, то ставим галочку в поле «Утвердить?» и нажимаем «Complete». В этом случае процесс исполняется по другой ветке и в логах отображается по-другому.
Вместо вывода
Выше я описал самую простую схему процесса. В реальности же системы намного сложнее с множественными ветвлениями, а в эти диаграммы BPM можно вставлять другие таски, которые могут реализовать нотации DMN.
Camunda не позиционирует себя как low-code или no-code система. Camunda позиционирует себя как систему, где должно быть разумное сочетание, своеобразный симбиоз, между бизнесом, аналитиками и разработкой.
Полезные ссылки
- Быстрый старт
- Описание стандарта BPMN0
- Описание Rest API
- Практический курс BPMN0 от российской компании ELMA