Что такое Activiti и для чего он используется?

«Что такое Activiti и для чего он используется?» — вопрос из категории Other, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Activiti — это open-source Java-фреймворк и движок бизнес-процессов (BPM), реализующий спецификацию BPMN 2.0 (Business Process Model and Notation). Он предназначен для моделирования, исполнения и мониторинга бизнес-процессов внутри приложений.

Ключевые концепции:

  • BPMN 2.0: Стандартная нотация для описания процессов (задачи, шлюзы, события, потоки).
  • Process Engine: Ядро, которое разворачивает BPMN-диаграммы и управляет жизненным циклом экземпляров процессов.
  • База данных: Activiti сохраняет состояние процессов в реляционную БД (H2, PostgreSQL, MySQL и др.), обеспечивая персистентность и возможность кластеризации.

Основные сервисы ядра:

Сервис Назначение
RepositoryService Управление развертыванием BPMN-моделей (.bpmn20.xml файлы).
RuntimeService Запуск новых экземпляров процессов и управление ими.
TaskService Работа с пользовательскими задачами (создание, завершение, назначение).
HistoryService Доступ к историческим данным о выполненных процессах и задачах.

Базовый пример инициализации и запуска процесса:

// 1. Создание ProcessEngine (часто через Spring Boot Starter)
ProcessEngine processEngine = ProcessEngineConfiguration
    .createStandaloneInMemProcessEngineConfiguration()
    .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
    .buildProcessEngine();

// 2. Развертывание процесса из BPMN-файла
RepositoryService repoService = processEngine.getRepositoryService();
Deployment deployment = repoService.createDeployment()
    .addClasspathResource("onboarding-process.bpmn20.xml")
    .deploy();

// 3. Запуск экземпляра процесса
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> variables = new HashMap<>();
variables.put("employeeName", "John Doe");
ProcessInstance instance = runtimeService.startProcessInstanceByKey("employeeOnboarding", variables);

Типичные сценарии использования: автоматизация workflow (согласование заявок, онбординг сотрудников), оркестрация микросервисов, выполнение сложных последовательностей бизнес-правил.