Добрый вечер.
Подскажите, пожалуйста, возможно ли и каким образом бросить “снаружи” message и/или signal в экземпляр процесса?
Добрый вечер.
Подскажите, пожалуйста, возможно ли и каким образом бросить “снаружи” message и/или signal в экземпляр процесса?
Отвечу сам себе. В core-модуле можно выполнить следующее:
final RuntimeService runtimeService = ProcessEngines.getDefaultProcessEngine().getRuntimeService();
runtimeService.messageEventReceived(messageName, executionId);
Все работает. Правда теперь есть два дополнительных вопроса:
Здравствуйте,
<boundaryEvent id="BoundaryEvent_0wvfpwh" attachedToRef="Task_1utj4v2">
<signalEventDefinition signalRef="signal1" />
</boundaryEvent>
signal1 здесь - это id сигнала.
Почему в API Flowable используются имена сообщений и сигналов, а не идентификаторы, я не знаю, многим интуитивно хочется передать туда id. Подумаем, может быть как-то получится с нашей стороны облегчить эту “неявность”.
Получить список сигналов процесса можно из объекта BpmnModel. Сам объект получается так:
BpmnModel bpmnModel = ProcessEngines.getDefaultProcessEngine()
.getRepositoryService()
.getBpmnModel(processDefinitionId);
Далее вызывается у него соответствующий метод: getSignals()
, getMessages()
и т.д.
List<ExecutionData> executions = bprocRuntimeService.createExecutionDataQuery()
.signalEventSubscriptionName("signal1")
.list();