Релиз 2.0

Релиз Enterprise-редакции: OpenBPM Engine Enterprise 2.0.0 (2.0.0-ee) и OpenBPM Control Enterprise 2.0.0. Продукты выходят одновременно и обновляются вместе. В отличие от 1.1, этот выпуск не соответствует ни одному Community-релизу: часть изменений войдёт в следующий релиз платформы.

Оба продукта переведены на Spring Boot 4. Для Control это означает Java 21, для Engine — обязательное обновление приложений на Spring Boot до версии 4.0.

OpenBPM Engine 2.0.0

OpenBPM Engine 2.0 требует Java 17 или новее. Движок тестируется на Java 17, 21 и 25.

Приложения на Spring Boot должны быть переведены на Spring Boot 4.0 — стартеры OpenBPM Engine 2.0 со Spring Boot 3.x не работают. Сам движок при этом обратно совместим: публичный API не менялся, схема базы данных осталась версии 7.24, REST API — прежний. Если движок используется через Spring Boot, основная часть работы при обновлении — это перевод приложения на Spring Boot 4, а не изменения в коде, связанном с OpenBPM Engine.

Обновление проекта сводится к следующему:

  • Замените версию артефактов io.openbpm.* на 2.0.0-ee. Координаты артефактов не менялись.

  • В проекте на Spring Boot поднимите версию Spring Boot до 4.0.x, Gradle до 8.14+ (или 9.x), Maven — до 3.6.3+.

  • Пройдите по списку критических изменений и поправьте код, если он использует затронутые классы.

  • Обновите тесты: артефакт openbpm-engine с классификатором junit6 для JUnit 6 (классификатор junit5 сохранён, старые тесты работают).

Пошаговая инструкция для каждого дистрибутива — в разделе Обновление Enterprise с 1.x на 2.x.

Обновленные зависимости

Основные зависимости обновлены:

  • Spring Boot 4.0 (собрано с 4.0.8), Spring Framework 7.0

  • Jakarta EE 11

  • Quarkus 3.33 LTS

  • Tomcat 11.0.25

  • JUnit 6.0

  • Jersey 4.0 (Jakarta REST 4.0)

  • GraalVM JavaScript 25.0.4, Groovy 5.0.8

  • FEEL Scala 1.21

Поддержка OSGi удалена: JAR-файлы больше не содержат OSGi-манифестов.

Минимальные версии баз данных: PostgreSQL 14, MariaDB 10.11, MySQL 8.4, Oracle 21, SQL Server 2022. Для PostgreSQL 13 и MariaDB 10.6 поддержка прекращена.

Общие замечания по миграции на Spring Boot 4

Spring Boot 4 сам по себе требует правок в приложении. Чаще всего встречается следующее:

  • Стартер spring-boot-starter-web переименован в spring-boot-starter-webmvc. spring-boot-starter-test теперь содержит только JUnit 6, AssertJ и Mockito; прежний полный набор — в spring-boot-starter-test-classic.

  • JSON-библиотека Spring по умолчанию — Jackson 3. Переименуйте пакеты в собственных контроллерах и сериализаторах: com.fasterxml.jackson.databind → tools.jackson.databind, ObjectMapper → JsonMapper, @JsonComponent → @JacksonComponent. REST API движка (/engine-rest) остаётся на Jackson 2 и не затрагивается.

  • @MockBean и @SpyBean удалены — используйте @MockitoBean и @MockitoSpyBean.

  • Spring Security 7: удалены не-lambda методы конфигурации HttpSecurity. Стартер openbpm-engine-bpm-spring-boot-starter-security уже переведён на новый API; править нужно только собственную конфигурацию безопасности.

Удалённые и переименованные свойства Spring Boot находит spring-boot-properties-migrator — подключите его на время миграции. Большую часть замен выполняет рецепт OpenRewrite org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0.

См. также:

Новая и улучшенная функциональность

Если Cockpit, Tasklist и Admin работают в одном приложении с другой аутентификацией — например, с собственным логином на Spring Security, — сессионные cookie обоих механизмов выставлялись с Path=/ и при параллельных запросах перезаписывали друг друга. Пользователя могло выбросить из веб-приложений после запроса к другой части системы.

Теперь это решается одним свойством:

openbpm.bpm.webapp.session-cookie-path-enforcement=true

При включении регистрируется фильтр SessionCookiePathFilter, который переписывает Path сессионной cookie на путь веб-приложений: server.servlet.context-path + openbpm.bpm.webapp.application-path, по умолчанию /openbpm-engine. Имя cookie берётся из server.servlet.session.cookie.name или из конфигурации контейнера. По умолчанию свойство выключено, поведение прежних версий не меняется.

Health SPI и endpoint /health

В модуле openbpm-engine появился интерфейс io.openbpm.bpm.engine.health.HealthService, не зависящий от рантайма. Реализация по умолчанию проверяет соединение с базой данных через DataSource и состояние Job Executor; результат возвращается как HealthResult. Через FrontendHealthContributor в проверку добавляется доступность веб-приложений.

