Message receiving

Здравствуйте

Вопрос касается обработки messages  в Активити в Альфреско.

Есть процесс с определенным шагом. Смысл шага в следующем: процесс ожидает 5 минут, если в течении 5 минут сообщение не поступило, то процесс переходит в шаг "Корректировка", если же сообщение пришло, заканчивается процесс.

Описывается это следующим способом:
<message id="resolution" name="resolution" />
...
 
<sequenceFlow sourceRef="sendWay" targetRef="waitForResponse" />
 
<eventBasedGateway id="waitForResponse" />
 
<sequenceFlow sourceRef="waitForResponse" targetRef="messageEvent" />                
<sequenceFlow sourceRef="waitForResponse" targetRef="timerEvent" />
 
<intermediateCatchEvent id="messageEvent" name="Ожидание разрешения" >
	<messageEventDefinition  messageRef="resolution" />
</intermediateCatchEvent>
 
<intermediateCatchEvent id="timerEvent" name="Ожидание разрешения" >
	<timerEventDefinition>
		<timeDuration>PT5M</timeDuration>
	</timerEventDefinition>         
</intermediateCatchEvent>
 
<sequenceFlow sourceRef="timerEvent" targetRef="edit" />
<sequenceFlow sourceRef="messageEvent" targetRef="end" />
 
<userTask id="edit" name="Корректировка заявления" 
				activiti:formKey="abrw:edit" 
				activiti:candidateGroups="${abrw_manager}" >
...

Так вот я никак не пойму, как именно сказать процессу, что сообщение пришло и поэтому процесс, ожидая 5 минут, всегда завершается.

Т е я не понимаю, как именно имплементируется получение сообщения : в системе должен быть зарегестрирован bean с id="resolution" или же это простой email в сабджекте которого стоит этот АйДи? Или же это какая-то локальная шина? Если бин, то какой класс я должна имплементировать? Или же это просто js local scope object?

Понимаю, что вопрос выглядит сумбурным. Но смысл его таков: что мне надо сделать, чтобы сказать процессу, что сообщение пришло?

UPD:

Удалось просигналить процессу о получении сообщения. При поднятии процесса я запоминала execution id. Сообщение (как и любые сигналы в активити) - это что-то, что имплементируется вне процесса.  В моем случае был написан js scoped object и скрипт, который вызывался в по рулю на папке, куда и падал сигнальный документ. Скрипт вызывал метод notify, передавая ему execution id процесса и имя сообщения (Важно передавать именно имя, а не id сообщения!!!)

Проблемы было две:
- "откуда взять" объект Runtime Service (кстати, как оказалось, решение этого вопроса закрыло  данный топик)
- как же все таки просигналить (поскольку тексты кодов в гайде самой Активити упорно сообщали, что данный процесс и в помине не имеет сигнальных ивентов)

Итак, решение следующее

1.  Объект Runtime Service передается сеттеру в бине так:
<property name="runtimeService" ref="activitiRuntimeService" />
2. Кусок кода на java выглядит так:
....	
//Стандартный сеттер
public void setRuntimeService(final RuntimeService rsimpl) {
	this.rsimpl = rsimpl;
}
 
public void notify(String messageName, String executionId) {
...
 
        Execution execution = rsimpl.createExecutionQuery().messageEventSubscriptionName(messageName).singleResult();
        rsimpl.messageEventReceived(messageName, execution.getId());
....


Комментарии

fufler аватар
Я не знаю точного ответа, но подозреваю, что нужна вот эта штука.
Angelina аватар
Да, я тоже копаю в эту сторону... Если получится, отпишусь...
Angelina аватар
Получилось :)