ActivitiEventListener 的 onEvent 方法不起作用

ActivitiEventListener's onEvent method is not working

import org.activiti.engine.RuntimeService;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;


@SuppressWarnings("serial")
public class MyEventListener implements ActivitiEventListener,ExecutionListener,TaskListener {

  @Override
  public void onEvent(ActivitiEvent event) {

      System.out.println("Excecution id"+event.getExecutionId()+"ProcessDefinition id"+event.getProcessDefinitionId());
      System.out.println("ProcessInstance Id"+event.getProcessInstanceId()+"Type"+event.getType());

    switch (event.getType()) {

      case ACTIVITY_STARTED:
          System.out.println("Activi started ");
          break;
      case ACTIVITY_COMPLETED:
          System.out.println("Activi completed ");
          break;

      case TASK_CREATED : 
          System.out.println("Task Created ");
          break;

      case TASK_COMPLETED:
          System.out.println("Task completed ");
          break;

      case JOB_EXECUTION_SUCCESS:
        System.out.println("A job well done!");
        break;

      case JOB_EXECUTION_FAILURE:
        System.out.println("A job has failed...");
        break;

      default:
        System.out.println("Event received: " + event.getType());
    }
  }

  @Override
  public boolean isFailOnException() {
    // The logic in the onEvent method of this listener is not critical, exceptions
    // can be ignored if logging fails...
    return false;
  }

@Override
public void notify(DelegateExecution arg0) throws Exception {

    System.out.println("Notify Execution called");
    // TODO Auto-generated method stub

}

@Override
public void notify(DelegateTask arg0) {
    System.out.println("Notify Delegate task called");
    // TODO Auto-generated method stub      
}
}

我已经为进程指定了这个 class 名称。 我能够从 notify 方法中看到消息,但没有调用 onEvent 方法。

我已经为进程指定了这个 class 名称。 我能够从 notify 方法中看到消息,但没有调用 onEvent 方法。

BPMN 代码:

<process id="myProcess" name="myProcess" isExecutable="true">
    <extensionElements>
<activiti:executionListener event="start" class="MyEventListener"></activiti:executionListener>
    </extensionElements>
    <startEvent id="startevent1" name="Start"></startEvent>
    <userTask id="usertask1" name="Login" activiti:assignee="Darshan">
      <extensionElements>
        <activiti:taskListener event="create" class="MyEventListener"></activiti:taskListener>
      </extensionElements>
    </userTask>
    <userTask id="usertask2" name="Welcome Page" activiti:assignee="Darshan"></userTask>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
    <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
  </process>

您能够看到来自 notify 方法的消息,因为 MyEventListener class 被注册为任务侦听器,因此 Activiti 调用 notify(DelegateTask arg0) 提供的 TaskListener界面。
要调用 onEvent(ActivitiEvent event),您需要将 class 注册为事件侦听器。 BPMN 中的任务应如下所示:

<userTask id="usertask1" name="Login" activiti:assignee="Darshan">
    <extensionElements>
        <activiti:taskListener event="create" class="MyEventListener" />
        <activiti:eventListener class="MyEventListener" />
    </extensionElements>
</userTask>

您可以在 Activiti 用户指南 Adding listeners to process definitions 部分找到更多详细信息