В Spring Boot сервис создаётся автоконфигурацией, и индикатор Actuator ProcessEngineHealthIndicator теперь опирается на него. В OpenBPM Engine Run добавлен endpoint /health, по умолчанию выключенный:

openbpm.run.health.rest-endpoint.enabled=true

SPI для подмены конфигурации движка

Раньше, чтобы подставить собственную реализацию ProcessEngineConfiguration, приходилось наследоваться от классов из пакетов .impl.. Теперь для этого есть два интерфейса, регистрируемых через ServiceLoader:

  • io.openbpm.bpm.engine.spi.ProcessEngineConfigurationFactory

  • io.openbpm.bpm.dmn.engine.spi.DmnEngineConfigurationFactory

Реализация объявляется в META-INF/services/io.openbpm.bpm.engine.spi.ProcessEngineConfigurationFactory.

JUnit 6

Тесты движка переведены на JUnit 6. Артефакт io.openbpm.bpm:openbpm-engine публикуется с классификатором junit6; классификаторы junit5 и junit4 сохранены. Классы расширений остались в пакете io.openbpm.bpm.engine.test.junit5 и работают с обеими версиями JUnit, так что менять импорты в тестах не нужно.

<dependency>
  <groupId>io.openbpm.bpm</groupId>
  <artifactId>openbpm-engine</artifactId>
  <version>2.0.0-ee</version>
  <classifier>junit6</classifier>
  <scope>test</scope>
</dependency>

Quarkus 3.33 LTS

Расширение для Quarkus собрано под Quarkus 3.33 LTS. Дальнейшие релизы 2.x будут оставаться на этой ветке, так что обновлять платформу Quarkus при каждом патч-релизе движка не придётся.

Исправление утечки памяти в JavaScript-скриптах

При выполнении Script Task на JavaScript движок GraalJS накапливал polyglot-контексты, и под длительной нагрузкой процесс падал с OutOfMemoryError. Особенно это проявлялось в контейнерах с ограничением по памяти. В 2.0 контексты освобождаются корректно.

Camunda Forms в Tasklist

В 1.1.x Tasklist не отображал формы с ключом camunda-forms:…: интерфейс ожидал префикс openbpm-engine-forms:. Исправлено, стандартный префикс работает. Если вы обходили проблему, меняя префикс в BPMN-моделях, верните camunda-forms:.

Критические изменения

Spring Boot 4

Стартеры io.openbpm.bpm.springboot:* версии 2.0.x требуют Spring Boot 4.0.x. Обновите плагин или parent Spring Boot до 4.0.8 и выполните правки из раздела Общие замечания по миграции на Spring Boot 4.

OSGi

Поддержка OSGi удалена. Если приложение развёрнуто в Apache Karaf или другом OSGi-контейнере, оно останется на 1.1.x. Для перехода на 2.x переведите его на Spring Boot, OpenBPM Engine Run, Tomcat или Quarkus.

HistoryLevelSetupCommand

Класс io.openbpm.bpm.engine.impl.HistoryLevelSetupCommand стал интерфейсом. Реализация по умолчанию — DefaultHistoryLevelSetupCommand, вспомогательные методы вынесены в HistoryLevelUtils.

// раньше
config.setHistoryLevelCommand(new HistoryLevelSetupCommand());

// теперь
config.setHistoryLevelCommand(new DefaultHistoryLevelSetupCommand());

Если вы переопределяли ProcessEngineConfiguration.getHistoryLevelCommand(), тип возвращаемого значения — интерфейс HistoryLevelSetupCommand.

ExceptionHandlerHelper

У класса io.openbpm.bpm.engine.rest.exception.ExceptionHandlerHelper удалён синглтон, методы стали статическими. Затрагивает собственные ExceptionMapper в расширениях REST API.

// раньше
Response response = ExceptionHandlerHelper.getInstance().getResponse(exception);

// теперь
Response response = ExceptionHandlerHelper.getResponse(exception);

Аналогично удалены StartProcessVariableScope.getInstance(), VariableInstanceEntityFactory.INSTANCE и SimpleVariableInstanceFactory.INSTANCE — создавайте экземпляры через конструктор. Все эти классы лежат в пакетах .impl. и не входят в публичный API, поэтому изменение не считается нарушением совместимости, но код, который их использует, придётся поправить.

SpinScriptEnv

Удалено поле extensions.

Группа администраторов

Мастер первоначальной настройки Admin и генератор демо-данных теперь создают системную группу с именем openbpm engine BPM Administrators. Идентификатор группы (openbpm-engine-admin) не менялся, существующие записи в базе данных не затрагиваются. Если ваши скрипты или тесты проверяют имя группы по строке, обновите её.

OpenBPM Engine Run: SSL в production-профиле

