Сценарий, на котором я основываюсь
Load Balancer
|
------------------------------------------
| | |
Node 1 Node 2 Node 3
| | |
------------------------------------------
|
Common Database
Узлы 1, 2 и 3 будут иметь свои собственные одноэлементные экземпляры Process Engine. Все серверы находятся в конфигурации «активный-активный», что означает, что запросы маршрутизируются на каждый узел более или менее циклически.
Сценарий 1 Запрос направляется на узел 1, который запускает процесс с идентификатором 100. Activiti немедленно сбрасывает это состояние в базу данных. Другой запрос направляется на узел 2, где пользователь может захотеть выполнить неавтоматизированная задача (например, утверждение) для экземпляра процесса с тем же идентификатором, то есть 100. Хотя экземпляр процесса не находится в памяти 2-го узла, если механизм процесса на этом конкретном узле запрашивает базу данных, он получит его, загрузит и разрешит пользователь для выполнения задачи. Так что нет никаких проблем. Однако, поскольку JBPM 5.4 не сбрасывает свое состояние немедленно в базу данных, это вызовет проблемы. Я прав?
Сценарий 2 Это сценарий проверки производителя. Две программы проверки подключены к Узлу 1 и Узлу 2 соответственно. Первый контролер утверждает рабочий элемент. Второй контролер утверждает тот же рабочий элемент. Как Activti с этим справляется?. Сгенерирует ли он исключение или будет вести себя идемпотентным образом и позволит обеим операциям успешно завершиться? И как с этим справляется JBPM?