Jmix — это платформа с открытым исходным кодом для повышения эффективности разработки корпоративного ПО. Java-разработчики со всего мира используют ее для создания приложений, ориентированных на работу с данными, корпоративным контентом и бизнес-процессами. Jmix особенно эффективен, если у проекта есть строгие ограничения по бюджету и срокам. По сути, Jmix позволяет Java-разработчику стать fullstack-программистом и в результате своей работы получить полноценное веб-приложение на основе Spring Boot. Платформа привлекает тем, что не требует затрат на лицензирование конечных пользователей, а для разработки и backend, и frontend используются один язык: Java или Kotlin. В основе платформы лежат широко распространенные технологии и IDE, дружественная разработчику. В этой статье расскажем, с чего начиналась поддержка моделирования бизнес-процессов в Jmix, как мы встроили в платформу фреймворк bpmn-js, и какие плюсы от этого получили пользователи.
Первые шаги в направлении BPMN
В случае приложений для управления транзакциями, документами или другими корпоративным данными часто требуется отделить бизнес-логику от кода. Это можно сделать с помощью визуального конструктора, в котором аналитики и разработчики моделируют бизнес-процессы в соответствии с нотацией BPMN. К этой идее мы пришли в 2017 году, после большого количества запросов со стороны сообщества разработчиков Jmix. Поначалу для создания бизнес-процессов мы использовали собственный инструмент на основе движка Activiti. Он был частью CUBA Platform, прошлого поколения платформы Jmix.
Этот конструктор был частью аддона Business Process Management, который включал следующие функции:
Встроенный в runtime визуальный дизайнер бизнес-процессов, соответствующий нотациям BPMN;
Интегрированная модель данных Activiti, обёрнутая в сущности CUBA, чтобы разработчики могли легко использовать их в UI и бизнес-логике;
Формы процессов — удобный способ отображения назначений и действий по процессам;
Пользовательский интерфейс для управления моделями бизнес-процессов, запуском экземпляров процессов и назначениями;
Возможность работы с подпроцессами, то есть включения одних моделей бизнес-процессов в другие, более крупные;
Локализация сообщений, которые использовались при отображении в UI имен задач, выходов из задач и т.д.
Конструктор бизнес-процессов сохранял данные в формате JSON. При развертывании процесса в CUBA Platform формат автоматически преобразовывался в BPMN XML для использования в «движке» Activiti. Так началось развитие интегрированной среды для моделирования бизнес-процессов в нотации BPMN, обогащения их контекста при помощи объектов модели данных и визуальных форм процессов, а также для исполнения процессов. Пользователи Jmix начали применять конструктор в своих проектах. Однако уже к концу 2018 года мы поняли, что UI данного конструктора устарел.
Пересмотр подхода к BPMN в Jmix
В 2019 году мы начали разработку следующего поколения платформы CUBA — Jmix.
Зачем?
Во-первых, мы хотели сократить использование кастомных технологий и приблизить платформу к мейнстримному подходу в Java-разработке.
Во-вторых, мы планировали объединить максимальное количество инструментов для повышения продуктивности в единой среде разработки, чтобы все было под рукой и не требовалось переключаться между окнами.
Во главу угла мы поставили принцип – «не изобретать велосипед». Встала задача выбрать новый популярный конструктор BPMN для интеграции в платформу с минимальной кастомизацией. После внутреннего R&D мы поняли, что оптимальный вариант — bpmn-js. Именно его мы выбрали из-за следующих особенностей:
Современный интерфейс;
Широкие возможности для усовершенствования, например, для добавления новых элементов и стилей;
Большое количество реальных примеров использования на GitHub;
Бесплатная поддержка сообщества с активным форумом;
Быстрое развитие.
Что касается движка, то мы перешли с Activiti на Flowable BPM.
Мы интегрировали конструктор bpmn-js в среду исполнения Jmix. Стало выглядеть гораздо более впечатляюще!
Bpmn-js, доступный Java-разработчикам
Как мы уже говорили, одна из главных особенностей Jmix состоит в том, что разработчики пишут на Java как backend, так и frontend. Для этого на серверной стороне в Jmix используется технология Vaadin, позволяющая управлять макетом frontend с помощью Java API. С Jmix обычно работают профессиональные Java-разработчики, поэтому мы решили обернуть конструктор bpmn-js в компонент пользовательского интерфейса Vaadin и связать специфичные Java методы с функционалом нового компонента. В результате пользователи Jmix получили готовый компонент на Java, который можно бесшовно интегрировать в приложение с учетом бизнеc-задач.
В качестве примера рассмотрим вариант использования Java-компонента для мониторинга текущего состояния бизнес-процесса. На скриншоте можно увидеть, что Jmix «из коробки» предоставляет подсистему BPM в среде исполнения и позволяет отслеживать состояние процесса на экране редактора экземпляров процессов.
В Jmix разработчики могут легко переиспользовать компонент bpmnViewer и всего за несколько простых шагов добавить его на нужный экран. Для этого в первую очередь нужно добавить компонент bpmnViewer в дескриптор макета экрана Jmix в качестве стандартного компонента UI.
Затем нужно встроить bpmnViewer в пользовательский контроллер экрана и настроить его поведение в соответствии с бизнес-логикой приложения.
Как показано на скриншоте выше, у Java-разработчиков есть все инструменты для встраивания и конфигурации отображения BPMN в их приложении:
Добавление компонента bpmnViewer;
Установка BPMN XML в компонент просмотра;
Вызов функции addMarker для установки конкретного стиля на элемент.
В результате этих манипуляций визуальный компонент мониторинга бесшовно встраивается в пользовательский экран. Разработчики Jmix могут переиспользовать его на во всём проекте с минимумом написания кода.
Это один из примеров того, как интеграция bpmn-js с технологией Vaadin привнесла новые идеи в процесс разработки приложений.
Однако мы не только добавили в Jmix готовый конструктор bpmn-js, но также расширили его своими уникальными функциями. Среди них:
Инструмент конфигурации Service task позволяет указать нужный Spring Bean из рабочего проекта и установить значения параметров в соответствии с контекстом бизнес-процесса. Снижается количество ошибок и опечаток .
Разработчики могут управлять Execution Listeners в удобном списочном представлении и выполнять конфигурирование в диалоговом окне редактора.
Интеграция конструктора bpmn-js и встраиваемого BPM-движка позволила разработчикам и аналитикам создавать бизнес-процессы в визуальном режиме и связывать их с моделью данных, ролями пользователей и бизнес-логикой. Это был уже более удачный вариант по сравнению с кастомным конструктором, но при работе все равно приходилось переключаться между режимами разработки и исполнения. Мы же хотели, чтобы все действия можно было выполнять при помощи одного инструмента. Звучит хорошо? На деле получилось еще лучше!
Переход к интегрированной среде разработки BPM
Наше видение стало реальностью в 2021 году, когда мы перенесли конструктор бизнес-процессов на базе bpmn-js в среду разработки IntelliJ IDEA.
Мы сохранили привычный жизненный цикл разработки приложений: после проектирования бизнес-процесса в Jmix Studio разработчик запускает его с помощью встроенного BPM-движка в локальном окружении. Сложнее всего было сохранить привычные пользователям механики при переходе от конструктора BPMN внутри среды исполнения к IntelliJ IDEA и при этом соответствовать рекомендациям по дизайну инструментов IDE.
Встроить в IntelliJ IDEA сам конструктор BPMN было несложно. Труднее оказалось реализовать совместимые с IDE инструменты конфигурирования элементов бизнес-процессов и их параметров.
После R&D мы решили добавить специальную подсветку редактируемых свойств элементов процесса в панели инструментов IDE, сохраняя логическую группировку свойств в среде исполнения. Сходство можно увидеть при сравнении одного и того же окна элемента типа User Task в конструкторе внутри среды исполнения Jmix и в конструкторе в Jmix Studio.
Положительное влияние на производительность разработчиков
Подведем итог и суммируем, какие результаты принесла интеграция BPMN в Jmix:
Используя bpmn-js, мы бесшовно интегрировали работу с BPMN в IntelliJ IDEA. Разработчики получили удобный инструмент для моделирования бизнес-процессов в сочетании с преимуществами единого подхода к проектированию UX и профессиональными инструментами работы с кодом приложения.
Подготовленные аналитиком диаграммы можно загружать непосредственно в IntelliJ IDEA, а затем дополнять их прикладной моделью данных, бизнес-логикой, пользовательскими экранами, интеграциями и обработкой исключений, не переключаясь между различными инструментами.
Процесс можно развернуть и запустить на рабочей станции разработчика, чтобы протестировать бизнес-логику и убедиться в корректности работы. Разработчики получают доступ ко всем мощным инструментам отладки IntelliJ IDEA, что упрощает работу и делает ее более эффективной.
После локальной отладки можно сделать commit и push изменений в общий репозиторий, что позволит аналитику увидеть обновленную версию диаграммы BPMN и проверить работу процесса в тестовой среде.
Если аналитику потребуется изменить модель BPMN, то диаграмму можно будет скорректировать прямо в runtime приложения и сразу протестировать. Обновленную версию диаграммы можно скачать и переслать разработчику для внесения изменений в design time.
Таким образом, Jmix позволяет охватить весь жизненный цикл создания бизнес-процессов в рамках общепринятых инструментов, и более того, интегрировать инструменты работы с BPMN в конвейер CI/CD.