В профиле production SSL больше не включается по умолчанию. Если он нужен, задайте server.ssl.* в configuration/production.yml явно.

Минимальные версии баз данных

PostgreSQL 13 и MariaDB 10.6 больше не поддерживаются. Обновите базу данных до PostgreSQL 14 или MariaDB 10.11 перед переходом на 2.0.

Исправления

  • Из дистрибутивов исключён jackson-module-scala; если приложение использовало его транзитивно, добавьте зависимость явно.

  • Netty закреплён на версии не ниже 4.2.16, Jackson BOM — не ниже 3.1.5 (устранены CVE-2026-56745 и CVE-2026-59889).

  • Устранён NullPointerException при удалении вложений задачи.

  • REST API корректно отвечает, если job очистки истории отсутствует.

  • В MDC пишется ключ определения процесса из базы данных, а не из кеша парсинга.

  • Spring Boot: проверяется целевой адрес редиректа при обращении по URL с завершающим /.

  • Формы: корректно обрабатываются поля типа date.

  • Веб-приложения распознают дополнительные имена файлов лицензий и собираются в production-режиме.

  • Исправлено описание OpenAPI для PUT /external-task/{id}/retries и POST /external-task/{id}/lock.

OpenBPM Control 2.0.0

OpenBPM Control 2.0 требует Java 21: приложение переведено на Jmix 3.0 и Spring Boot 4. Перед обновлением установите JDK 21 на сервер, где работает Control. Порядок установки и обновления — в разделе Установка.

Enterprise-функции теперь включаются лицензионным ключом. Без лицензии Control работает в объёме Community-редакции: платные разделы в меню отмечены значком замка. Как установить ключ — в разделе Лицензирование.

Обновленные зависимости

  • Jmix 3.0, Spring Boot 4.0

  • Java 21

Новая и улучшенная функциональность

AI-ассистент

В Control появился ассистент на базе LLM. Он делает сводку по открытым инцидентам, объясняет, как устроен развёрнутый процесс или DMN-решение, помогает понять, почему экземпляр процесса остановился, и отвечает на вопросы о данных, доступных в Control. Ассистент только читает данные и ничего не меняет в движке. Подробнее — AI-ассистент.

История изменений переменных процесса

На вкладке История → Переменные экземпляра процесса раньше было видно только последнее значение каждой переменной. Теперь можно посмотреть каждое изменение: когда оно произошло, в какой активности и какое значение было записано. Анализ работает в две стороны — выбрать активность на диаграмме и увидеть, какие переменные она изменила, или выбрать переменную и увидеть все её изменения на диаграмме. Для этого движок должен вести историю на уровне full. Подробнее — История изменений переменных процесса.

Подключение к движку через OAuth2

К способам аутентификации при подключении BPM-движка — HTTP Basic и HTTP Headers — добавлен OAuth2. Control сам получает access token у сервера авторизации и подставляет его в запросы к REST API движка. Настройка подключения — в разделе Подключение к движку BPM.

Экспорт списков в Excel

На экранах списков, которые загружают данные из движка, добавлено действие Excel: процессы, экземпляры процессов, инциденты, пользовательские задачи, решения, экземпляры решений, deployments и batch-операции. Экспортируются строки текущей страницы таблицы.

Время движка в часовом поясе пользователя

Даты и время, полученные от движка, теперь показываются в часовом поясе пользователя Control, а не в поясе сервера движка.

Диаграмма экземпляра процесса

Переработана подсветка состояния на диаграмме экземпляра процесса. Элементы, через которые выполнение не проходило, по умолчанию отображаются приглушёнными; на активных элементах показывается не только число инцидентов, но и число экземпляров активности. Добавлены переключатели: показывать цвета элементов, заданные в BPMN XML (по умолчанию скрыты), и число завершённых экземпляров активности на элементах.

Прочее

  • В типах движка добавлен CIB Seven.

  • На экране отправки сообщения в группе Start message появилось поле Business key — как на экране запуска процесса.

Критические изменения

Java 21

Control 2.0 не запускается на Java 17. Обновите JDK до 21 перед установкой новой версии.

Исправления

  • Долгий старт приложения, если преднастроенный движок недоступен.

  • Изменение переменных процесса через диалог, открытый по ссылке.

  • Тип изменения в таблице истории переменных не совпадал со статусом в карточке.

  • Jobs и данные на вкладках Runtime не фильтровались по выбранной активности на экране экземпляра процесса.

  • Ошибка при проверке подключения (Test connection) с пустым URL движка.

  • Тепловая карта: значения не скрывались после смены версии процесса и после скрытия соединений.

  • Экспорт процесса без экземпляров выгружает только общие данные.

  • Кнопка экспорта скрывается вместе с компонентами, к которым относится.

  • Локализация сообщений; отсутствующий bundle для диалога активации лицензии.

  • На странице About текстовые ссылки заменены на ссылки-иконки.