2016-09-19 7 views
1

BPMN2.0 다이어그램에서 "동작 1"및 "동작 2"의 2 개의 동기식 "서비스 작업"이 있습니다.BPM의 중간 이벤트 또는 타이머

"조치 1"의 성공적인 실행 후, 외부 이벤트가 예상됩니다 (BPM 엔진이 관리하는 시스템 외부의 일부 조치). 이벤트가 발생하면 "작업 2"를 즉시 실행해야합니다 (다시 동기 서비스 작업).

나를위한 복잡한 부분은 이벤트가 예상되지만 일정 시간 (예 : 1 분) 동안 만 시간 초과를 정의하는 것입니다. 이후에 일부 시간 초과 오류 처리가 실행되어야합니다.

그래서 동작 2는 동작 1 이후 0-60 초 범위에서 가능한 한 빨리 실행되거나 전혀 실행되지 않아야합니다.

비동기 작업을 사용하지 않고이 작업을 수행하는 방법에 대해 알고 싶습니다 (두 번째 그림 참조).

...

그림은 Activiti BPM 엔진에서 실행됩니다

...

동기를 나는 몇 가지 아이디어 (세번째 사진)가 있지만, 예상대로 일하는 것이 있는지 확실하지 않습니다 실행

Synchronous execution

비동기 excecution

Async excecution

제안 된 해결

enter image description here

+0

내가 전에 activiti을 사용하지 않은 (나는 단지 내 자신을 사용한 적이 경계 타이머 이벤트와 임베디드 서브 프로세스에서 이벤트와 액션 2를받을 포장하는 것 bpm 구현),하지만 당신은 자바 서비스 작업 (작업 1), 자바 수신 작업 (외부 이벤트에 대한 대기) 및 자바 서비스 작업 (작업 2) 순서를 생성하여 시나리오를 달성 할 수 있어야한다고 생각합니다. 수신 태스크에서 타임 아웃을 구현하려면 자바 수신 태스크에 타이머 경계 이벤트를 첨부해야합니다. –

+0

감사합니다. 한 가지 더 질문합니다. 프로세스 인스턴스의 변수로 timeout의 길이를 구현할 수 있습니까? 아니면 프로세스 사양 (xml)에 정의해야합니까? – tomas

+0

가능한 것 같습니다 : http://www.activiti.org/userguide/#timerEventDefinitions –

답변

2

당신이 조치 1과 2 사이에 필요한 것은있는 '작업을받을'http://activiti.org/userguide/index.html#bpmnReceiveTask를 참조하십시오. API 호출이 완료되지 않으면 엔진이 계속 실행되지 않습니다 (v5의 경우 runtimeService.signal, v6의 경우 runtimeService.trigger).

1

EventBasedGateway을 사용하면 메시지가 수신 될 때까지 또는 타이머가 1 분 후에 트리거 될 때까지 기다릴 수 있습니다. 이벤트에 따라 해당 순서 플로우가 사용되며 다음 활동이 실행됩니다.

EventBasedGateway

EventBasedGateway에 대한 자세한 내용은 documenation를 참조하십시오.

0

또 다른 옵션은 메시지가