Activiti 自定义事件监听和邮件通知
来源:互联网 发布:淘宝店铺页头怎么添加 编辑:程序博客网 时间:2024/06/06 01:17
Activiti 自定义事件监听和邮件通知
参照Activiti官方文档https://www.activiti.org/userguide/#eventDispatcher
首先,建立我们的需求。即当有任务创建、分配、完成时,邮件通知对应用户。
完成步骤如下:
Activiti为我们提供了事件监听接口– ActivitiEventListener
org.activiti.engine.delegate.event.ActivitiEventType提供了各种可以监听到的事件类型
- 通过对应事件,获取有关联的用户,任务名称等。
public class OwnEventListener implements ActivitiEventListener { @Override public void onEvent(ActivitiEvent event) { System.out.println("Event received: " + event.getType()); if (event.getType() == ActivitiEventType.TASK_CREATED || event.getType() == ActivitiEventType.TASK_ASSIGNED || event.getType() == ActivitiEventType.TASK_COMPLETED) { ActivitiEntityEvent entityEvent = (ActivitiEntityEvent) event; TaskEntity taskEntity = (TaskEntity) entityEvent.getEntity(); MailWrapper.getInstance().sendTaskMail(taskEntity.getOwner(), taskEntity.getAssignee(), taskEntity.getName(), event.getType()); } }
最重要的一步就是强制将ActivitiEvent转换为其sub-interface(ActivitiEntityEvent),再将获取的Entity强制转换为具体的Entity,最终获取相应信息。
在邮件发送模块,需要构建邮件模版,单例化邮件组件。
public class MailWrapper { private final Logger log = LoggerFactory.getLogger(MailWrapper.class); @Autowired private MailSender mailSender; private MailWrapper() { Velocity.init(PropertiesUtil.readPropertiesInEnv("vm.properties")); } private static class WrapperSingleton { static final MailWrapper mv = new MailWrapper(); } public static MailWrapper getInstance() { return WrapperSingleton.mv; } public void sendTaskMail(String owner, String assignee, String taskName, ActivitiEventType eventType) { SimpleMailMessage msg = new SimpleMailMessage(); String toEmailAddress = KeystoneClient.getInstance().findEmailByUserId(assignee); String ownerName = KeystoneClient.getInstance().findNameByUserId(owner); String assigneeName = KeystoneClient.getInstance().findNameByUserId(assignee); TaskMail tMail = new TaskMail(ownerName, assigneeName, taskName, eventType); VelocityContext model = new VelocityContext(); model.put("task", tMail); Template template = Velocity.getTemplate("template/task_email.vm", "utf8"); StringWriter w = new StringWriter(); template.merge(model, w); msg.setSubject("hello world"); msg.setTo(toEmailAddress); msg.setText(w.toString()); try { mailSender.send(msg); log.info("mail has been sent to " + toEmailAddress); } catch (MailException e) { System.err.println(e.getMessage()); } }}
在构建模版时,使用的是org.apache.velocity组件,其资源配置文件如下:
resource.loader = classclass.resource.loader.description = Velocity Classpath Resource Loaderclass.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
告诉velocity,加载我们定义的模版文件时,使用classloader资源路径。当然,也可以配置物理路径,具体请参照官网,这里不加赘述。
1 0
- Activiti 自定义事件监听和邮件通知
- 【Android】监听自定义通知栏消息事件
- 创建和监听自定义事件
- EBS 自定义邮件通知
- Cocos2dx 3.0rc事件监听和消息通知
- ReactNative实现通知监听事件
- Activiti 引擎事件监听模型代码走读
- 监听和通知
- java 自定义监听事件
- Ext自定义事件监听
- java 自定义监听事件
- 自定义java事件监听
- java 自定义监听事件
- spring自定义事件监听
- 自定义UILable 监听事件
- Activiti监听
- 6.ListView的自定义adapter和监听滚动事件
- 自定义顶部标题栏和其事件监听设置
- edittext 手机号、邮箱输入限制、禁止输入--binbinyang
- spring-mvc框架下载
- Maven版本校验 Version Range的支持
- Ubuntu16.10 下安装node.js提示./configure 权限不够的解决方法
- Myeclipse将控制台日志输出到文件中和显示更多的日志信息
- Activiti 自定义事件监听和邮件通知
- Leetcode——36. Valid Sudoku
- Mysql事务以及加锁机制事务的特征ACID
- 类成员函数作为线程函数使用
- iPhone之为UIView设置阴影(CALayer的shadowColor,shadowOffset,shadowOpacity,shadowRadius,shadowPath属性)
- 移动端开发基础之适配
- elasticsearch5.1.1搭建环境
- 12.安卓Handler处理消息
- jquery trigger()事件报错,Uncaught RangeError: Maximum call stack size exceeded。