dram.me

配置jBPM邮件通知

补遗

  1. userinfo.properties的配置可以整合到LDAP中,需要设置Java系统属性org.jbpm.ht.userinfoldap,并配置kie-server/WEB-INF/classes/jbpm.user.info.properties文件。—— 2017-11-29

  2. Email WorkItem和Notification存在一点不同,Notification会尝试基于用户名查找邮件地址,而Email WorkItem则是直接使用指定内容。—— 2017-12-12

jBPM有两种模式可以实现邮件通知,分别是邮件服务任务(mail service task)和截止时间通知(deadline notification)。

邮件服务任务

要使用邮件服务任务,首先需要在项目Settings的Deployment descriptor中添加Work item handlers,名称为Email,标识符使用mvel表示如下:

new org.jbpm.process.workitem.email.EmailWorkItemHandler("smtp.example.com","25","user@example.com","password")

也可以将账号信息存放在Tomcat的conf/context.xml设置中,配置如下:

<Resource name="mail/jbpmMailSession"
    auth="Container"
    type="javax.mail.Session"
	mail.smtp.host="smtp.example.com"
	mail.smtp.port="465"
	mail.smtp.ssl.enable="true"
	mail.smtp.user="user@example.com"
	mail.smtp.auth="true"
    password="password"/>

还需要加入Java系统属性org.kie.mail.sessionjava:comp/env/mail/jbpmMailSession

这样work item handler定义可以简化为:

new org.jbpm.process.workitem.email.EmailWorkItemHandler(null, "-1", null, null)

使用Tomcat的机制有两点好处:

  1. 邮箱密码不用暴露在jBPM项目配置中;

  2. 支持SSL(直接配置的模式只支持STARTTLS)。

在完成初始配置后,就可以在BPMN中添加使用Email Task了。具体在BPMN Designer左侧Object Library的Service Tasks子栏中。添加到图中之后还需要设置Task的Data I/O配置,添加收件人、邮件标题、内容等信息。

首先依据Tomcat的文档配置,包括以下步骤:

该功能的具体实现在这里以及这里

截止时间通知

截止时间通知是jBPM另一种邮件通知方式,用于定时发送任务启动和截止的通知。具体的配置在JBoss BPM Suite 6.4文档(A.8.5.3. Notification)中有说明。jBPM内置的Evalution示例中也有邮件提醒的例子(在Self Evaluation任务中定义)。

要使用这个功能,除了在BPMN任务中定义Notifications属性,以及配置上述Tomcat Email Session之外,还需要为用户设置邮箱。

jBPM支持多种用户管理模式,从这个目录中可以看到,包括数据库、LDAP、Property等。例如在Property中,可基于email属性指定用户。

对于Property机制,可以创建/kie-server/WEB-INF/classes/userinfo.properties再以如下格式配置:

Administrator=admin@example.com:en-UK:Administrator\ Display\ Name
user=user@example.com:en-UK:User\ Display\ Name

其中Administrator是必需的,具体在哪些地方用到还需要确认。

另外,注意各用户的语言设置统一为en-UK,如果设置成其他语言当前会导致jBPM无法发送消息,相关代码在这里,该语言定义在jBPM中的作用以及是否可以定制还需要研究。

具体实现可以参考这里这里