2016-07-14 8 views
0

내 BPMN 파일은 다음과 같습니다 Addition.bpmnCamunda-bpm으로 프로세스 인스턴스를 종료하는 방법은 무엇입니까? 다음과 같이

다음과 같이 내가 RuntimeService을 사용할 수 있도록 작업을받을 사용하고

, 나는 sayHello가 클래스 내 프로세스를 시작하고 :

public void sayHello(ProcessEngine processEngine) { 

    try { 
     System.out.println("inside postdeploy "); 
     variables.put("a", 2); 
     variables.put("b", 5); 
     variables.put("c", 0); 

ProcessInstance instance= processEngine.getRuntimeService().startProcessInstanceByKey("Process_2", variables); 


variables.put("c",processEngine.getRuntimeService().getVariable(instance.getId(), "c")); 

     Execution execution = processEngine.getRuntimeService().createExecutionQuery() 
        .processInstanceId(instance.getId()) 
        .activityId("ReceiveTask_16nulbx") 
        .singleResult(); 

     processEngine.getRuntimeService().signal(execution.getId()); 

나는 내 C 변수를 설정 내 서비스 작업에 의해 다음과 같이 구현하는 Calculator 클래스에서 :

public class Calculator implements JavaDelegate { 

public void execute(DelegateExecution exe) throws Exception { 

    System.out.println("Inside calculator again"); 

    Integer x = (Integer) exe.getVariable("a"); 
    Integer y = (Integer) exe.getVariable("b"); 
    int add = x+y; 
    System.out.println("Addition is"+add); 
    exe.setVariable("c", add); 

} 

문제는 내 프로세스 인스턴스가 종료되지 않았기 때문입니다. 제 질문은 어떻게 내 C 변수를 가져온 후에 프로세스 인스턴스를 끝낼 수 있습니까?

답변

1

문제점은 수신 태스크가 완료된 후 프로세스 인스턴스 오브젝트가 갱신되지 않는다는 것입니다. 인스턴스가 종료되었는지 여부를 확인하려면 프로세스 인스턴스를 조회해야합니다. processInstance 다음 인스턴스가 완료 null입니다

ProcessInstance processInstance = processEngine 
    .getRuntimeService() 
    .createProcessInstanceQuery() 
    .processInstanceId(processInstanceId) 
    .singleResult(); 

경우 인스턴스가 여전히 존재하는 경우 확인하려면 다음 문을 사용합니다.