持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
Activiti的使用
老规矩,开始介绍Activiti中的功能,接下来是Activiti的监听器使用。
事件处理器
Activiti引擎中的事件机制可以帮助我们捕获Activiti引擎中发生的事件,有需要时可以根据事件类型做出具体的操作。我们接下来看看Activiti中为我们提供了哪些事件类型。
我们必须在事件被触发之前将监听器注册到Activiti中。我们可以通过配置添加全局范围内的引擎事件监听器,也可以在运行时使用API添加全局范围内的事件监听器,或者将事件监听器添加到BPMN XML中的特定流程定义中。
调度的所有事件都是org.activiti.engine.delegate.event.ActivitiEvent的子类。该类型对外暴露字段type, executionId, processInstanceId and processDefinitionId。如果需要获取事件包含的上下文或数据,事件的附加信息可以在Activiti的事件列表中找到。
实现自己的事件监听器
事件监听器只需要实现org.activiti.engine.delegate.event.ActivitiEventListener。如下时事件监听的一个实现,只是简单的将所有事件通过标准输入打印出来, 下面是侦听器的示例实现,它将接收到的所有事件输出到标准输出:
public class MyEventListener implements ActivitiEventListener {
@Override
public void onEvent(ActivitiEvent event) {
switch (event.getType()) {
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;
}
}
isFailOneException()方法确定OneEvent(..)的行为方法是指调度事件时抛出了一个异常。如果返回false,则忽略异常。当返回true时,异常不会被忽略并往上继续抛出,从而会使当前的执行命令失败。如果事件是API调用(或任何其他事务操作,例如作业执行)的一部分,则事务将回滚。如果事件监听器中的行为不是关键业务,推荐返回false。
Activiti提供了一些基本实现类来简化事件监听器的使用。可以将它们作为监听器的基类或者时默认实现:
- org.activiti.engine.delegate.event.BaseEntityEventListener:一个事件监听器的基类,可用于监听特定类型实体或所有实体的实体相关事件。它隐藏了类型检查,并提供了4个应该被重写的方法:
onCreate(..),onUpdate(…)和onDelete(…)创建、更新或删除实体时。对于所有其他实体相关事件,OneTityEvent(..)被调用。