6.4 KiB
1 End terminate event
2 None End Event vs Terminate End Event
Спецификация BPMN 2.0 однозначно трактует завершение процесса через призму жизненного цикла токенов.
Правило 1: Завершение Процесса (Process Completion)
Согласно спецификации (раздел 13.2.5 "Process Completion"):
Процесс завершается, когда не остается активных токенов. (A Process Instance is completed when there are no more Tokens in the Process Instance.)
Это фундаментальное правило. Пока в процессе существует хотя бы один активный токен (где бы он ни находился: в задаче, в событии, на потоке), экземпляр процесса считается активным и не может быть завершен.
Cценарий: Если в процессе после разветвления существует несколько токенов, и один из них достигает конечного события, происходит следующее:
- Этот конкретный токен уничтожается (consumed) upon arrival at the End Event.
- Все остальные токены продолжают свой путь по своим веткам процесса.
- Процесс остается активным до тех пор, пока ВСЕ токены не будут уничтожены, достигнув своих конечных событий.
Правило 2: Поведение Конечных Событий (End Event Behavior)
Здесь критически важен тип конечного события. Спецификация разделяет:
-
None End Event (Обычное конечное событие, без маркера):
- Действие: "Завершение потока (Throw)". Это означает, что событие просто "срабатывает".
- Результат: Уничтожает только тот токен, который в него вошел. На другие токены в процессе оно не влияет.
- Это поведение по умолчанию для вашего сценария.
-
Terminate End Event (Терминирующее конечное событие, с черным кружком внутри):
- Действие: "Прерывание (Terminate)".
- Результат: Немедленно завершает весь экземпляр процесса, включая все активные токены во всех его ветках. Это единственное событие, которое имеет такое глобальное воздействие.
Спецификация (раздел 10.2.6 "Terminate End Events") гласит:
When a Token arrives at a Terminate End Event, the entire Process Instance is terminated immediately. This means that all Tokens in the Process Instance in any Node are destroyed and no more Activitiеs will be executed.
Ссылки на спецификацию BPMN 2.0 (OMG, формальная версия)
- Process Completion: Смотрите раздел
13.2.5 Process Completionв документации BPMN 2.0 от OMG. В нем прямо указано, что процесс завершается, когда "no tokens are present". - Terminate End Event: Смотрите раздел
10.2.6 Terminate End Events. В нем явно описано поведение "immediate termination of the entire process instance".
Практический пример
Рассмотрим простой процесс с параллельным шлюзом (Parallel Gateway):
[Старт] -> [Параллельный шлюз] -> (Ветка А: Задача 1 -> Конечное Событие 1)
-> (Ветка Б: Задача 2 -> Конечное Событие 2)
- Токен из Старта достигает параллельного шлюза и размножается на два токена: Токен_А и Токен_Б.
- Токен_А быстро проходит Задачу 1 и достигает Конечного События 1 (None End Event).
- Результат: Токен_А уничтожается. Ветка А завершена. Однако Токен_Б все еще выполняет Задачу 2. Процесс остается активным.
- Токен_Б завершает Задачу 2 и достигает Конечного События 2.
- Результат: Токен_Б уничтожается. Теперь в процессе не осталось активных токенов. Только сейчас весь процесс считается завершенным.
Если бы Конечное Событие 1 было Terminate End Event, то в момент его достижения Токеном_А весь процесс был бы немедленно прерван, а Токен_Б был бы уничтожен, где бы он ни находился (даже внутри Задачи 2).
Вывод
- Основное правило: Процесс завершается, когда количество активных токенов становится равным нулю.
- Обычное конечное событие (None End Event): Уничтожает только свой токен. Не влияет на другие токены.
- Терминирующее конечное событие (Terminate End Event): Немедленно завершает весь экземпляр процесса, уничтожая все токены.
Таким образом, в сценарии с размноженными токенами процесс не завершится при завершении первого из них, если только это не специальное терминирующее событие.