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 部分找到更多详细信息
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 部分找到更多详细信息